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.
Personel tablosu aşağıdaki gibi olsun:
Yukarıdaki SELECT komutunun çıktısı aşağıdaki tabloda verilmiştir.
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,
ş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.
şeklinde olacak ve tablo aşağıdaki gibi olacaktır.
Personel tablosu
Tablo 1.
Bölüm tablosu
Tablo 2.
ş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.
İç İç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
Proje
Personel
Çalışma
Bu tablolardan yararlanarak aşağıdaki SELECT komutları ile arzu edilen işlem gerçekleştirilebilir:
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
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:
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.
SONUÇ:
çı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.
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:
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.
Bu çözümün eşdeğeri olan ifade ise şöyledir.
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
Yukarıdaki SELECT komutları sonucu (ANY ile ya da eşdeğeri ile)
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
Personel tablosu aşağıdaki verileri içeriyorsa
Personel
Yukarıdaki 1. Alternatif ve 2. Alternatif olarak belirtilen, her iki SELECT komutları grubu da aşağıdaki sonucu verecektir.
SONUÇ:
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
Aşağıdaki sonuç elde edilir:
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)
SONUÇ:
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.
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
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
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 Komutu İçinde Intersect Sözcüğü
İki tablo arasında küme kesişimi (intersection) işlemini gerçekleştirir.
Tablo 1 Tablo 2
şeklinde ise;
TABLO 1 INTERSECT TABLO 2 işlemi sonucunda
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.
Proje tablosundaki bilgi aşağıdaki gibi olsun:
Yukarıdaki SELECT komutu sonucunda bulunan tablolar ile son adımda
işlemi sonucunda
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.
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
ifadesi kullanılır.
Burada üretilen tablonun geçici değil kalıcı olması istenirse KEEP sözcüğü eklenmelidir:
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:
Yukarıdaki SELECT komutunun çıktısı aşağıdaki tabloda verilmiştir.
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.
Bölüm tablosu
Tablo 2.
ş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.
İç İç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
Proje
Personel
Çalışma
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
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:
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Ç:
çı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:
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
Yukarıdaki SELECT komutları sonucu (ANY ile ya da eşdeğeri ile)
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
Yukarıdaki 1. Alternatif ve 2. Alternatif olarak belirtilen, her iki SELECT komutları grubu da aşağıdaki sonucu verecektir.
SONUÇ:
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
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:
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Ç:
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 ‘%İstanbul%’;
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
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
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
şeklinde ise;
TABLO 1 INTERSECT TABLO 2 işlemi sonucunda
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 ‘%Ankara%’
INTERSECT
SELECT bl_no FROM Proje
WHERE yer LIKE ‘%İstanbul%’);
Proje tablosundaki bilgi aşağıdaki gibi olsun:
Yukarıdaki SELECT komutu sonucunda bulunan tablolar ile son adımda
işlemi sonucunda
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