Koşullu Sorgulamalar

Transkript

Koşullu Sorgulamalar
8. Hafta Koşullu Sorgulamalar
BPR255 Veritabanı
Yönetim Sistemleri-II
Bu Derste Öğrenecekleriniz:
Koşullu Sorgulamalar
a.
b.
c.
d.
e.
f.
g.
h.
Karşılaştırma operatörleri
Mantıksal operatörlerin kullanımı
BETWEEN (Arasında) operatörü
IS NULL Kullanımı
Küme operatörü (IN)
LIKE operatörü
LIKE ile beraber kullanılan joker karakterler
Alt sorgulamalar ve alt sorgulamalarda kullanılan operatörler (IN, ANY, ALL)
Aşağıdaki tabloda koşul ifadelerinde kullanılan operatörler anlamaları ile beraber listelenmiştir.
()
İşlemleri gruplandırma ve işlem önceliği belirleme
=
Belirtilen değere eşit olanlar
>
Belirtilen değerden büyük olanlar
<
Belirtilen değerden küçük olanlar
!=, <>
Belirtilen değere eşit olmayanlar
>=
Belirtilen değerden büyük veya eşit olanlar
<=
Belirtilen değerden küçük veya eşit olanlar
IN
Bir grup değer içinde olanlar
NOT IN
Bir grup değer içinde olmayanlar
ANY
Verilen bir koşula uygun olarak, bir grup içindeki değerlerden birini belirler
ALL
Verilen bir değeri bir liste içindeki tüm değerlerle karşılaştırır.
BETWEEN x AND y x ve y değeri arasındaki değerleri belirler
NOT BETWEEN x
x ve y değeri arasında olmayan değerleri belirler. Yani x’den küçük, y’den
AND y
büyük değerler.
IS NULL
Null (yokluk) değerine sahip olanları tanımlar
IS NOT NULL
Null değerine sahip olmayanları tanımlar
LIKE
Belirli bir kalıba uygun olan bilgileri tanımlar
Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.
CREATE TABLE ÇALIŞANLAR
(
NUMARA
INT
ADI
VARCHAR(25)
SOYADI
VARCHAR(25)
CINSIYET
VARCHAR(5)
[DOĞUM TARİHİ] SMALLDATETIME
MEMLEKET
VARCHAR(25)
MAAŞ
SMALLMONEY
TELEFON
VARCHAR(16)
MAIL
VARCHAR(255)
CONSTRAINT
PRIMARY KEY
,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NULL,
NULL,
CHK_CINS CHECK(CINSIYET IN ('BAY', 'BAYAN')),
)
1
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi
8. Hafta Koşullu Sorgulamalar
BPR255 Veritabanı
Yönetim Sistemleri-II
Koşul İfadeleri
Bir tablodan koşullu bir sorgulama yapılacağı zaman WHERE anahtar sözcüğü kullanılır.
SELECT
FROM
WHERE
alan1,alan2,[,…n]
tablo_adı
koşul_ifadesi
-- sorgulanmak istenen alanlar
-- kaynak tablo ismi
-- koşul ifadesi
Aşağıdaki sorgulamada çalışanlar tablosundan numarası 123 olan çalışan getirilecektir.
SELECT
FROM
WHERE
ADI, SOYADI
ÇALIŞANLAR
NUMARA = 123
-- sorgulanmak istenen alanlar
-- kaynak tablo ismi
-- koşul ifadesi
Yukarıdaki sorgulama ifadesine dikkat edilirse koşul ifadesinde = kullanılmış. Bu; sorgulama koşul
ifadesinde belirtilen alanın belirtilen değere eşit olma koşulunun sağlandığı kayıtları getirir. Bunun
gibi aşağıdaki karşılaştırma ifadeleri koşul ifadelerinde kullanılabilir.
a- SQL Karşılaştırma Operatörleri (=, >, <, >=, <=, !=, <>)
Aşağıdaki sorgulamada doğum tarihi ’01-01-1990’ dan büyük olan çalışanların adı ve soyadı
getirilecektir.
SELECT
FROM
WHERE
ADI, SOYADI
ÇALIŞANLAR
[DOĞUM TARİHİ] > '01-01-1990'
Aşağıdaki sorgulamada maaşı 1200 den küçük ve eşit olan çalışanların adı, soyadı ve memleketleri
listelenecektir.
SELECT
FROM
WHERE
ADI, SOYADI, MEMLEKET
ÇALIŞANLAR
MAAŞ <= 1200
Aşağıdaki sorgulamada memleketi Bartın olmayan çalışanlar listelenecektir.
SELECT
FROM
WHERE
ADI, SOYADI, MEMLEKET
ÇALIŞANLAR
MEMLEKET != 'BARTIN'
SELECT
FROM
WHERE
ADI, SOYADI, MEMLEKET
ÇALIŞANLAR
MEMLEKET <> 'BARTIN'
b- Mantıksal Operatörlerin Kullanımı (AND, OR)
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI = 'ALİ' AND MEMLEKET = 'BARTIN'
Yukarıdaki sorgulamada adı ali olup memleketi Bartın olan çalışanlar listelenecektir.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI = 'ALİ' OR MEMLEKET = 'BARTIN'
Yukarıdaki sorgulamada adı ali olan veya memleketi Bartın olan çalışanlar listelenecektir.
2
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi
8. Hafta Koşullu Sorgulamalar
SELECT
FROM
WHERE
BPR255 Veritabanı
Yönetim Sistemleri-II
*
ÇALIŞANLAR
(ADI = 'ALİ' AND MEMLEKET = 'BARTIN')
OR (ADI = 'VELİ' AND MEMLEKET = 'KARABÜK')
Yukarıdaki sorgulamada adı ali olup memleketi Bartın olanlar veya adı veli olup memleketi Karabük
olan çalışanlar listelenecektir.
c- BETWEEN AND kullanımı
Belirtilen aralıklardaki kayıtları getirir. Örneğin aşağıdaki sorgulama sonucunda maaşı 1200 ile 1500
arası olan çalışanların tüm bilgileri listelenecektir. Burada 1200 ve 1500 dahil değerler olacaktır.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MAAŞ BETWEEN 1200 AND 1500
İstersek NOT ile beraber kullanarak belirtilen aralığın dışında kalan kayıtları sorgulayabiliriz.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MAAŞ NOT BETWEEN 1200 AND 1500
BETWEEN AND kullanımı genellikle sayısal değerler ile veya tarih veri tipleri ile beraber kullanılır.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
[DOĞUM TARİHİ] BETWEEN '01-01-1980' AND '01-01-1990'
Burada çalışanlar tablosundan doğum tarihi belirtilen aralıkta olanlar listelenecektir.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
[DOĞUM TARİHİ] NOT BETWEEN '01-01-1980' AND '01-01-1990'
Burada çalışanlar tablosundan doğum tarihi belirtilen aralıkların dışında olanlar listelenecektir. Yani
01-01-1980 den önce doğmuşlar ile 01-01-1990 tarihinden sonra doğmuşlar listelenecektir.
d- IS NULL kullanımı
Belirtilen alanların NULL olanlarını seçmek için kullanılır.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
TELEFON IS NULL
Bu sorgulama ile telefon alanı NULL olan çalışanlar getirilecektir. NULL olmayanlar sorgulanmak
istenirse IS NOT NULL kullanılır.
SELECT
FROM
WHERE
3
*
ÇALIŞANLAR
TELEFON IS NOT NULL
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi
8. Hafta Koşullu Sorgulamalar
BPR255 Veritabanı
Yönetim Sistemleri-II
Aşağıdaki sorgulama sonucunda ise hem telefon alanı hem de mail alanı NULL olanlar listelenecektir.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
TELEFON IS
NULL AND MAIL IS NULL
e- SQL Küme Operatörü (IN)
Alanın belirtilen kümede olanlarına göre sorgulama yapar.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MEMLEKET IN ('BARTIN', 'KARABÜK', 'ZONGULDAK')
Çalışanlar tablosundan Memleketi Bartın, Karabük veya Zonguldak olanları listeler. Not ile beraber
kullanılırsa işlemi tersine çevirir. Örneğin aşağıdaki sorgulama sonucunda memleketi Bartın, Karabük
veya Zonguldak olmayanları listeleyecektir.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MEMLEKET NOT IN ('BARTIN', 'KARABÜK', 'ZONGULDAK')
f- LIKE kullanımı
Belirli bir kalıba uygun olan bilgileri seçmek için kullanılır.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI LIKE 'AL%'
Yukarıdaki sorgulama sonucunda ismi AL ile başlayan kayıtları listeleyecektir. Aşağıdaki sorgulama
sonucunda ise çalışanlar tablosundan mail adresi ‘@mail.com’ olan ları listeleyecektir.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MAIL LIKE '%@mail.com'
Burada % işareti herhangi bir yazı anlamına geliyor.
g- LIKE ile kullanılan joker karakterler ve anlamları ( % , _ , [ ] , [^ ] )
%: Herhangi bir yazı yerine geçer. Aşağıdaki sorgulamayı kontrol edin;
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI LIKE '%ALİ%'
Bu sorgulamaya göre isminin her hangi bir yerinde ali geçen tüm kayıtlar seçilir. Ali, Alim, Mehmet Ali,
Ali Can, Vali, Halim, Halime, Salih, Salihe … kelimeleri bu koşulu sağlar.
4
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi
8. Hafta Koşullu Sorgulamalar
BPR255 Veritabanı
Yönetim Sistemleri-II
LIKE anahtar sözcüğünden önce NOT kullanılırsa işlemi tersine çevirir. Aşağıdaki örneği kontrol edin:
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI NOT LIKE '%ALİ%'
Bu sorgulama sonucunda isminin herhangi bir yerinde Ali geçmeyen çalışan bilgileri listelenecektir.
_ (Alt çizgi): Bir tek karakter yerine geçer.
SELECT
FROM
WHERE
*
BÖLÜMLER
[BÖLÜM KODU] LIKE 'BPR_'
Yukarıdaki sorgulama sonucunda bölüm kodu BPR ile başlayıp dördüncü karakterin herhangi bir şey
olabilen sonuçlar getirilecektir. Eğer tablomuzda BPR1 ve BPR2 varsa ikisi de listelenecektir.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI LIKE '__san'
Burada da ilk iki harf önemli değil gerisi san ile biten isimler listelenecektir. Örneğin Hasan, İhsan gibi
isimler bu şartı sağlar.
[ ] : Belirtilen alan veya kümeden bir tek karakter seçerek yerine koyar. [a-f] denilince seçilecek
karakter a,b,c,d,e,f harflerinden biri olacak. [abcdefk] denilince de belirtilen harflerden biri olacak.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
SOYADI LIKE 'Meli[h-s]'
Yukarıdaki sorgulama sonucunda soyadı “Meli” ile başlayıp son harfi h-s aralığında olan çalışan
bilgileri listelenecektir. Örneğin Melih, Melik, Melis gibi kelimeler bu koşulu sağlıyor.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI LIKE 'Şey[dmz]a'
Yukarıdaki sorgulama sonucunda ise ismi Şeyda, veya Şeyma veya Şeyza olan çalışanların bilgileri
listelenecektir. Yani ilk üç harf “şey”, dördüncü harf “d”, “m” veya “z” harflerinden biri ve beşinci harf
“a” olan kayıtlar listelenecektir.
[ ^] : Belirtilen karakterlerden veya karakter kümesinden olmayacak şekilde bir tek harf yerine
kullanılır. [^a-f] veya [^abcdef] denince belirtilen karakter a,b,c,d,e,f harflerinden biri olmayacak.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
ADI LIKE 'Fe[^r]%'
Yukarıdaki sorgulama sonucunda ismi “Fe” ile başlayan, üçüncü harfi “r” olmayan gerisi önemli
olmayan çalışan bilgileri listelenecektir. Örneğin Ferit, Ferhat, Ferhan gibi isimler listelenemeyecek,
ancak Feyzi, Fevzi, Fehmi gibi isimler listelenecektir.
5
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi
8. Hafta Koşullu Sorgulamalar
SELECT
FROM
WHERE
BPR255 Veritabanı
Yönetim Sistemleri-II
*
ÇALIŞANLAR
SOYADI LIKE 'de[^a-c]%'
Yukarıdaki sorgulama sonucunda soyadı “de” ile başlayan ancak üçüncü harfi a,b,c harflerinden biri
olmayan çalışanları listeleyecektir.
Not: %, _ (alt çizgi), ve [ ] (köşeli parantez)in özel anlamları olduğu için yazı içinde özellikle onları
kullanmak için aşağıda verilen örneklerdeki gibi yöntemler uygulanır.
Sembol
LIKE '5[%]'
LIKE '[_]n'
LIKE '[a-cdf]'
LIKE '[-acdf]'
Anlamı
5%
_n
a, b, c, d, or f
-, a, c, d, or f
Sembol
LIKE '[[]'
LIKE ']'
LIKE 'abc[_]d%'
LIKE 'abc[def]'
Anlamı
[
]
abc_d , abc_de
abcd, abce, abcf
h- Alt Sorgulamalar ve alt sorgulamalarda IN, ANY, ALL kullanımı
Aşağıdaki sorgulamayı kontrol ediniz. Bu tür sorgulamalara alt sorgulama denir.
SELECT
FROM
WHERE
*
ÖĞRENCİLER
[BÖLÜM KODU] =( SELECT [BÖLÜM KODU]
FROM
BÖLÜMLER
WHERE [BÖLÜM ADI] = 'Bilgisayar Programcılığı')
Burada öğrenciler tablosundan bilgisayar programcılığı bölümünde okuyan tüm öğrenciler
listelenecektir. Bölüm kodunun ne olacağı öncelikle bölümler tablosundan sorgulanıyor, daha sonra
da öğrenciler tablosundan bölüm kodu bu bölüm kodu ile eşleşen tüm öğrenciler listeleniyor.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MAAŞ
>
(
SELECT
FROM
AVG(MAAŞ)
ÇALIŞANLAR )
Yukarıdaki sorgulamada da alt sorgulama ile önce çalışanların ortalama maaşları sorgulanıyor, daha
sonra da dış sorgulama ile ortalama maaştan daha fazla maaş alan çalışan bilgileri listeleniyor.
Eğer alt sorgulama sonucunda sadece bir tek sonuç oluşacaksa, (örneğin ortalama maaş gibi) bu
durumda normal karşılaştırma operatörleri kullanılabilir.
Ancak eğer alt sorgulama sonucunda birden fazla sonuç oluşacaksa bu durumda IN, ANY, ALL anahtar
sözcükleri ile beraber alt sorgulamalar kullanılır.
6
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi
8. Hafta Koşullu Sorgulamalar
BPR255 Veritabanı
Yönetim Sistemleri-II
Örneğin:
SELECT
FROM
WHERE
*
MÜŞTERİLER
MEMLEKET IN (
SELECT
FROM
WHERE
MEMLEKET
ÇALIŞANLAR
ADI = 'ALİ' OR ADI = 'VELİ')
Burada iç sorgulamada adı ali veya veli olan çalışanların memleketleri listelenecek, dış sorgulamada
da müşterilerden memleketleri ali veya veli ile aynı olan tüm müşteri bilgileri listelenecek.
Bu sorguyu ANY anahtar sözcüğünü kullanarak ta aşağıdaki gibi yapabiliriz.
SELECT
FROM
WHERE
*
MÜŞTERİLER
MEMLEKET = ANY ( SELECT
FROM
WHERE
MEMLEKET
ÇALIŞANLAR
ADI = 'ALİ' OR ADI = 'VELİ')
Burda önce içteki sorgulama ile ismi ali veya veli olanların memleketleri listelenecek, daha sonra dış
sorgulama ile memleketleri bu ikisinden herhangi birine eşit olan müşteriler listelenecktir.
Any ile listenin herhangi birine eşit, herhangi birinden büyük, veya herhengi birinden küçük gibi
işlemler de yapılabilir. Aşağıdaki örnekleri kontrol ediniz.
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MAAŞ
>= ANY ( SELECT
FROM
WHERE
MAAŞ
ÇALIŞANLAR
ADI = 'ALİ' OR ADI = 'VELİ')
Burada çalışanlardan ismi ali veya veli olanların maaşına eşit veya daha fazla olan çalışan bilgileri
listelenecektir.
Eğer alt sorgulama sonucunda oluşacak listede birden fazla sonuç olacaksa ve örneğin dış sorgu
sonucu istenecek kayıtların bu listenin tüm değerlerinden büyük veya küçük olması isteniyorsa ALL
anahtar sözcüğü ile bu işlem yapılabilir. Aşağıdaki örneği kontrol ediniz:
SELECT
FROM
WHERE
*
ÇALIŞANLAR
MAAŞ
> ALL ( SELECT
FROM
WHERE
MAAŞ
ÇALIŞANLAR
ADI = 'ALİ' OR ADI = 'VELİ')
Burada adı Ali veya Veli olan çalışanlardan daha fazla (ikisinden de daha fazla) maaş alan çalışanlar
listelenecektir.
7
Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi

Benzer belgeler