SQL’e Giriş yaptıktan sonra, bu yazımda aşağıdaki SQL komutlarını açıklamayarak SQL kaynağı oluşturmaya devam edeceğim ;
- AS ile isimlendirme
- DISTINCT ile veri tekrarını önleme
- ORDER BY ile sıralama
- AND ve OR operatörleri
- TOP ile istenilen sayıda kayda ulaşma
- NULL tipi değerlerin kontrolü
- UNION ve UNION ALL ile sorgu birleştirme
- SELECT INTO ile sonuçları farklı bir tabloda gösterme
Öncelikle üzerinde çalışma yapabileceğimiz bir tablo oluşturalım ;
| Film_No | Ad | Tarih | IMDB_Puan |
| 1 | The Shawshank Redemption | 1994 | 9,2 |
| 2 | The Dark Knight | 2008 | 8,8 |
| 3 | Fight Club | 1999 | 8,8 |
| 4 | Forrest Gump | 1994 | 8,6 |
| 5 | Leon | 1994 | 8,6 |
| 6 | V For Vandetta | 2006 | 8,1 |
| 7 | A Beautiful Mind | 2006 | 8,0 |
| 8 | Eternal Sunshine of the Spotless Mind | 2004 | 8,4 |
| 9 | Inception | 2010 | 8,8 |
| 10 | Good Will Hunting | 1997 | 8,1 |
AS (ALIAS) ile İsimlendirme
AS komutu ile bir tabloya ya da bir sütuna isim verebilirsiniz. Yazdığınız sorgunun sonuçları önünüze getirilirken, tablo isimlerini ve sütun isimlerini kendiniz belirleyebilirsiniz.
Filmler tablosundan tüm kayıtları bir sorgu ile çekelim ve oluşacak tablonun ismini Filmler_Deneme yapalım ;
SELECT * FROM FILMLER AS Filmler_Deneme
Bir yönetmenler tablosu olduğunu düşünün ve bu tablo Yonetmen_ID, Ad, Soyad gibi 3 farklı sütuna sahip olsun. Bir sorgu sonucu Ad ve Soyad değerlerini aynı sütun içerisinde elde edebilirsiniz. Fakat VTYS bu sütunun ismini kendisi verecektir. Siz bu sütunun ismini şu şekilde kendiniz belirleyebilirsiniz ;
SELECT Ad & Soyad AS Tam isim FROM FILMLER
Sorgunuzda kaynak belirttiğiniz tabloların isimlerini de AS ile yeniden belirleyebilirsiniz. Bunun sebebi genellikle tablo ismini kısaltmaktır.
FROM Filmler AS F
ya da daha kısaca ;
FROM Filmler F
Bu şekilde tablonun ismini F yaptıktan sonra, Filmler tablosundaki kayıtlara F.Film_ID, F.Ad, F.IMDB_Puan olarak ulaşabilirsiniz.
Aslında tüm bunların amacı 2 ya da daha fazla sayıda farklı tablodan aynı sütun ismine sahip değerleri çekerken çıkabilecek zorlukları önlemektir. Şöyle bir sorguda ;
SELECT Ad FROM Filmler, Yonetmenler
Ad değeri her iki tabloda da olduğu için VTYS hangi tablodan çekeceğini bilemez ve hata verir. Bunu engellemek için tablolara isim verip, o isimle beraber sütun adını yazacağız ;
SELECT F.Ad, Y.Ad FROM Filmler F, Yonetmenler Y
DISTINCT ile Veri Tekrarını Önleme
DISTINCT, bir sütundan değerleri çekerken tekrar eden verileri atar. Eğer böyle birşey yapmanız gerektiyse aşağıdaki gibi kullanabilirsinz ;
SELECT DISTINCT Soyad FROM Yonetmenler
ORDER BY ile Sıralama
ORDER BY ile seçtiğiniz sütundaki kayıtları sıralayabilirsiniz. Default olarak küçükten büyüğe sıralanır.
DESC : Büyükten küçüğe sıralar. ASC : Küçükten büyüğe sıralar.
SELECT * FROM Filmler ORDER BY IMDB_Puan
Bu sorgu, sonuçları IMDB puanı küçük olandan büyük olana doğru sıralayacaktır.
En son çıkan filmleri tarihine göre sıralayalım ;
SELECT * FROM Filmler ORDER BY Tarih DESC
AND ve OR Operatörleri
AND ve OR mantıksal operatörlerini bir sorgu için birden fazla kriter belirtirken kullanabilirsiniz.
2000′den sonra çıkmış, adı “The” ile başlayan filmlere ulaşalım ;
SELECT * FROM Filmler WHERE Tarih >= 2000 AND Ad LIKE "The*"
IMDB Puanı 8.5 den büyük olan veya 2000 yılından önce çıkmış filmlere ulaşalım ;
SELECT * FROM Filmler WHERE IMDB_Puan >= 8.5 OR Tarih < 2000
AND ve OR operatörlerini birbirlerinin içinde kombine bir şekilde de kullanabilirsiniz.
Adı “The” ile başlayan, tarihi 2000′den küçük ya da IMDB Puanı 8.5 den büyük filmlere ulaşalım ;
SELECT * FROM Filmler WHERE Ad LIKE "The*" AND ( Tarih < 2000 OR IMDB_Puan < 8.5 )
TOP ile İstenilen Sayıda Kayda Ulaşma
TOP Fonksiyonu, oluşturduğunuz sorgu sonucunda, istediğiniz sayıda kayda ulaşmanızı sağlar. Bir başka deyişle, sorgunuzu kısıtlayabilirsiniz.
Bütün VTYS’ler TOP mantığını desteklemektedir fakat syntax’ları farklı olabilmektedir.
IMDB Puanı en yüksek olan 5 filmi adlarıyla beraber çekelim ;
SELECT TOP 5 Ad, IMDB_Puan FROM Filmler ORDER BY IMDB_Puan DESC
Yukarıdaki syntax, MS Access ve SQL Server için geçerlidir.
ORACLE için aşağıdaki gibi bir kod yazmanız gerekir ;
SELECT Ad, IMDB_Puan FROM Filmler WHERE ROWNUM < = 5 ORDER BY IMDB_Puan DESC
MySQL için ise aşağıdaki gibi bir kod yazmanız gerekir ;
SELECT Ad, IMDB_Puan FROM Filmler LIMIT 5 ORDER BY IMDB_Puan DESC
NULL Tipi Değerlerin Kontrolü
NULL fonksiyonu ile değer girilmeyen sütunları test edebilir, o kayıtlara ulaşabilirsiniz.
IS NULL ya da IS NOT NULL olarak iki farklı şekilde kullanabilirsiniz.
SELECT Tarih FROM Filmler WHERE Tarih IS NULLSELECT Tarih FROM Filmler WHERE Tarih IS NOT NULL
UNION ve UNION ALL ile Sorgu Birleştirme
2 ya da daha fazla sorguyu birleştirmek için UNION komutu kullanılır. Her sorgu cümlesinde seçilen sütun sayısı aynı olmak zorundadır.
SELECT Ad, Soyad FROM Yonetmenler UNION SELECT Ad, Soyad FROM Oyuncular
UNION, DISTINCT gibi çalışarak tekrar eden verileri silecektir. Tekrar eden verilerin silinmesini istemiyorsanız UNION ALL kullanabilirsiniz.
SELECT Ad, Soyad FROM Yonetmenler UNION ALL SELECT Ad, Soyad FROM Oyuncular
Sorgular sonucunda seçilen sütun isimleri, ilk sorgudaki isim ile aynı olacaktır.
SELECT INTO ile Sonuçları Farklı Bir Tabloda Gösterme
Tablonun bir yedeğini almak için kullanılır da diyebiliriz. SELECT ile neyin yedeğinin alınacağı seçilir ve INTO ile yeni tablonun ismi verilir.
Yedek alma işlemini tüm tablo için uygulayabilirsiniz ya da WHERE ile kriter belirterek istenilen kayıtlardan oluşan bir yedek alabilirsiniz. Ayrıca oluşturduğunuz tablonun yedeğini, sizin gösterdiğiniz bir veritabanına da kaydedebilirsiniz.
Filmler tablosunun yedeğini alalım ve yedek tablonun ismini Film_Yedek yapalım ;
SELECT * INTO Filmler_Yedek FROM Filmler
1994 yılında çıkmış filmlerin Ad ve IMDB_Puan değerlerinin yedeğini alalım ;
SELECT Ad, IMDB_Puan INTO Filmler_Yedek FROM Filmler WHERE Tarih = 1994
IMDB Puanı 8.5′den büyük olan filmleri, daha önceden var olan Film_Backup veritabanına tablo olarak kaydedelim.
SELECT * INTO Film_Yedek "IN Film_Backup" FROM Filmler WHERE IMDB_Puan > 8.5
Sonuç – Özet
AS fonksiyonu ile tablo ya da sütunlara isim verebilir, DISTINCT ile tekrar eden kayıtları ayıklayabilir ve ORDER BY ile kayıtları sıralayabilirsiniz.
AND ve OR operatörleri birden fazla kriter belirtirken kullanabilirsiniz.
UNION ve UNION ALL ile birden fazla sorguyu birleştirebiliriz.
NULL fonksiyonu ile değer girilmemiş kayıtlara ulaşabilirsiniz.
Son olarak da SELECT INTO ile bir sorgu sonucunu farklı bir tabloya kaydedebilirsiniz.







Yorumlar
çok güzel özetlemişsiniz. teşekkürler