Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

Bir Tablonun Farklı İsimlerdeki Eşdeğerleri İle Sorgulama

Daha önceden tanımlanmış bir tablonun, farklı isimli, bir eşdeğerini oluşturarak sorgulamalarda kullanmak mümkün olabilir. Örneğin, aşağıdaki sorgulamayı göz önüne alalım:

Her personel için, personel sicil numarası, ad ve soyadı ile bu personelin yöneticisinin ad, soyad ve doğum tarihini listeleyiniz: Bu isteğe cevap teşkil edebilecek SQL ifadelerinden bir tanesi, aşağıdaki gibi düzenlenebilir.
     SELECT A.sicil,A.ad,A.soyad,B.ad,

      B.soyad,B.dog_tar

      FROM Personel A B

      WHERE A.yon_s_g_n=B.sosy_g_no ;
 
Personel tablosu aşağıdaki gibi olsun:

SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı

Yukarıdaki SELECT komutunun çıktısı aşağıdaki tabloda verilmiştir.

SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı
 

Bu SELECT komutu ile, personel tablosunun A ve B isimli birer kopyası oluşturulur. Bu kopyalara personel kütüğünün eşdeğerleri ya da takma adlıları (aliases) adı verilir. SELECT komutu, personel tablosunun eşdeğeri olan ve yönetilenleri temsil eden B tablosundaki sosyal güvenlik numarasına eşit olan satırları kontrol ederek her personelin sicil no, ad, soyad bilgilerini ve bu personelin yöneticisinin ad, soyad ve doğum tarihini listeler (yukarıdaki tabloda verilmiştir). Buradaki yöntem ile bir tablonun kendisi ile birleştirilmesi işlemi kendi üzerinde birleştirme (self-join) adını almaktadır. Bazı SQL gerçekleştirimlerinde, bu SELECT komutunun,
     SELECT A.sicil,A.ad,A.soyad,B.ad,B.soyad,B.dog_tar

      FROM Personel A,Personel B

      WHERE A.yon_s_g_n=B.sosy_g_no;
 
şeklinde yazılması gerekir.

Aşağıdaki örnek soru için, eşdeğer tablo oluşturma özelliğinden yararlanarak, benzer şekilde SELECT komutu düzenleyebiliriz:

Örnek: Satış bölümünde çalışan tüm personelin ad, soyad ve adreslerini listelemek.
          SELECT a.ad,a.soyad,a.adres

           FROM Personel a,Personel b

                 WHERE b.bölüm_ad=”Satış” AND

            a.bol_no=b.bölüm_no;
 
şeklinde olacak ve tablo aşağıdaki gibi olacaktır.

Personel tablosu

Tablo 1.
SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı

Bölüm tablosu

Tablo 2.
SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı

şeklinde ise Tablo 1’deki sonuç elde edilecektir.

Tablo 1 Satış Bölümündekilerin Eşdeğer Tablo Oluşturma Yöntemi İle Listelenmesi Sonucu.

SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı
 

İç İçe Select Komutları (Nested Selects)

Bazı sorgulamalar, özelliği itibarı ile iç içe SELECT komutlarının kullanılmasını gerektirebilir. İçteki SELECT komutunun bulduğu sonuç, dıştaki SELECT komutunun işlevini yerine getirmesi için kullanılır. Örnek olarak, aşağıdaki soruyu göz önüne alalım:

Örnek: Parça numarası 24 olan parçayı kullanan projelerde çalışan personeli listelemek.

Örnek olarak aşağıdaki verileri göz önüne alalım:

Parça
SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı
 

Proje
SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı
 

Personel
SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı
 

Çalışma
SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı

Bu tablolardan yararlanarak aşağıdaki SELECT komutları ile arzu edilen işlem gerçekleştirilebilir:
     SELECT *

      FORM Personel

      WHERE sosy_g_no

      IN (SELECT Per_s_g_no

           FROM Parça,Proje,Çalışma

           WHERE pr_no=proj_no AND

            proj_no=proje_no AND parça_no=24);
 
Buradaki içteki SELECT komutu parça, proje ve çalışma tablolarını proje numaraları üzerinde (proje numaraları bu tablolarda sıra ile pr_no, proj_no ve proje_no adı ile yer almaktadır) birleştirerek elde edilen genişletilmiş tablodan sadece parça no’su 24 olan satırdaki personel sosyal güvenlik numaralarını (pers_s_g_no) çıkarmakta ve sonuçta yukarıdaki örnek data için

SQL komutlarından select sorgusu ve myadmin üzerinden anlatımı
değerlerini elde etmektedir.

Dış SELECT komutu ise, personel tablosundan bu sosyal güvenlik numaralarına sahip personel aşağıdaki tabloda görüldüğü gibi listelenecektir:

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

Benzer şekilde aşağıdaki sorunun çözümü de iç içe SELECT komutları ile gerçekleştirilebilir.

Örnek: Fatih’te oturan personelin çalıştığı projelerin adları ve yerlerini listelemek.
           SELECT proje_ad,yer

            FROM Proje

            WHERE proj_no IN(SELECT proje_no

                              FROM Personel,Çalışma

                              WHERE sosy_g_no=Per_s_g_no

                              AND adres LIKE ‘%Fatih%’);

SONUÇ:

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

çıktısı elde edilecektir.


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 işlemini gerçekleştirir. Aşağıdaki soru ve cevabı olan SELECT komutları bu konuda bir fikir vermektedir.

Örnek: Adı Ahmet ve soyadı Caner olan kişi ya da kişileri, işletmenin yürüttüğü projelerde çalışan bir kişi (sıradan bir personel ya da bölüm yöneticisi) olarak bulunduran projelerin isimlerini ve projelerin yürütüldüğü yerleri listelemek.
          (SELECT proj_no,yer

           FROM Proje,bölüm,Personel

           WHERE bl_no=böülm_no AND

           y_sos_g_no=sosy_g_no AND

           ad=”Ahmet” AND soyad=”Caner”)

           UNION (SELECT proj_ad,yer

                 FROM Proje,Çalışma,Personel

                 WHERE proj_no=proje_no AND

                  per_s_g_no=sosy_g_no AND ad=”Ahmet” AND soyad=”Caner”);
 
UNION sözcüğü ile, iki ya da daha çok SELECT ‘in sonucu olan tabloların küme birleşimi işlemine tabi tutulması için iki koşul gereklidir.

      1-) SELECT komutları sonucunda elde edilecek tablolar aynı sayıda kolon içermelidirler.

      1. SELECT   2. SELECT

     Sonuç Tablosu:

          Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı                                                                          

          5 Kolon        5 Kolon

     2-) Sonuç tabloların karşılıklı olarak kolonları ayrı 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ğız.
 
Satış bölümünde çalışan personelin her hangi birinden daha düşük maaş alan ve mühendislik bölümünde çalışan kişileri listelemek.

            SELECT *

            FROM Personel

            WHERE maas<ANY

            ( SELECT maas

             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 maas<(SELECT MAX (maas)

                         FROM Personel

                         WHERE bol_no=2) AND bol_no=1;
 
Burada satış bölümü kodu 2 ve mühendislik bölümü kodu ise 1 olarak kabul edilmiştir. İkinci çözüm ifadesinden de kolayca anlaşılacağı gibi, iç içe SELECT ifadesinde, içteki SELECT sorgulaması sonucu, ikinci bölümde (Satış) çalışan personelin içinde en yüksek maaş alan 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.
 
Buradaki düşünce tarzı şöyledir:

Mühendislik bölümünde çalışan ve satış bölümündeki en yüksek maaştan düşük maaş alan kişi “SATIŞ BÖLÜMÜNDEKİ HER HANGİ 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 ona eşit olsa) doğal olarak bu koşul sağlanmayacaktı.

Personel tablosu aşağıdaki verileri içeriyorsa;

Personel

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

Yukarıdaki SELECT komutları sonucu (ANY ile ya da eşdeğeri ile)

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

tablosu elde edilecektir.

ANY (her hangi 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ğlanan koşullarla ilişkili olarak kullanılır. Aşağıdaki soru 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. Alternatif     2. Alternatif
SELECT *         SELECT *

FROM Personel      FROM Personel

WHERE maas>ALL(SELECT maas  WHERE maas>(SELECT MAX(maas)

                       FORM Personel      FROM Personel

                      WHERE bol_no=1)      WHERE bol_no=1)

                            AND bol_no=2;      AND bol_no=2;
 
Personel tablosu aşağıdaki verileri içeriyorsa

Personel
Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

Yukarıdaki 1. Alternatif ve 2. Alternatif olarak belirtilen, her iki SELECT komutları grubu da aşağıdaki sonucu verecektir.

SONUÇ:

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 
 
EXISTS Operatörü

      “Var, mevcuttur” anlamındaki bu sözcük, SQL’de boolean (lojik, mantıksal) operatördür. İçteki SELECT komutunun sorgulanması sonucunda, en az bir tablo satırı üretilmişse EXISTS operatörü TRUE (doğru) değerini, hiçbir tablo satırı üretilmemişse, EXISTS operatörü FALSE (yanlış) değerini üretir.

EXISTS operatörü, AND, OR ve NOT gibi diğer mantıksal operatörlerle birlikte kullanılabilir. Aşağıdaki soru ve çözümü bu mantıksal operatörle ilişkili bir fikir vermektedir:

Örnek: Numarası 27 olan parçayı satan satıcılarla ilişkili tüm bilgileri listelemek.

Gerekli SELECT komularını yazabilmek için, sistemde satıcı adlı tabloda ve par_sat (parça ve satıcısı ile ilişkili bilgileri içeriyor) adlı tabloda aşağıdaki kolon ve verilerin bulunduğunu varsayalım:

Satıcı                  Par_sat
Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
           SELECT *

            FROM Satıcı

            WHERE EXISTS (SELECT *

                           FROM Par_sat

                           WHERE sat_no=satıcı_n AND parca_n=27);
 
Aşağıdaki sonuç elde edilir:

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

Yukarıda 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 İfadesi

EXISTS’te belirtildiği gibi, EXISTS mantıksal operatörü, NOT, AND ve OR mantıksal operatörleri ile birlikte de kullanılır.

NOT EXISTS şeklinde kullanılması, EXISTS’te açıklanan yapının tamamen tersi bir etki yaratır; yani SELECT komutunun sorgulanması sonucu koşulu sağlayan hiçbir tablo satırı bulunamazsa, dıştaki SELECT için WHERE’i izleyen koşul kısmı TRUE (doğru) olarak kabul edilir ve SELECT icra edilir.

Örnek: Numarası 27 olan parçayı satmayan satıcılar kimlerdir? (EXISTS operatöründe kullanılan Satıcı ve Par_sat tablolarındaki verilerin aynen geçerli olduğunu varsayalım)

            SELECT *

            FROM Satıcı

            WHERE NOT EXISTS (SELECT *

                                    FROM Par_sat

                                    WHERE sat_no=satıcı_n

                                    AND parca_n=27);

 
SONUÇ:
Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

NOT EXISTS ifadesinin kullanımı ile ilişkili olarak diğer bir örnek de aşağıdaki soru ile ilişkili olarak verilmiştir:
 
 
 

Örnek: İşeltmenin yönettiği projelerde kullanılan parçalardan, tümünü de bulunduran ve İstanbul’da faaliyet gösteren satıcılarla ilişkili bütün bilgileri listelemek.
           SELECT *

           FROM Satıcı

                 WHERE NOT EXISTS (SELECT *

                                   FROM Parça

                                   WHERE NOT EXISTS

                                           (SELECT *

                                            FROM Par_sat

                                            WHERE sat_no=satıcı_n  AND

                                      parca_n=par_no ))

           AND ADRES LIKE &#8216;%İstanbul%&#8217;;

 
Bu ifade şu şekilde yorumlanabilir.

İstanbul’daki satıcılar içinde, satmadıkları bir parça mevcut olmayan satıcıları listele!


Select Komutu İçinde 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

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

     Tablo 1 EXCEPT

     Tablo 2

Tablo 1 ile Tablo 2’de yukarıdaki işleme göre (Tablo 1 EXCEPT,Tablo2) işlem sonucu elde edilecek tabloda, Tablo 1’de 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 fark tablosu aşağıdadır:

     Tablo 1 EXCEPT Tablo 2

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
     

Aşağıdaki soru ve çözümü bu sözcüğün kullanımı konusunda daha iyi fikir verecektir:

Örnek: Satış bölümündeki personel adlarından, mühendislik bölümünde bulunmayanları listelemek.

(Satış için bol_no 1, mühendislik için bol_no 2 olduğunu varsayalım.)
                SELECT * FROM

                       (SELECT ad FROM Personel

                 WHERE bol_no=1

                 EXCEPT

                 SELECT ad FROM Personel

                 WHERE bol_no=2)

Select Komutu İçinde Intersect Sözcüğü


     İki tablo arasında küme kesişimi (intersection) işlemini gerçekleştirir.

     Tablo 1  Tablo 2

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

     şeklinde ise;
 

     TABLO 1 INTERSECT TABLO 2 işlemi sonucunda

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

tablosu elde edilecektir. (Küme kesişimi işleminde, her iki kümede mevcut olan müşterek elemanlar alınır.)

Örnek: Hem Ankara’daki hem de İstanbul’daki projelerde görev alan bölümleri listelemek.
          SELECT * FROM

                 (SELECT bl_no FROM Proje

           WHERE yer LIKE &#8216;%Ankara%&#8217;

           INTERSECT

           SELECT bl_no FROM Proje

           WHERE yer LIKE &#8216;%İstanbul%&#8217;);

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

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

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

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

işlemi sonucunda
 
Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı
 

tablosu elde edilecektir.


Bir Select Komutunun Sonucunu Ayrı Bir Tablo Olarak Saklamak


Bir SELECT komutunun sonucu olarak elde edilecek bilgileri, geçici bir tablo olarak saklamak mümkündür. Bunu gerçekleştirebilmek için, SELECT komutunun sonuna SAVE TO TEMP Tabloadı şeklinde bir ifade eklemek gerekmektedir.

Örnek: Bayan personeli Bayan adlı bir tablo içinde saklamak.
            SELECT *

            FROM Personel

            WHERE cinsiyet=.F. SAVE TO TEMP Bayan;
 

cinsiyeti belirleyen cinsiyet alanında .F. simgesinin bayanları temsil ettiği varsayımı ile, personel adlı tablodaki bayan personel bayan adlı tabloya geçici olarak saklanacaktır.

Bayan adlı tabloya, SELECT komutu, bütün şekilleri ile uygulanabilir. Örneğin, bayanlar içinde maaşı 10000000 TL’den fazla olanlar listelenmek istenirse
      SELECT *

      FROM Bayan

      WHERE maas>10000000;
 

ifadesi kullanılır.

Burada üretilen tablonun geçici değil kalıcı olması istenirse KEEP sözcüğü eklenmelidir:
     SELECT *

      FROM Personel

      WHERE cinsiyet=.F.

      SAVE TO TEMP Bayan KEEP;
 
Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...