Veritabanı Notları                                      Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi)
                                                                                   (ali.nizam@fsm.edu.tr)


                     SQL SORGULAMA İŞLEMİ - SELECT Komutu
SELECT   deyimi veritabanından veriyi almak için kullanılır. Verinin gösterilmesi, belli
özelliklere sahip verinin seçilmesi, sıralama, gruplama, farklı veri kümelerinin birleştirilerek
gösterilmesi gibi işlemler gerçekleştirilir. En çok kullanılan SQL komutudur. SELECT iler veri
seti bulunarak üzerinde değiştirme, ekleme, silme gibi işlemler de yapılabilir.


1.1 SQL Genel İfadesi
SELECT [DISTINCT], [*], (kolon listesi)
FROM (tablo listesi)
WHERE (birleştirme (join) şartları ve sorgu şartları)
GROUP BY (kolon listesi)
HAVING (sorgu koşulları)
ORDER BY (kolonlar, ifadeler)


Köşeli parantezler seçime bağlı alanları belirtmektedir. İfadede olabilir veya olmayabilir.
Normal parantezler programcı tarafından belirlenen kısımlardır.
Sütun Kolon seçimi




Satır Seçimi




Gruplama




Mavi satırlar için tek bir sonuç ve kahverengi satırlar için tek sonuç dönmesinin sağlanması



Sıralama
                 1                  1
                 3                   2
                 2                   3
                 4                   4




                                               1
Veritabanı Notları                                       Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi)
                                                                                    (ali.nizam@fsm.edu.tr)



Örneklerin çalıştırılacağı ortam




Oracle SQL Developer ile veritabanına bağlanalım.
SELECT ile FROM arasındaki kısım seçilecek kolonları belirler.
Bir tablodaki tüm kolonlardaki bilgiler seçmek için
(SELECT * FROM ... )yazım şekli kullanılır.

FROM dan sonra veri seçilecek tablo isimleri yazılır.
WHERE kısıtlayıcı şartların yazıldığı kısımdır.

Örneğin regions tablosundaki tüm kayıtları seçmek için

     SELECT *
     FROM regions
Komutu çalıştırdığımızda aşağıdaki sonuç gelir.
                               REGION_ID      REGION_NAME
                               1            Europe
                               2            Americas
                               3            Asia
                               4            Middle East and Africa



                                              2
Veritabanı Notları                                         Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi)
                                                                                      (ali.nizam@fsm.edu.tr)

Sadece belli kolonlar seçilmek isteniyorsa onların isimleri yazılır.
      SELECT region_id
      FROM regions
      Komutu çalıştırdığımızda aşağıdaki sonuç gelir.
                                            REGION_ID
                                            1
                                            2
                                            3
                                            4
Bazı satırları seçmek istiyorsak bu durumda WHERE şartında kısıtlayıcı ifadeler
yazmamamız gerekir.
       SELECT *
       FROM regions
       WHERE region_id=2
                                    REGION_ID    REGION_NAME
                                    2            Americas
Hem kısıtlayıp hem de belli kolonları seçebiliriz.
      SELECT region_name
      FROM regions
      WHERE region_id=2
                                          REGION_NAME
                                          Americas




1.2 Genel sonuçları kısıtlamak WHERE şartı

SQL'de gelen sonuçları kısıtlamak için WHERE şartı kullanılır. Grup işlemlerinde kısıtlama
yapmak için HAVING'in nasıl kullandığı ayrıca açıklanacak...

Örnek 101 Id numarasına sahip çalışanı bulunuz.

         SELECT first_name, last_name
         FROM employees
         WHERE employee_id=101

Sonuç

                                    FIRST_NAME       LAST_NAME
                                    Neena            Kochhar



"employee_id=101" ifadesine yakından bakalım.
WHERE şartı bu tür mantıksal doğru ve yanlış sonuç üreten ifadelerin birleşiminden oluşur.
employee_id kolon ismidir. 101 dışarıdan verilen sabit bir numaradır. Arada eşitlik(=) mantıksal
sonuç üretmeyi sağlar. Eğer eşitse TRUE aksi halde FALSE üretir. Sonuç FALSE ise ilgili kayıt
dönmez.
Yukarıdaki sorgudan sadece 101 nolu çalışanın kaydı döner.
WHERE şartında eşitlik yerine büyük (>), küçük (<), (>=), (<=) gibi operatörler de kullanılabilir.




                                                 3
Veritabanı Notları                                            Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi)
                                                                                         (ali.nizam@fsm.edu.tr)

Örnek: Maaşı 15000 $ dan büyük ve eşit çalışanları bulmak isteyelim

         SELECT first_name, last_name, salary
         FROM employees
         WHERE salary>15000

Sonuç:

                                 FIRST_NAME      LAST_NAME      SALARY
                                 Steven          King           24000
                                 Neena           Kochhar        17000
                                 Lex             De Haan        17000




1.3 Format Uygunluk kontrolü: LIKE operatörü

LIKE ve yüzde (%), alt çizgi
Veri formatını kısme bidiğimiz bilmediğimiz sorgulamalarda istediğimiz bilgilere ulaşmak için LIKE
operatörü kullanılır. LIKE kullanarak farklı format aramaları yapılabilir.
               (%) bir ya da daha fazla değer içeren herhangi bir kısım aranıyorsa kullanılır
            ( _ )herhangi tek bir karakter ve özellikle belli bir sırasındaki karakterler aranıyorsa
           kullanılır.
Örnek: İlk harfi 'H' olan çalışanları bulunuz.

         SELECT first_name, last_name, salary
         FROM employees
         WHERE first_name like 'H%'

Sonuç
                                 FIRST_NAME      LAST_NAME      SALARY
                                 Hermann         Baer           10000
                                 Harrison        Bloom          10000
                                 Hazel           Philtanker     2200
(SQL'de sabit metinler '(tek tırnak) içerisine yazılır. Yukarıda 'H%' kullanımına dikkat.)


1.4 Aralık Bulma (BETWEEN) operatörü
Kolon değeri verilen sayı ve tarih aralığındaki satırları seçmek için kullanılır.
Aralığın küçük değeri önce yazılmalıdır. Aksi halde kayır dönmez.

Örnek: Maaşı 15000 ile 20000 arası çalışanlar:

         SELECT first_name, last_name, salary
         FROM employees
         WHERE salary BETWEEN 15000 AND 20000

Sonuç:

                                 FIRST_NAME      LAST_NAME      SALARY
                                 Neena           Kochhar        17000
                                 Lex             De Haan        17000




                                                    4
Veritabanı Notları                                            Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi)
                                                                                         (ali.nizam@fsm.edu.tr)


1.5 Boş bırakılan değerler (NULL kullanımı)

Bir kolona bir satırda değer girilmemişse NULL kabul edilir. NULL özel bir aritmetiğe sahiptir.
 Hiç bir sayı NULL'a eşit değildir.
 NULL da kendisine eşit değildir.

Örnek: Birimi girilmemiş çalışanları bulmak isteyelim.

         (Yanlış Kullanım)
         SELECT first_name, last_name
         FROM employees
         WHERE department_id = NULL

Yukarıdaki ifade hiç bir kayıt döndürmez. Ancak kayıtlar incelendiğinde birimi boş bir çalışan
olduğu görülecektir.

         NULL için özel bir operatör kullanılmalıdır. (IS NULL). Bu kullanılırsa problem çözülür.

         (Doğru Kullanım)
         SELECT first_name, last_name
         FROM employees
         WHERE department_id IS NULL


                                        FIRST_NAME       LAST_NAME
                                        Kimberely        Grant

1.6 Mantıksal Operatörler (1)

Mantıksal operatörler, bir SQL yapısı içerisindeki WHERE cümlesi içinde iki veya daha fazla koşulun
arasındaki bağlantının ifade edilmesinde kullanılırlar. AND, OR, NOT operatörleridir. İkiden fazla şart
olması durumunda bu operatörler tekrar tekrar kullanılabilir. Bu durumunda ifadeleri ayırmak için
parantez kullanımı uygun olacaktır.

1.6.1 AND
İki koşulun da TRUE olması durumunda TRUE koşullarda birinin veya ikisinin birden sağlanmaması
durumunda FALSE değerini döndürür.
         AND Doğruluk tablosu
         AND         TRUE    FALSE   NULL
         TRUE        TRUE    FALSE   NULL
         FALSE       FALSE   FALSE   FALSE
         NULL        NULL    FALSE   NULL


Özellikler NULL üzerinde yapılan işlemlere dikkat edilmelidir. AND için baskın olan FALSE ifadesi
olduğundan herhangi bir ifadenin FALSE olması halinde sonuç FALSE olacaktır.




                                                     5
Veritabanı Notları                                                       Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi)
                                                                                                    (ali.nizam@fsm.edu.tr)

Örnek: 90 'nolu birimde çalışıp 5000 $ üzeri maaş alan personelleri bulalım. (Bu arada
maaşlarda hakikaten iyiymiş)

         SELECT first_name,last_name,salary,department_ıd
         FROM employees
         WHERE department_id=90
         AND salary>5000
Sonuç:
                             FIRST_NAME     LAST_NAME           SALARY     DEPARTMENT_ID
                             Steven         King                24000      90
                             Neena          Kochhar             17000      90
                             Lex            De Haan             17000      90


1.6.2    OR
         İki koşuldan bir tanesinin veya ikisinin de TRUE olması durumunda TRUE iki koşulunda
         birden FALSE olması durumunda FALSE değerini döndürür.
                     OR Doğruluk tablosu
                     OR          TRUE           FALSE            NULL
                     TRUE        TRUE           TRUE             TRUE
                     FALSE       TRUE           FALSE            NULL
                     NULL        TRUE           NULL             NULL
         OR için baskın olan TRUE şart olduğuna göre herhangi bir ifadenin TRUE olması halinde
         sonucun TRUE olması buraya da uygulanabilecek bir kuraldır.

Örnek: 90 'nolu birimde çalışan veya 5000 $ üzeri maaş alan personelleri bulalım.

         SELECT first_name,last_name,salary,department_ıd
         FROM employees
         WHERE department_id=90
         OR salary>5000
Sonuç (58 kişi geldiğinden sadece bir kısmı gösterilmiştir.)

                             FIRST_NAME     LAST_NAME           SALARY     DEPARTMENT_ID
                             Steven         King                24000      90
                             Neena          Kochhar             17000      90
                             Lex            De Haan             17000      90
                             Alexander      Hunold              9000       60
                             Bruce          Ernst               6000       60
                             Nancy          Greenberg           12008      100
                             Daniel         Faviet              9000       100
                             ***            ***                 ***        ***

1.6.3    NOT
         İfadeyi mantıksal tersi yapar. TRUE ise FALSE, FALSE ise TRUE.
         NOT Doğruluk tablosu
         NOT                         TRUE              FALSE                NULL
         TRUE                        TRUE              FALSE                NULL

(1) Veritabani-Tasarimi-iliskisel-Veri-Modeli-ve-Uygulamalari




                                                           6

Sql sorgu işlemi (4)

  • 1.
    Veritabanı Notları Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi) (ali.nizam@fsm.edu.tr) SQL SORGULAMA İŞLEMİ - SELECT Komutu SELECT deyimi veritabanından veriyi almak için kullanılır. Verinin gösterilmesi, belli özelliklere sahip verinin seçilmesi, sıralama, gruplama, farklı veri kümelerinin birleştirilerek gösterilmesi gibi işlemler gerçekleştirilir. En çok kullanılan SQL komutudur. SELECT iler veri seti bulunarak üzerinde değiştirme, ekleme, silme gibi işlemler de yapılabilir. 1.1 SQL Genel İfadesi SELECT [DISTINCT], [*], (kolon listesi) FROM (tablo listesi) WHERE (birleştirme (join) şartları ve sorgu şartları) GROUP BY (kolon listesi) HAVING (sorgu koşulları) ORDER BY (kolonlar, ifadeler) Köşeli parantezler seçime bağlı alanları belirtmektedir. İfadede olabilir veya olmayabilir. Normal parantezler programcı tarafından belirlenen kısımlardır. Sütun Kolon seçimi Satır Seçimi Gruplama Mavi satırlar için tek bir sonuç ve kahverengi satırlar için tek sonuç dönmesinin sağlanması Sıralama 1  1 3 2 2 3 4 4 1
  • 2.
    Veritabanı Notları Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi) (ali.nizam@fsm.edu.tr) Örneklerin çalıştırılacağı ortam Oracle SQL Developer ile veritabanına bağlanalım. SELECT ile FROM arasındaki kısım seçilecek kolonları belirler. Bir tablodaki tüm kolonlardaki bilgiler seçmek için (SELECT * FROM ... )yazım şekli kullanılır. FROM dan sonra veri seçilecek tablo isimleri yazılır. WHERE kısıtlayıcı şartların yazıldığı kısımdır. Örneğin regions tablosundaki tüm kayıtları seçmek için SELECT * FROM regions Komutu çalıştırdığımızda aşağıdaki sonuç gelir. REGION_ID REGION_NAME 1 Europe 2 Americas 3 Asia 4 Middle East and Africa 2
  • 3.
    Veritabanı Notları Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi) (ali.nizam@fsm.edu.tr) Sadece belli kolonlar seçilmek isteniyorsa onların isimleri yazılır. SELECT region_id FROM regions Komutu çalıştırdığımızda aşağıdaki sonuç gelir. REGION_ID 1 2 3 4 Bazı satırları seçmek istiyorsak bu durumda WHERE şartında kısıtlayıcı ifadeler yazmamamız gerekir. SELECT * FROM regions WHERE region_id=2 REGION_ID REGION_NAME 2 Americas Hem kısıtlayıp hem de belli kolonları seçebiliriz. SELECT region_name FROM regions WHERE region_id=2 REGION_NAME Americas 1.2 Genel sonuçları kısıtlamak WHERE şartı SQL'de gelen sonuçları kısıtlamak için WHERE şartı kullanılır. Grup işlemlerinde kısıtlama yapmak için HAVING'in nasıl kullandığı ayrıca açıklanacak... Örnek 101 Id numarasına sahip çalışanı bulunuz. SELECT first_name, last_name FROM employees WHERE employee_id=101 Sonuç FIRST_NAME LAST_NAME Neena Kochhar "employee_id=101" ifadesine yakından bakalım. WHERE şartı bu tür mantıksal doğru ve yanlış sonuç üreten ifadelerin birleşiminden oluşur. employee_id kolon ismidir. 101 dışarıdan verilen sabit bir numaradır. Arada eşitlik(=) mantıksal sonuç üretmeyi sağlar. Eğer eşitse TRUE aksi halde FALSE üretir. Sonuç FALSE ise ilgili kayıt dönmez. Yukarıdaki sorgudan sadece 101 nolu çalışanın kaydı döner. WHERE şartında eşitlik yerine büyük (>), küçük (<), (>=), (<=) gibi operatörler de kullanılabilir. 3
  • 4.
    Veritabanı Notları Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi) (ali.nizam@fsm.edu.tr) Örnek: Maaşı 15000 $ dan büyük ve eşit çalışanları bulmak isteyelim SELECT first_name, last_name, salary FROM employees WHERE salary>15000 Sonuç: FIRST_NAME LAST_NAME SALARY Steven King 24000 Neena Kochhar 17000 Lex De Haan 17000 1.3 Format Uygunluk kontrolü: LIKE operatörü LIKE ve yüzde (%), alt çizgi Veri formatını kısme bidiğimiz bilmediğimiz sorgulamalarda istediğimiz bilgilere ulaşmak için LIKE operatörü kullanılır. LIKE kullanarak farklı format aramaları yapılabilir.  (%) bir ya da daha fazla değer içeren herhangi bir kısım aranıyorsa kullanılır  ( _ )herhangi tek bir karakter ve özellikle belli bir sırasındaki karakterler aranıyorsa kullanılır. Örnek: İlk harfi 'H' olan çalışanları bulunuz. SELECT first_name, last_name, salary FROM employees WHERE first_name like 'H%' Sonuç FIRST_NAME LAST_NAME SALARY Hermann Baer 10000 Harrison Bloom 10000 Hazel Philtanker 2200 (SQL'de sabit metinler '(tek tırnak) içerisine yazılır. Yukarıda 'H%' kullanımına dikkat.) 1.4 Aralık Bulma (BETWEEN) operatörü Kolon değeri verilen sayı ve tarih aralığındaki satırları seçmek için kullanılır. Aralığın küçük değeri önce yazılmalıdır. Aksi halde kayır dönmez. Örnek: Maaşı 15000 ile 20000 arası çalışanlar: SELECT first_name, last_name, salary FROM employees WHERE salary BETWEEN 15000 AND 20000 Sonuç: FIRST_NAME LAST_NAME SALARY Neena Kochhar 17000 Lex De Haan 17000 4
  • 5.
    Veritabanı Notları Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi) (ali.nizam@fsm.edu.tr) 1.5 Boş bırakılan değerler (NULL kullanımı) Bir kolona bir satırda değer girilmemişse NULL kabul edilir. NULL özel bir aritmetiğe sahiptir.  Hiç bir sayı NULL'a eşit değildir.  NULL da kendisine eşit değildir. Örnek: Birimi girilmemiş çalışanları bulmak isteyelim. (Yanlış Kullanım) SELECT first_name, last_name FROM employees WHERE department_id = NULL Yukarıdaki ifade hiç bir kayıt döndürmez. Ancak kayıtlar incelendiğinde birimi boş bir çalışan olduğu görülecektir. NULL için özel bir operatör kullanılmalıdır. (IS NULL). Bu kullanılırsa problem çözülür. (Doğru Kullanım) SELECT first_name, last_name FROM employees WHERE department_id IS NULL FIRST_NAME LAST_NAME Kimberely Grant 1.6 Mantıksal Operatörler (1) Mantıksal operatörler, bir SQL yapısı içerisindeki WHERE cümlesi içinde iki veya daha fazla koşulun arasındaki bağlantının ifade edilmesinde kullanılırlar. AND, OR, NOT operatörleridir. İkiden fazla şart olması durumunda bu operatörler tekrar tekrar kullanılabilir. Bu durumunda ifadeleri ayırmak için parantez kullanımı uygun olacaktır. 1.6.1 AND İki koşulun da TRUE olması durumunda TRUE koşullarda birinin veya ikisinin birden sağlanmaması durumunda FALSE değerini döndürür. AND Doğruluk tablosu AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL Özellikler NULL üzerinde yapılan işlemlere dikkat edilmelidir. AND için baskın olan FALSE ifadesi olduğundan herhangi bir ifadenin FALSE olması halinde sonuç FALSE olacaktır. 5
  • 6.
    Veritabanı Notları Ali Nizam (Fatih Sultan Mehmet Vakıf Üniversitesi) (ali.nizam@fsm.edu.tr) Örnek: 90 'nolu birimde çalışıp 5000 $ üzeri maaş alan personelleri bulalım. (Bu arada maaşlarda hakikaten iyiymiş) SELECT first_name,last_name,salary,department_ıd FROM employees WHERE department_id=90 AND salary>5000 Sonuç: FIRST_NAME LAST_NAME SALARY DEPARTMENT_ID Steven King 24000 90 Neena Kochhar 17000 90 Lex De Haan 17000 90 1.6.2 OR İki koşuldan bir tanesinin veya ikisinin de TRUE olması durumunda TRUE iki koşulunda birden FALSE olması durumunda FALSE değerini döndürür. OR Doğruluk tablosu OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL OR için baskın olan TRUE şart olduğuna göre herhangi bir ifadenin TRUE olması halinde sonucun TRUE olması buraya da uygulanabilecek bir kuraldır. Örnek: 90 'nolu birimde çalışan veya 5000 $ üzeri maaş alan personelleri bulalım. SELECT first_name,last_name,salary,department_ıd FROM employees WHERE department_id=90 OR salary>5000 Sonuç (58 kişi geldiğinden sadece bir kısmı gösterilmiştir.) FIRST_NAME LAST_NAME SALARY DEPARTMENT_ID Steven King 24000 90 Neena Kochhar 17000 90 Lex De Haan 17000 90 Alexander Hunold 9000 60 Bruce Ernst 6000 60 Nancy Greenberg 12008 100 Daniel Faviet 9000 100 *** *** *** *** 1.6.3 NOT İfadeyi mantıksal tersi yapar. TRUE ise FALSE, FALSE ise TRUE. NOT Doğruluk tablosu NOT TRUE FALSE NULL TRUE TRUE FALSE NULL (1) Veritabani-Tasarimi-iliskisel-Veri-Modeli-ve-Uygulamalari 6