Merhaba arkadaşlar, SQL makale dizimizin yeni bir bölümü ile karşınızdayım.
Bundan önceki sırası ile;
1-) SQL'de Tablolar Nedir? ve Nasıl Oluşturulur?
2-) SQL'de Tabloları Değiştirme
3-) SQL'de Tabloları Silme İşlemi
4-) SQL'de Manuel Veri Eklemek - INSERT INTO
Şimdiki konumuzda ise verileri SQL'de kopyalayarak eklemeyi göreceğiz. Bunun için SELECT ifadesini kullanacağız. SELECT ifadesi bir veri satırını tutmamıza yarayan ifadedir.
Verileri satır satır belirtmek yerine, bir tablodan birden çok veri satırını kopyalayabilir ve bunları bir SELECT
sorgu ile diğerine ekleyebilirsiniz .
Bu tür bir işlem için sözdizimi şuna benzer:
INSERT INTO table_A (col_A1, col_A2, col_A3)
SELECT col_B1, col_B2, col_B3
FROM table_B;
VALUES
Anahtar kelimeyle birlikte sütun listesini takip etmek yerine , bu örnek sözdizimi onu bir SELECT
ifadeyle takip eder. SELECT
Bu örnek sözdiziminde deyimi sadece içerir FROM
maddesini, ancak herhangi geçerli bir sorgu çalışabilir.
Örnek olarak, CREATE TABLE
adlı yeni bir tablo oluşturmak için aşağıdaki işlemi çalıştırın showroomEmployees
. Bu tablonun sütunlarının factoryEmployees
, önceki bölümde kullanılan tablodaki üç sütunla aynı adlara ve veri türlerine sahip olduğuna dikkat edin:
CREATE TABLE showroomEmployees (
name varchar(30),
hourlyWage decimal(4,2),
startDate date
);
Şimdi, bu yeni tabloyu , yani factoryEmployees
bir SELECT
ile sorgu ekleyerek önceden oluşturulmuş tablodan bazı verilerle yükleyebilirsiniz.
Eğer SELECT
sorgu hedef tablonun sütunları aynı sırada aynı sayıda sütun döndürüyor ve aynı zamanda uyumlu eşleşen veri türlerine sahip ise, bir sütun listesi atlayabilirsiniz:
INSERT INTO showroomEmployees
SELECT
factoryEmployees.name,
factoryEmployees.hourlyWage,
factoryEmployees.startDate
FROM factoryEmployees
WHERE name = 'Agnes';
Not : Bu işlemde SELECT
sorgusunda listelenen sütunların her birinin önünde tablo adı factoryEmployees
ve noktadan sonra alan adı bulunur. Bunun gibi bir sütuna atıfta bulunurken bir tablo adı belirttiğinizde, buna tam nitelikli sütun referansı denir . Bu özel durumda bu gerekli değildir. Aslında, aşağıdaki örnek INSERT INTO
ifade bir öncekiyle aynı sonucu verecektir:
INSERT INTO showroomEmployees
SELECT
name,
hourlyWage,
startDate
FROM factoryEmployees
WHERE name = 'Agnes';
Bu SELECT
işlemdeki ifade de yer alan WHERE
, sorgunun yalnızca sütunu değeri içeren factoryEmployees
tablodan satırlar döndürmesine neden olan bir alan adını yani name
alanınıda Agnes
olanları tutmamıza yaradı. Kaynak tabloda böyle tek bir satır olduğu için, yalnızca o satır showroomEmployees
tabloya kopyalanır.
Yaptığımız işlemi onaylamak yani sağlamasını yapmak adına, showroomEmployees
tablodaki her kaydı döndürmek için aşağıdaki sorguyu çalıştırın :
SELECT * FROM showroomEmployees WHERE name='Agnes';
Şöyle bir çıktı alacaksınız:
+-------+------------+------------+
| name | hourlyWage | startDate |
+-------+------------+------------+
| Agnes | 26.50 | 2017-05-01 |
+-------+------------+------------+
1 row in set (0.00 sec)
Kaynak tablodan birden fazla satır döndürecek herhangi bir sorguya birden çok veri satırı ekleyebilirsiniz. Örneğin, aşağıdaki ifadede yer alan sorgu, factoryEmployees
veritabanında name
sütundaki değerin J
ile başlamadığı her kaydı döndürür.
INSERT INTO showroomEmployees
SELECT
factoryEmployees.name,
factoryEmployees.hourlyWage,
factoryEmployees.startDate
FROM factoryEmployees
WHERE name NOT LIKE 'J%';
İşte bu kadar bir sonraki makalede görüşmek üzere sağlıkla kalın...