SQL Veri Manipülasyon Dili

SQL veri işleme dili (DML), veritabanı verilerini sorgulamak ve değiştirmek için kullanılır. Bu bölümde, aşağıda tanımlanan SELECT, INSERT, UPDATE ve DELETE SQL DML komut deyimlerinin nasıl kullanılacağı anlatılacaktır.

  • SELECT - veritabanındaki verileri sorgulamak için
  • INSERT - bir tabloya veri eklemek için
  • UPDATE - bir tablodaki verileri güncellemek için
  • DELETE - bir tablodan veri silmek için

SQL DML deyimi içinde:

  • Bir ifadedeki her cümle yeni bir satırda başlamalıdır.
  • Her cümlenin başlangıcı diğer cümlelerin başlangıcı ile aynı hizada olmalıdır.
  • Bir cümlenin birkaç bölümü varsa, bunlar ayrı satırlarda görünmeli ve ilişkiyi göstermek için cümlenin başlangıcının altında girintili olmalıdır.
  • Ayrılmış kelimeleri temsil etmek için büyük harfler kullanılır.
  • Kullanıcı tanımlı kelimeleri temsil etmek için küçük harfler kullanılır.

SELECT İfadesi

SELECT ifadesi veya komutu, kullanıcının belirli kriterlere dayalı olarak tablolardan veri çekmesine olanak tanır. Aşağıdaki sıraya göre işlenir:

SELECT DISTINCT öğe(ler)
FROM tablo(lar)
WHERE yüklemi
GROUP BY alan(lar)ı
ORDER BY alanlar

Employees tablosundan bir çalışan telefon listesi oluşturmak için SELECT deyimini aşağıdaki gibi kullanabiliriz:

SELECT  FirstName, LastName, phone
FROM Employees
ORDER BY LastName

Bu eylem, aşağıdaki tabloda görülen Employees (Çalışanlar) tablosundan çalışanın soyadını, adını ve telefon numarasını görüntüler.

Last NameFirst NamePhone Number
HagansJim604-232-3232
WongBruce604-244-2322
Tablo; Employees tablosu.

Bir sonraki örnekte, bir Publishers tablosu kullanacağız (Aşağıdaki tablo). ( Example Publishing ve ABC Publishing için Yayıncı Ülkesi alanında Kanada'nın yanlış yazıldığını fark edeceksiniz. Yanlış yazımı düzeltmek için ülke alanını Canada olarak standartlaştırmak üzere UPDATE deyimini kullanın - bu bölümün ilerleyen kısımlarında UPDATE deyimine bakın).

Publisher NamePublisher CityPublisher ProvincePublisher Country
Acme PublishingVancouverBCCanada
Example PublishingEdmontonABCnada
ABC PublishingTorontoONCanda
Tablo; Publishers tablosu.

Yayıncının adını ve şehrini eklerseniz, SELECT deyimini ve ardından virgülle ayrılmış alan adlarını kullanırsınız:

SELECT PubName, city
FROM Publishers

Bu eylem Yayıncılar tablosundan yayıncının adını ve şehrini görüntüler.

City görünen adı altında yalnızca yayıncının adını istiyorsanız, pub_name ve city'yi virgülle ayırmadan SELECT deyimini kullanırsınız:

SELECT PubName city
FROM Publishers

Bu eylemin gerçekleştirilmesi, Publishers tablosundan yalnızca pub_name'i bir "city" başlığıyla görüntüleyecektir. Virgülü dahil etmezseniz, SQL Server pub_name için yeni bir sütun adı istediğinizi varsayar.

WHERE ölçütlü SELECT ifadesi

Bazen Publishers tablosunun bir bölümüne odaklanmak isteyebilirsiniz, örneğin yalnızca Vancouver'da bulunan yayıncılar gibi. Bu durumda, WHERE kriteriyle birlikte SELECT ifadesini kullanırsınız, yani WHERE city = 'Vancouver'.

Bu ilk iki örnek, BETWEEN kullanarak WHERE ölçütü ile kayıt seçiminin nasıl sınırlandırılacağını göstermektedir. Bu örneklerin her biri, stokta 20 ila 50 arasında ürün bulunan mağaza ürünleri için aynı sonuçları verir.

Örnek #1, miktarı 20 ile 50 arasında olan qty'yi kullanmaktadır.

SELECT StorID, qty, TitleID
FROM Sales
WHERE qty BETWEEN 20 and 50  (includes the 20 and 50)

Diğer yandan Örnek #2, adet >=20 ve adet <=50 kullanır.

SELECT StorID, qty, TitleID
FROM Sales
WHERE qty >= 20 and qty  <= 50

Örnek #3, NOT BETWEEN kullanarak WHERE ölçütü ile kayıt seçiminin nasıl sınırlandırılacağını göstermektedir.

SELECT StorID, qty, TitleID
FROM Sales
WHERE qty NOT BETWEEN 20 and 50

İlerideki iki örnek, kayıt seçimini IN kullanarak WHERE kriteriyle sınırlamanın iki farklı yolunu gösterir ve her biri aynı sonuçları verir.

Örnek #4, WHERE ifadesinin bir parçası olarak province= kullanarak kayıtların nasıl seçileceğini gösterir.

SELECT *
FROM Publishers
WHERE province = ‘BC’ OR province = ‘AB’ OR province = ‘ON’

Örnek #5 WHERE ifadesinin bir parçası olarak province IN kullanarak kayıtları seçer.

SELECT *
FROM Publishers
WHERE province IN (‘BC’, ‘AB’, ‘ON’)

Son iki örnek, kayıtları seçmek için NULL ve NOT NULL öğelerinin nasıl kullanılabileceğini göstermektedir. Bu örnekler için, Title, Quantity ve Price (kitabın fiyatı) adlı alanları içeren bir Books tablosu (gösterilmemiştir) kullanılacaktır. Her yayıncının tüm kitaplarını listeleyen bir Books tablosu vardır.

Örnek #6 NULL kullanır.

SELECT price, title
FROM Books
WHERE price IS NULL

Örnek #7 NOT NULL kullanır.

SELECT price, title
FROM Books
WHERE price IS NOT NULL

LIKE cümlesinde joker karakterleri kullanma

LIKE anahtar sözcüğü, karakter dizelerinin belirtilen bölümleriyle eşleşen alanları içeren satırları seçer. LIKE char, varchar, text, datetime ve smalldatetime verileri ile kullanılır. Joker karakter, kullanıcının belirli harfleri içeren alanlarla eşleşmesini sağlar. Örneğin, province = 'N%' joker karakteri 'N' harfi ile başlayan tüm illeri verecektir. Aşağıdaki tablo, SELECT ifadesinde joker karakterleri düzenli ifade biçiminde belirtmenin dört yolunu gösterir.

%Sıfır veya daha fazla karakterden oluşan herhangi bir dize
_Herhangi bir tek karakter
[ ]Belirtilen aralıktaki (örn. [a-f]) veya kümedeki (örn. [abcdef]) herhangi bir tek karakter
[^]Belirtilen aralıkta (örn. [^a – f]) veya kümede (örn. [^abcdef]) olmayan herhangi bir tek karakter
Tablo; SELECT ifadesinde joker karakterler nasıl belirtilir.

1 numaralı örnekte, LIKE 'Mc%', "Mc" harfleriyle başlayan tüm soyadlarını arar (örneğin, McBadden).

SELECT LastName
FROM Employees
WHERE LastName LIKE ‘Mc%’

Örnek #2: LIKE '%inger', "inger" harfleriyle biten tüm soyadlarını arar (örneğin, Ringer, Stringer).

SELECT LastName
FROM Employees
WHERE LastName LIKE ‘%inger’

Örnek #3: LIKE '%en%', "en" harflerini içeren tüm soyadlarını arar (örneğin, Bennett, Green, McBadden).

SELECT LastName
FROM Employees
WHERE LastName LIKE ‘%en%’

ORDER BY yan tümcesi ile SELECT ifadesi

Ortaya çıkan listedeki kayıtları sıralamak için ORDER BY cümlesi kullanılır. Sonuçları artan sırada sıralamak için ASC'yi, azalan sırada sıralamak için DESC'yi kullanın.

Örneğin, ASC ile:

SELECT *
FROM Employees
ORDER BY HireDate ASC

Ve DESC ile:

SELECT *
FROM Books
ORDER BY type, price DESC

GROUP BY yan tümcesi ile SELECT ifadesi

GROUP BY cümlesi, her grup için bir çıktı satırı oluşturmak için kullanılır ve aşağıda gösterildiği gibi seçilen sütunlar için özet değerler üretir.

SELECT type
FROM Books
GROUP BY type

İşte yukarıdaki ifadeyi kullanan bir örnek.

SELECT type AS ‘Type’, MIN(price) AS ‘Minimum Price’
FROM Books
WHERE royalty > 10
GROUP BY type

SELECT ifadesi, fiyatın null olmadığı bir WHERE ölçütü içeriyorsa,

SELECT type, price
FROM Books
WHERE price is not null

sonra GROUP BY cümlesini içeren bir ifade şu şekilde görünür:

SELECT type AS ‘Type’, MIN(price) AS ‘Minimum Price’
FROM Books
WHERE price is not null
GROUP BY type

GROUP BY ile COUNT Kullanımı

Bir kapta kaç öğe olduğunu saymak için COUNT'u kullanabiliriz. Ancak, farklı renklerdeki misketler gibi farklı öğeleri ayrı gruplar halinde saymak istiyorsak, GROUP BY komutuyla birlikte COUNT işlevini kullanırız.

Aşağıdaki SELECT ifadesi, GROUP BY cümlesiyle birlikte COUNT fonksiyonunu kullanarak veri gruplarının nasıl sayılacağını göstermektedir.

SELECT COUNT(*)
FROM Books
GROUP BY type

GROUP BY ile AVG ve SUM Kullanma

Herhangi bir grubun ortalamasını vermek için AVG işlevini ve toplamı vermek için SUM işlevini kullanabiliriz.

Örnek #1, GROUP BY türü ile AVG FONKSİYON'unu kullanır.

SELECT AVG(qty)
FROM Books
GROUP BY type

Örnek #2, GROUP BY türüyle birlikte SUM işlevini kullanır.

SELECT SUM(qty)
FROM Books
GROUP BY type

Örnek #3, SELECT deyiminde GROUP BY türüyle birlikte hem AVG hem de SUM işlevlerini kullanır.

SELECT ‘Total Sales’ = SUM(qty), ‘Average Sales’ = AVG(qty), stor_id
FROM Sales
GROUP BY StorID ORDER BY  ‘Total Sales’

HAVING ile satırları kısıtlama

HAVING cümlesi satırları kısıtlamak için kullanılabilir. HAVING'in toplama işlevini içerebilmesi dışında WHERE koşuluna benzer; WHERE bunu yapamaz.

HAVING cümlesi WHERE cümlesi gibi davranır, ancak gruplar için geçerlidir. Bu örnekte, 'BC' iline sahip grupları hariç tutmak için HAVING cümlesini kullanıyoruz.

SELECT au_fname AS ‘Author”s First Name’, province as ‘Province’
FROM Authors
GROUP BY au_fname, province
HAVING province <> ‘BC’

INSERT deyimi

INSERT deyimi bir tabloya satır ekler. Ek olarak,

  • INSERT, verilerin ekleneceği tablo veya görünümü belirtir.
  • Column_list, INSERT işleminden etkilenecek sütunları listeler.
  • Bir sütun atlanırsa, her bir değer sağlanmalıdır.
  • Sütunları dahil ediyorsanız, bunlar herhangi bir sırada listelenebilir.
  • VALUES, tabloya eklemek istediğiniz verileri belirtir. VALUES zorunludur.
  • IDENTITY özelliğine sahip sütunlar, column_list veya values_clause içinde açıkça listelenmemelidir.

INSERT ifadesi için sözdizimi şöyledir:

INSERT [INTO] Table_name | view name [column_list]
DEFAULT VALUES | values_list | select statement

INSERT ifadesiyle satır eklerken bu kurallar geçerlidir:

  • Bir varchar veya text sütununa boş bir dize (' ') eklendiğinde tek bir boşluk eklenir.
  • Tüm char sütunları tanımlanan uzunlukta sağa doldurulur.
  • Yalnızca boşluk içeren dizeler dışında, varchar sütunlarına eklenen verilerden sondaki tüm boşluklar kaldırılır. Bu dizeler tek bir boşluğa kırpılır.
  • Bir INSERT ifadesi bir kısıtlamayı, varsayılanı veya kuralı ihlal ederse ya da yanlış veri türündeyse, ifade başarısız olur ve SQL Server bir hata mesajı görüntüler.

column_list'teki sütunlardan yalnızca bazıları için değer belirttiğinizde, değeri olmayan sütunlara aşağıdaki üç şeyden biri olabilir:

  1. Sütun bir DEFAULT kısıtlamasına sahipse, sütuna bir varsayılan bağlıysa veya temel kullanıcı tanımlı veri türüne bir varsayılan bağlıysa varsayılan bir değer girilir.
  2. Sütun NULL'lara izin veriyorsa ve sütun için varsayılan değer yoksa NULL girilir.
  3. Sütun NOT NULL olarak tanımlanmışsa ve varsayılan yoksa bir hata mesajı görüntülenir ve satır reddedilir.

Bu örnek, yayıncının Authors tablosuna bir kayıt eklemek için INSERT kullanır.

INSERT INTO Authors
VALUES(‘555-093-467’, ‘Martin’, ‘April’, ‘281 555-5673’, ‘816 Market St.,’ , ‘Vancouver’, ‘BC’, ‘V7G3P4’, 0)

Aşağıdaki örnekte, Publishers tablosuna bir sütun listesiyle kısmi bir satırın nasıl ekleneceği gösterilmektedir. Ülke sütununun varsayılan değeri Canada'dır, bu nedenle değerlerinize dahil etmenizi gerektirmez.

INSERT INTO Publishers (PubID, PubName, city, province)
VALUES (‘9900’, ‘Acme Publishing’, ‘Vancouver’, ‘BC’)

IDENTITY sütununa sahip bir tabloya satır eklemek için aşağıdaki örneği izleyin. IDENTITY için değer veya sütun listesindeki sütunun adını sağlamayın.

INSERT INTO jobs
VALUES (‘DBA’, 100, 175)

Bir IDENTITY sütununa belirli değerler ekleme

Varsayılan olarak, bir IDENTITY sütununa doğrudan veri eklenemez; ancak, bir satır yanlışlıkla silinirse veya IDENTITY sütun değerlerinde boşluklar varsa, bir satır ekleyebilir ve IDENTITY sütun değerini belirtebilirsiniz.

IDENTITY_INSERT option

Belirli bir kimlik değeri ile eklemeye izin vermek için IDENTITY_INSERT seçeneği aşağıdaki gibi kullanılabilir.

SET IDENTITY_INSERT jobs ON
INSERT INTO jobs  (job_id, job_desc, min_lvl, max_lvl)
VALUES (19, ’DBA2’, 100, 175)
SET IDENTITY_INSERT jobs OFF

SELECT ifadesi ile satır ekleme

Bazen büyük bir tablodan küçük bir geçici tablo oluşturabiliriz. Bunun için bir SELECT ifadesi ile satır ekleyebiliriz. Bu komut kullanılırken, benzersizlik için herhangi bir doğrulama yapılmaz. Sonuç olarak, aşağıdaki örnekte aynı pub_id'ye sahip birçok satır olabilir.

Bu örnek, CREATE TABLE ifadesini kullanarak daha küçük bir geçici Publishers tablosu oluşturur. Ardından, publis tablosundan bu geçici Publishers tablosuna kayıt eklemek için SELECT ile INSERT ifadesi kullanılır.

CREATE TABLE dbo.tmpPublishers (
PubID char (4) NOT NULL ,
PubName varchar (40) NULL ,
city varchar (20) NULL ,
province char (2) NULL ,
country varchar (30) NULL  DEFAULT (‘Canada’)
)
INSERT  tmpPublishers
SELECT * FROM Publishers

Bu örnekte, verilerin bir alt kümesini kopyalıyoruz.

INSERT tmpPublishers (pub_id, pub_name)
SELECT PubID, PubName
FROM Publishers

Bu örnekte, yayıncıların verileri tmpPublishers tablosuna kopyalanır ve ülke sütunu Canada olarak ayarlanır.

INSERT tmpPublishers (PubID, PubName, city, province, country)
SELECT PubID, PubName, city, province, ‘Canada’
FROM Publishers

UPDATE ifadesi

UPDATE ifadesi, yeni veri ekleyerek veya mevcut verileri değiştirerek mevcut satırlardaki verileri değiştirir.

Bu örnek, Publishers tablosundaki tüm kayıtlar için ülke alanını Canada olarak standartlaştırmak üzere UPDATE deyimini kullanır.

UPDATE Publishers
SET country = ‘Canada’

Bu örnek, 10 ile 20 arasındaki royalty tutarları için royalty tutarını %10 artırır.

UPDATE roysched
SET royalty = royalty + (royalty * .10)
WHERE royalty BETWEEN 10 and 20

UPDATE ifadesine alt sorguları dahil etme

Çalışanlar tablosundan 2010 yılında yayıncı tarafından işe alınan çalışanlara, iş türlerine göre en yüksek iş seviyesine terfi verilir. UPDATE ifadesi bu şekilde görünecektir.

UPDATE Employees
SET job_lvl =
(SELECT max_lvl FROM jobs
WHERE employee.job_id = jobs.job_id)
WHERE DATEPART(year, employee.hire_date) = 2010

DELETE ifadesi

DELETE ifadesi bir kayıt kümesinden satırları kaldırır. DELETE, silinecek satırları tutan tablo veya görünümü adlandırır ve bir seferde yalnızca bir tablo veya satır listelenebilir. WHERE, silme işlemini seçilen kayıtlarla sınırlayan standart bir WHERE cümlesidir.

DELETE söz dizimi şu şekildedir.

DELETE [FROM] {table_name | view_name }
[WHERE clause]

DELETE ifadesi için kurallar şunlardır:

  1. WHERE cümlesini atlarsanız, tablodaki tüm satırlar kaldırılır (dizinler, tablo, kısıtlamalar hariç).
  2. DELETE, birden fazla tabloyu adlandıran bir FROM cümlesine sahip bir görünümle kullanılamaz. (Delete aynı anda yalnızca bir temel tabloyu etkileyebilir).

Aşağıda kullanılabilecek üç farklı DELETE ifadesi yer almaktadır.

  1. Bir tablodaki tüm satırları silme.

DELETE
FROM Discounts

2. Seçilen satırları silme:

DELETE
FROM Sales
WHERE stor_id = ‘6380’

3. Alt sorgudaki bir değere göre satırları silme:

DELETE FROM Sales
WHERE title_id IN
(SELECT title_id FROM Books WHERE type = ‘mod_cook’)

Yerleşik İşlevler

SQL Server'da aşağıdakiler gibi birçok yerleşik işlev vardır:

  1. Aggregate: özet değerleri döndürür
  2. Conversion: bir veri türünü diğerine dönüştürür
  3. Date: tarihler ve saatler hakkında bilgi görüntüler
  4. Mathematical: sayısal veriler üzerinde işlemler gerçekleştirir
  5. String: karakter dizeleri, ikili veriler veya ifadeler üzerinde işlemler gerçekleştirir
  6. System: veritabanından özel bir bilgi parçası döndürür
  7. Text and image: metin ve görüntü verileri üzerinde işlemler gerçekleştirir

Aşağıda ilk dört işlev için ayrıntılı açıklamalar ve örnekler bulacaksınız.

Aggregate fonksiyonları

Aggregate fonksiyonları bir dizi değer üzerinde hesaplama yapar ve tek veya özet bir değer döndürür. Aşağıdaki tablo bu fonksiyonları listeler.

FonksiyonAçıklama
AVGİfadedeki tüm değerlerin veya yalnızca DISTINCT değerlerinin ortalamasını döndürür.
COUNTİfadedeki boş olmayan değerlerin sayısını döndürür. DISTINCT belirtildiğinde, COUNT boş olmayan benzersiz değerlerin sayısını bulur.
COUNT(*)Satır sayısını döndürür. COUNT(*) parametre almaz ve DISTINCT ile birlikte kullanılamaz.
MAXİfadedeki maksimum değeri döndürür. MAX sayısal, karakter ve datetime sütunlarıyla kullanılabilir, ancak bit sütunlarıyla kullanılamaz. Karakter sütunlarında MAX, harmanlama dizisindeki en yüksek değeri bulur. MAX, boş değerleri yoksayar.
MINİfadedeki minimum değeri döndürür. MIN; sayısal, karakter ve datetime sütunlarıyla kullanılabilir, ancak bit sütunlarıyla kullanılamaz. Karakter sütunlarında MIN, sıralama dizisinde en düşük olan değeri bulur. MIN, boş değerleri yoksayar.
SUMİfadedeki tüm değerlerin veya yalnızca DISTINCT değerlerinin toplamını döndürür. SUM yalnızca sayısal sütunlarla kullanılabilir.
Tablo; Toplam işlevlerin ve açıklamaların listesi.

Aşağıda yukarıdaki tabloda listelenen toplam fonksiyonların her birine örnekler verilmiştir.

Örnek #1: AVG

SELECT AVG (price) AS ‘Average Title Price’
FROM Books

Örnek #2: COUNT

SELECT COUNT(PubID) AS ‘Number of Publishers’
FROM Publishers

Örnek #3: COUNT

SELECT COUNT(province) AS ‘Number of Publishers’
FROM Publishers

Örnek #3: COUNT (*)

SELECT COUNT(*)
FROM Employees
WHERE job_lvl = 35

Örnek #4: MAX

SELECT MAX (HireDate)
FROM Employees

Örnek #5: MIN

SELECT MIN (price)
FROM Books

Örnek #6: SUM

SELECT SUM(discount) AS ‘Total Discounts’
FROM Discounts

Conversion fonksiyonu

Dönüştürme işlevi bir veri türünü diğerine dönüştürür.

Aşağıdaki örnekte, iki adet 9 içeren bir fiyat beş karaktere dönüştürülmüştür. Bu ifade için söz dizimi SELECT 'The date is ' + CONVERT(varchar(12), getdate()) şeklindedir.

SELECT CONVERT(int, 10.6496)
SELECT title_id, price
FROM Books
WHERE CONVERT(char(5), price) LIKE ‘%99%’

Bu ikinci örnekte, dönüştürme işlevi verileri farklı bir boyuta sahip bir veri türüne değiştirir.

SELECT title_id, CONVERT(char(4), ytd_sales) as ‘Sales’
FROM Books
WHERE type LIKE ‘%cook’

Date işlevi

Date fonksiyonu, belirtilen bir tarihe bir aralık ekleyerek bir tarih üretir. Sonuç, date artı date parçalarının sayısına eşit bir datetime değeridir. Date parametresi bir smalldatetime değeriyse, sonuç da bir smalldatetime değeridir.

DATEADD işlevi, tarih değerlerini eklemek ve artırmak için kullanılır. Bu fonksiyonun sözdizimi DATEADD(datepart, number, date) şeklindedir.

SELECT DATEADD(day, 3, hire_date)
FROM Employees

Bu örnekte, DATEDIFF(datepart, date1, date2) işlevi kullanılmıştır.

Bu komut, belirtilen iki tarih arasında geçilen tarih bölümü "sınırlarının" sayısını döndürür. Kesişen sınırları sayma yöntemi, DATEDIFF tarafından verilen sonucu dakika, saniye ve milisaniye gibi tüm veri türlerinde tutarlı hale getirir.

SELECT DATEDIFF(day, HireDate, ‘Nov 30 1995’)
FROM Employees

Herhangi bir tarih için, o tarihin herhangi bir bölümünü yıldan milisaniyeye kadar inceleyebiliriz.

SQL Server tarafından tanınan tarih parçaları (DATEPART) ve kısaltmalar ile kabul edilebilir değerler aşağıdaki tabloda listelenmiştir.

TARİH KISMIKISALTMADEĞERLER
Yearyy1753-9999
Quarterqq1-4
Monthmm1-12
Day of yeardy1-366
Daydd1-31
Weekwk1-53
Weekdaydw1-7 (Sun.-Sat.)
Hourhh0-23
Minutemi0-59
Secondss0-59
Millisecondms0-999
Tablo; Tarih kısmı kısaltmaları ve değerleri.

Matematiksel fonksiyonlar

Matematiksel fonksiyonlar sayısal veriler üzerinde işlem yapar. Aşağıdaki örnek, yayıncı tarafından satılan her bir kitabın mevcut fiyatını ve tüm fiyatların %10 artması durumunda ne olacağını listelemektedir.

SELECT Price, (price * 1.1) AS ‘New Price’, title
FROM Books
SELECT ‘Square Root’ = SQRT(81)
SELECT ‘Rounded‘ = ROUND(4567.9876,2)
SELECT FLOOR (123.45)

Tabloları Birleştirme

İki veya daha fazla tablonun birleştirilmesi, belirtilen sütunlardaki verilerin karşılaştırılması ve uygun satırlardan yeni bir tablo oluşturmak için karşılaştırma sonuçlarının kullanılması işlemidir. Birleştirme ifadesi:

  • Her tablodan bir sütun belirtir
  • Bu sütunlardaki değerleri satır satır karşılaştırır
  • Nitelikli değerlere sahip satırları yeni bir satırda birleştirir

Karşılaştırma genellikle eşitlik için olsa da -tam olarak eşleşen değerler- diğer birleştirme türleri de belirtilebilir. İç, sol (dış), sağ (dış) ve çapraz birleştirme gibi tüm farklı birleştirmeler aşağıda açıklanacaktır.

İç birleştirme

İç birleştirme, aynı veri türüne sahip bir sütundaki iki tabloyu birbirine bağlar. Yalnızca sütun değerlerinin eşleştiği satırlar döndürülür; eşleşmeyen satırlar atılır.

Örnek #1

SELECT jobs.job_id, job_desc
FROM jobs
INNER JOIN Employees ON employee.job_id = jobs.job_id
WHERE jobs.job_id < 7

Örnek #2

SELECT authors.au_fname, authors.au_lname, books.royalty, title
FROM authorsINNER JOIN titleauthor ON authors.au_id=titleauthor.au_id
INNER JOIN books ON titleauthor.title_id=books.title_id
GROUP BY authors.au_lname, authors.au_fname, title, title.royalty
ORDER BY authors.au_lname

Sol dış birleştirme

Sol dış birleştirme, tüm sol dış satırların döndürüleceğini belirtir. Sol tablodaki belirtilen koşulu karşılamayan tüm satırlar sonuç kümesine dahil edilir ve diğer tablodaki çıktı sütunları NULL olarak ayarlanır.

Bu ilk örnek, sol dış birleştirme için yeni sözdizimini kullanır.

SELECT publishers.pub_name, books.title
FROM Publishers
LEFT OUTER JOIN Books On publishers.pub_id = books.pub_id

Bu, eski sözdizimini kullanan bir sol dış birleştirme örneğidir.

SELECT publishers.pub_name, books.title
FROM Publishers, Books
WHERE publishers.pub_id *= books.pub_id

Sağ dış birleştirme

Bir sağ dış birleştirme, sonuç kümesine sağ tablodaki belirtilen koşulu karşılamayan tüm satırları dahil eder. Diğer tabloya karşılık gelen çıktı sütunları NULL olarak ayarlanır.

Aşağıda, sağ dış birleştirme için yeni sözdizimini kullanan bir örnek yer almaktadır.

SELECT titleauthor.title_id, authors.au_lname, authors.au_fname
FROM titleauthor
RIGHT OUTER JOIN authors ON titleauthor.au_id = authors.au_id
ORDERY BY au_lname

Bu ikinci örnek, sağ dış birleştirme için kullanılan eski sözdizimini göstermektedir.

SELECT titleauthor.title_id, authors.au_lname, authors.au_fname
FROM titleauthor, authors
WHERE titleauthor.au_id =* authors.au_id
ORDERY BY au_lname

Tam dış birleştirme

Tam dış birleştirme, her iki tablodaki bir satırın seçim kriterleriyle eşleşmemesi durumunda, satırın sonuç kümesine dahil edileceğini ve diğer tabloya karşılık gelen çıktı sütunlarının NULL olarak ayarlanacağını belirtir.

İşte bir tam dış birleştirme örneği.

SELECT books.title, publishers.pub_name, publishers.province
FROM Publishers
FULL OUTER JOIN Books ON books.pub_id = publishers.pub_id
WHERE (publishers.province <> “BC” and publishers.province <> “ON”)
ORDER BY books.title_id

Çapraz birleştirme

Çapraz birleştirme, iki tabloyu birleştiren bir çarpımdır. Bu birleştirme, WHERE cümlesi belirtilmemiş gibi aynı satırları döndürür. Örneğin:

SELECT au_lname, pub_name,
FROM Authors CROSS JOIN Publishers

Alıştırmalar
1 ila 17. sorular için Microsoft tarafından oluşturulan PUBS örnek veritabanını kullanın. Bu veritabanını oluşturacak betiği indirmek için lütfen aşağıdaki siteye gidin: http://www.microsoft.com/en-ca/download/details.aspx?id=23654.

1. 2011’de yayınlanan yayın tarihlerinin ve başlıkların (kitapların) bir listesini görüntüleyin.

2. Geleneksel veya modern yemek pişirme olarak kategorize edilmiş başlıkların bir listesini görüntüleyin. Kitaplar tablosunu kullanın.

3. İlk adları beş harf uzunluğunda olan tüm yazarları görüntüleyin.

4. Kitaplar tablosundan şunları görüntüle: her yayıncı tarafından yayınlanan kitaplar hakkında tür, fiyat, yayıncı kimliği ve başlık bilgilerini. ‘Tür’ sütununu ‘Kitap Kategorisi’ olarak yeniden adlandırın. Önce türe (azalan) ve ardından fiyata (artan) göre sıralayın.

5. Books tablosunu kullanarak title_id, pubdate ve pubdate artı üç günü görüntüleyin.

6. datediff ve getdate fonksiyonlarını kullanarak Books tablosundaki kitapların yayınlanmasından bu yana ay cinsinden ne kadar zaman geçtiğini belirleyin.

7. 30’dan fazla kopya satan tüm kitapların başlık ID’lerini ve miktarlarını listeleyin.

8. Ontario’da (ON) yaşayan yazarların tüm soyadlarının ve yaşadıkları şehirlerin bir listesini görüntüleyin.

9. Payterms alanında bir 60 içeren tüm satırları görüntüleyin. Sales tablosunu kullanın.

10. İlk adları beş harf uzunluğunda olan , O veya A ile biten ve M veya P ile başlayan tüm yazarları görüntüleyin.

11. Fiyatı 30 dolardan fazla olan ve T ile başlayan ya da yayıncı kimliği 0877 olan tüm başlıkları görüntüleyin.

12. Employees tablosundan, iş seviyesi 200’den büyük olan çalışanlar için ad (fname), soyad (lname), çalışan kimliği (emp_id) ve iş seviyesi (job_lvl) sütunlarını görüntüleyin ve sütun başlıklarını şu şekilde yeniden adlandırın: “First Name,” “Last Name,” “IDENTIFICATION#” and “Job Level.”

13. Telif ücretini, telif ücreti artı %50’yi “telif ücreti artı 50” ve title_id olarak görüntüleyin. Roysched tablosunu kullanın.

14. STUFF işlevini kullanarak “1234567” dizesinden bir “12xxxx567” dizesi oluşturun.

15. Her başlığın ilk 40 karakterini ve o başlığın bugüne kadarki ortalama aylık satışını (ytd_sales/12) görüntüleyin. Title tablosunu kullanın.

16. Kaç kitap için fiyat belirlendiğini gösterin.

17. Her türdeki tüm kitapların ortalama maliyetini içeren bir yemek kitapları listesi görüntüleyin. GROUP BY öğesini kullanın.

İleri Düzey Sorular (Union, Intersect ve Minus)
1. İlişkisel küme operatörleri UNION, INTERSECT ve MINUS yalnızca ilişkiler union-compatible ise düzgün çalışır. Birlik uyumlu ne anlama gelir ve bu koşulu nasıl kontrol edersiniz?

2. UNION ve UNION ALL arasındaki fark nedir? Her biri için sözdizimini yazınız.

3. Employees ve Employees_1 olmak üzere iki tablonuz olduğunu varsayalım. Employees tablosu üç çalışanın kayıtlarını içeriyor: Alice Cordoza, John Cretchakov ve Anne McDonald. Employees_1 tablosu çalışanların kayıtlarını içerir: John Cretchakov ve Mary Chen. Bu bilgiler göz önüne alındığında, UNION sorgusu için sorgu çıktısı nedir? Sorgu çıktısını listeleyin.

4. Soru 3’teki çalışan bilgileri göz önüne alındığında, UNION ALL sorgusu için sorgu çıktısı nedir? Sorgu çıktısını listeleyin.

5. Soru 3’teki çalışan bilgileri göz önüne alındığında, INTERSECT sorgusu için sorgu çıktısı nedir? Sorgu çıktısını listeleyin.

6. Soru 3’teki çalışan bilgileri göz önüne alındığında, EXCEPT sorgusu için sorgu çıktısı nedir? Sorgu çıktısını listeleyin.

7. Çapraz birleştirme nedir? Sözdizimine bir örnek verin.

8. Bu üç birleştirme türünü açıklayın:
—1. sol dış birleştirme
—2. sağ dış birleştirme
—3. tam dış join

9. Alt sorgu nedir ve temel özellikleri nelerdir?

10. İlişkili alt sorgu nedir? Bir örnek veriniz.

11. Bir Product tablosunun PROD_CODE ve VEND_CODE olmak üzere iki öznitelik içerdiğini varsayalım. PROD_CODE için değerler şunlardır: ABC, DEF, GHI ve JKL. Bunlar VEND_CODE için aşağıdaki değerlerle eşleşir: Sırasıyla 125, 124, 124 ve 123 (örneğin, PROD_CODE değeri ABC, VEND_CODE değeri 125’e karşılık gelir). Satıcı tablosu 123, 124, 125 ve 126 değerlerine sahip tek bir VEND_CODE özniteliği içerir. (Product tablosundaki VEND_CODE özniteliği, Vendor tablosundaki VEND_CODE için bir yabancı anahtardır).

12. Soru 11’deki bilgiler göz önüne alındığında, aşağıdakiler için sorgu çıktısı ne olurdu? Değerleri göster.
—1. Bu iki tabloya dayalı bir UNION sorgusu
—2. Bu iki tabloya dayalı bir UNION ALL sorgusu
—3. Bu iki tabloya dayalı bir INTERSECT sorgusu
—4. Bu iki tabloya dayalı bir MINUS sorgusu

İleri Düzey Sorular (Birleştirmeleri Kullanma)
1. Satışı olmayan başlıklar da dahil olmak üzere Kitaplar ve Satışlar tablolarındaki tüm başlıkların ve satış sayılarının bir listesini görüntüleyin. Birleştirme kullanın.

2. Yazarların soyadlarının ve her yazarın yayınladığı tüm ilişkili başlıkların yazarın soyadına göre sıralanmış bir listesini görüntüleyin. Birleştirme kullanın. Şu adda bir görünüm olarak kaydedin: Yayınlanmış Yazarlar.

3. Bir alt sorgu kullanarak, %100 telif ücreti alan ve Alberta’da yaşayan tüm yazarları (soyadını ve adını, posta kodunu gösterin) görüntüleyin. Bunu AuthorsView başlıklı bir görünüm olarak kaydedin. Görünümü oluştururken, yazarın soyadını ve adını ‘Soyadı’ ve ‘Adı’ olarak yeniden adlandırın.

4. Is Anger the Enemy başlığını satmayan mağazaları gösterin.

5. 2013’ten sonraki satışlar için mağaza adlarının bir listesini görüntüleyin (Sipariş Tarihi 2013’ten büyüktür). Mağaza adını ve sipariş tarihini görüntüleyin.

6. “News & Brews” mağaza adında satılan kitapların başlık listesini görüntüleyin. Mağaza adını, başlıkları ve sipariş tarihlerini görüntüleyin.

7. Toplam satışları (qty) başlığa göre listeleyin. Toplam miktar ve başlık sütunlarını görüntüleyin.

8. Türe göre toplam satışları (qty) listeleyin. Toplam miktar ve tür sütunlarını görüntüleyin.

9. Türe göre toplam satışları (qty*price) listeleyin. Toplam dolar değeri ve tür sütunlarını görüntüleyin.

10. Yayıncıya göre toplam kitap türü sayısını hesaplayın. Her yayıncı için yayıncı adını ve toplam kitap türü sayısını gösterin.

11. Herhangi bir kitap türüne sahip olmayan yayıncı adlarını gösterin. Yalnızca yayıncı adını göster.
Önceki Ders: SQL Yapılandırılmış Sorgu Dili
Sonraki Ders: Ek; Üniversite Kayıt Veri Modeli Örneği

Yorumlar

Bu blogdaki popüler yayınlar

Gelişim ve Kalıtım Eleştirel Düşünme Soruları

Periodonsiyum Klinik Uygulamalar

Dentin Oluşumu