SQL-3

UNION SÖZCÜĞÜ
ANY SÖZCÜĞÜ
ALL SÖZCÜĞÜ
EXIST OPERATÖRÜ
NOT EXIST İFADESİ
SELECT KOMUTU İÇİNDE EXCEPT SÖZCÜĞÜ
SELECT KOMUTU İÇİNDE INTERSECT SÖZCÜĞÜ
BİR SELECT KOMUTU SONUCUNU AYRI BİR TABLO OLARAK SAKLAMAK

    UNION SÖZCÜĞÜ

UNION sözcüğü küme birleşimi işlemi görür.İki ayrı SELECT komutunun sonucunda elde edilen tabloların birleşimi gerçekleştirilir.
Örnek:
Adı Ali ve soyadı Kuşçu olan kişi işletmenin yürüttüğü projelerde çalışmaktadır.Bu kişinin bulunduğu projelerin isimleri ve projelerin yürütüldüğü yerleri listeleyiniz?
(SELECT proje_ad,yer FROM proje,bolum,personel WHERE Pbol_no=bolum_no AND YonSGn=SguvN AND ad='Ali' AND soyad='Kuşçu' UNION (SELECT proj_ad,yer  FROM proje, calısma,pesonel WHERE proje_no=proje_no  AND Per_s_g_no=sos_g_no AND ad='Ali' AND soyad='Kuşçu');

   UNION sözcüğü ile,iki yada daha çok SELECT in sonucu olan tabloların küme birleşimine tabi tutulması için iki koşul gereklidir:
SELECT komutları sonucunda elde edilecek tablolar aynı sayıda kolan içermelidirler.
 1. SELECT sonuç tablosu,       2.SELECT sonuç tablosu, 

 

 

 

 

 

 

 

 

 

 

 

          5 kolan                         5 kolon
Sonuç tabloların karşılıklı olarak aynı veri tipi ve aynı genişlikte olmalıdır.

ANY SÖZCÜĞÜ:
   Aşağıdaki örnek soru çerçevesinde bu sözcüğün SELECT komutu içindeki etkisini açıklayacağım.
Örnek:
Satış bölümünde çalışan personelin herhangi birinden daha düşük maaş alan mühendislik bölümünde çalışan kişileri listeleyiniz.
SELECT *
FROM personel WHERE brut>ANY(SELECT brut FROM personel WHERE bol_no=2) AND Bol_no=1;

Bu çözümün eşdeğeri olan ifade ise şöyledir:
SELECT * FROM personel WHERE brut < (SELECTI MAX (brut)  FROM personel
  WHERE bol_no=2) AND bol_no=1;

Burada satış bölümü kodu 2 ve mühendisli bölümü kodu ise 1 olarak kabul edilmiştir.İkinci çözüm ifadesinden de kolay anlaşılacağı gibi içiçe SELECT ifadesinde,içteki SELECT sorgulaması sonucu,
   2. bölümde (satış) çalışan personelin içinde en yüksek maaş olan kişinin maaşı bulunmakta, dıştaki SELECT ise,mühendislik bölümünde,bu maaştan düşük olan maaşa sahip kişileri listelemektedir.
   Mühendislik bölümünde çalışan ve satış bölümündeki en yüksek maaştan düşük maaş alan  bir kişi 'SATIŞ BÖLÜMÜNDEKİ HERHANGİ BİR MAAŞTAN DÜŞÜK OLMA' koşulunu sağlayacaktır.Eğer mühendislik bölümündeki kişinin maaşı,satış bölümündeki en yüksek maaştan daha yüksek olsa veya eşit olsa koşul sağlanmayacaktır.
Personel tablosu aşağıdaki verileri içeriyorsa;
Personel
Sicil     Ad        Soyad     Bol no        Brut
9910  Ali        Kuşçu       1       70000000
9911  Hasan  Yıldırım     1       60000000
9912  Ayşe    Can          2       50000000
9913  Mert     Şen          1       40000000
Yukarıdaki SELECT komutları sonucu (ANY ile yada eşdeğeri ile)
Sicil    Ad         Soyad     Bol no      Brut
9910  Ali       Kuşçu       1       70000000
9911  Hasan Yıldırım     1       60000000
9913  Mert    Şen          1       40000000

  ANY (herhangi bir) sözcüğü yerine,tamamen eşdeğeri olan SOME sözcüğü de kullanılabilir.

ALL SÖZCÜĞÜ

   'Hepsi tamamı' anlamındaki bu sözcük,SELECT komutu içerisinde belirli bir koşulu sağlayan bir grup datanın tamamınca,sağlayan koşullarla ilişkili olarak kullanılır.Aşağıdaki soru bu konuda açıklayıcı olacaktır:
Örnek:
Satış bölümünde çalışan ve mühendislik bölümündeki personelin hepsinden daha fazla maaş alan personeli listeleyiniz? Bu örnekte de satış bölümü kodu 2 ve mühendislik bölümü kodu 1 olarak alınırsa aşağıdaki SELECT grupları çözüm teşkil edecektir.
1. Yol

SELECT * FROM personel WHERE brüt>ALL (SELECT brut FROM personel
WHERE bol_no=1) AND bol_no=2;
2. Yol
SELECT * FROM personel WHERE brüt >( SELECT  MAX(brut) FROM personel WHERE bol_no=2) AND bol_no=2;

Personel tablosu aşağıdaki gibi ise;
Sicil     Ad        Soyad      Bol no      Brut
9910  Ali        Kuşçu       1       70000000
9911  Hasan  Yıldırım     1       60000000
9912  Ayşe     Can         2       50000000
9913  Mert     Şen          1       40000000

Yukarıda 1.yol ve 2.Yol alternatif olarak belirtilen,her iki SELECT komutları grubu da aşağıdaki sonucu verecektir:
Sicil      Ad     Soyad     Bol no      Brut
9912  Ayşe   Can         2       50000000
 EXISTS OPERATÖRÜ

   'Var mevcuttur'anlamımdaki bu sözcük,SQL‘de bir Boolean (lojik,mantıksal) operatördür.İçteki SELECT komutunun sorgulaması sonucunda, en az bir tablo satırı üretilmişse EXIST operatörü true (doğru) değerini,hiçbir tablo satırı üretilmişse,EXIST operatörü false (yanlış) değerini üretir.
   EXIAT operatörü,AND OR ve NOT gibi diğer mantıksal operatörlerle birlikte de kullanılabilir.Aşağıdaki soru ve çözümü bu mantıksal operatör ile ilişkili bir fikir vermektedir.
Örnek:
Numarası 27 olan parçayı satan satıcılarla ilişkili tüm bilgileri listeleyiniz?
Gerekli SELECT komutlarını yazabilmek için, sistemde satıcı adlı tabloda ve par_sat (parça ve satıcı ile ilişkili bilgi içeriyor) adlı tabloda aşağıdaki kolan ve verilerin bulunduğunu varsayalım:
Satıcı:
Satıcı_no    Adı                   Adresi    
1          Ali    Kuşçu        İstanbul
2          Ayşe Şen          İstanbul
3          Mert Can          İzmir
4          Murat Akın        Samsun

Parça ve satış ilgili tablo (Par_sat)
Sat_no   Parca_no     Miktar    
1            12             200
1            27             300 
2            27             350 
2            23             115
3            21             500
5             4              900
SELECT * FROM satici WHRE EXISTS (SELECT * FROM par_sat
WHERE sat_no=sattici_no  AND parca_n=27);

Sonuç:
Satıcı_no       Adı                    Adresi    
1             Ali    Kuşçu        İstanbul
2             Ayşe Şen           İstanbul

Yukarıda belirtildiği gibi,iç SELECT‘te WHERE‘i izleyen koşulu sağlayan satırlar,par_sat içinde bulundukça (mevcut iseler) EXISTS operatörü true (doğru) değeri verecek bu durumda dış SELECT‘in WHERE koşul kısmı doğru olacağı için,o satıcı ile ilişkili bilgiler,satıcı tablosunda listelenecektir.

 NOT EXISTS İFADESİ
Az önce söylendiği gibi EXISTS mantıksal operatörü,NOT;AND;OR mantıksal operatörleri ile birlikte de kullanılır.
   NOT EXISTS şeklinde kullanılması;içteki SELECT komutunun sorgulanması sonucu koşulu sağlayan hiçbir tablo satırı bulunamazsa,dıştaki SELECT için WHERE‘i izleyen koşul doğru olarak kabul edilir.Ve SELECT icra edilir.
Örnek:
27 nolu parçayı satmayan satıcılar kimlerdir?
SELECT *
FROM satici WHERE NOT EXISTS(SELECT * FROM par_sat WHRE sat_no=satici_n AND parca_n=27);

     

Satıcı_no    Adı                 Adresi    
3          Mert Can          İzmir
4          Murat Akın        Samsun

SELECT KOMUTU İÇİNDE EXCEPT SÖZCÜĞÜ
EXCEPT sözcüğü,iki tablo arasında küme farkı(difference)işlemini gerçekleştirir.Tablo 1 ve tablo 2 aşağıdaki gibi olsun:
         Tablo-1                  Tablo-2
         
Sütun-1                Sütun-1
            a                         a
            b                         b
            c                         c
            d

Tablo-1  -  Tablo-2  işlemi sonucu (iki kümenin farkı) elde edilecek tabloda,Tablo-12de bulunup,Tablo-2’de bulunmayan veriler mevcut olacaktır.Bu işlem SQL’de Tablo-1 EXCEPT Tablo-2 şeklinde ifade edilir ve sonuçta elde edilen far tablosu aşağıdadır:
                  Tablo-1 EXCEPT Tablo-2
                        Sütun-1
                                 d             
Örnek: Satış bölümündeki personel adlarında,mühendislik bölümünde bulunmayanları listeleyiniz?
SELECT * FROM  (SELECT ad FROM personel  WHERE bol_no=1 EXCEPT
SELECT ad FROM personel  WHERE bol_no=2);

SELECT KOMUTU İÇİNDE INTERSECT SÖZCÜĞÜ
İki tablo arasında küme kesişimi (intersection) işlemi gerçekleştirir.
             Tablo –1 INTERSEC Tablo-2
        Sütun-1                Sütun-1
            X                         P
            Y                         Q
            Z                         X
                                       Y
 Şeklinde ise;
Tablo-1 INTERSECT Tablo-2 işlemi sonucunda;
                      Sütun-1
                         Y
                         X
Tablosu elde edilecektir.
Örnek
: Hem Samsun’daki hem İstanbul’daki projelerde görev alan  bölümleri listeleyiniz.
SELECT * FROM  (SELECT bl_no FROM proje  WHERE yer LIKE '%Samsun%'  INTERSECT  SELECT bl_no FORM proje  WHERE yer LIKE '%Istanbul%');

Proje tablosundaki bilgi aşağıdaki gibi olsun;

Proje_Ad    Proje_no     Yer        Bl_no            
Dershane      04       İstanbul             1
Personel       06       İstanbul              1
Ögrenci        07       İzmir                  3
Kütüphane   10        Samsun              2

Yukarıdaki SELECT komutu sonucunda bulunan tablolar ile son adımda

         Bl_no   Bl_no
           1       1
           2       2
           4

              Bl_no
                1
                2
Tablosu elde edilecektir.

 BİR SELECT KOMUTU SONUCUNU AYRI BİR TABLO OLARAK SAKLAMAK
    Bir SELECT komutunun sonucu olarak elde edilecek bilgileri,geçici bir tablo olarak saklamak mümkündür.Bunu gerçekleştirmek için,SELECT komutunun sonuna SAVE TO TEMP tablo adı şeklinde bir ifade eklemek gerekmektedir.
Örnek:
Bayan personeli bayan adlı bir tablo içinde saklayınız?
SELECT * FROM personel WHERE cins =.F.SAVE TO TEMP bayan;
     Cinsiyeti belirleyen cins alanında .F. simgesinin bayanları temsil ettiği varsayımı ile,personel adlı tablodaki bayan adlı tabloda geçici olarak saklanacaktır.
   Bayan adlı tabloya,SELECT komutu, bütün şekilleri ile uygulanabilir.Örneğin,bayanlar içinden brüt maaşı 10000000 TL.’ den fazla olanlar listelenmek istenirse:
SELECT * FROM  bayan  WHERE brüt > 10000000;
İfadesi kullanılabilir.Burada üretilen geçici değil kalıcı olması istenirse KEEP sözcüğü eklenmelidir.
SELECT *
FROM personel WHERE cins=.F. SAVE TO TEMP bayan KEEP;