11 Veri Tabanı-I 12ilhanuysal.com/ders_notlari/veritabani/veri_tabani1... · 2014-11-13 ·...
Transcript of 11 Veri Tabanı-I 12ilhanuysal.com/ders_notlari/veritabani/veri_tabani1... · 2014-11-13 ·...
Veri Tabanı-I 12.Hafta
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
1
İlişkisel sorgular
GROUP BY having
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
2
Gruplayarak listelemek. Gruplama işlemi bir veya birden çok alana göre yapılabilir. Select … from arasında yazılan alanlar mutlaka GROUP BY işlemine girmelidir. Gruplanmış bir alan listede bir kez olur. Having ile gruplanmış alanlar üzerinde koşul verilebilir
SELECT c1,c2,... cn, kümeleme_fonksiyonları( ifade ) FROM tablolar WHERE where_koşulu GROUP BY c1, c2, ... cn HAVING grup_koşulu ORDER BY sıralama_kolonları
kümeleme_fonksiyonları : sum(), max(), min(), avg(), count()
GROUP BY having
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
3
-- her müşterinin yaptığı harcamalar toplamı
SELECT mno, sum(fiyat*adet) as Tutar FROM satış GROUP BY mno
-- stok tablosundaki sayısı 1 den çok olan malların grup halinde stok numarası ve kalan adet toplamı
SELECT sno, sum(adet) as Adedi FROM stok GROUP BY sno Having count(*) >1
-- stoka adına ve son kullanma tarihine göre gruplandırarak listele
SELECT stokadi, sonkultar FROM stok
GROUP BY stokadi, sonlultar ORDER BY sonkultar
-- HATALIDIR
SELECT * FROM stok GROUP BY stokadi
-- stok tablosundaki fiyatı 12 liradan fazla olan malların grup halinde stok numarasına göre gruplu bir şekilde fiyat toplamını listele
SELECT sno, sum(fiyat) FROM stok GROUP BY sno HAVING fiyat>12
GROUP BY having
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
4
-- öğrenci tablosunda her bölümün en yüksek ortalamalar
SELECT bolum, Max( vize*0.2+final*0.8) FROM ogrenci GROUP BY bolum
-- öğrenci tablosunda her bölümün, finali 50 den büyük olanlar içinden en yüksek ortalamalar
SELECT bolum, Max( vize*0.2+final*0.8) FROM ogrenci
WHERE final>50 GROUP BY bolum
-- öğrenci tablosunda her bölümün, finali 50 den büyük olanlar içinden en yüksek ortalamalar
SELECT ulke, sehir FROM ogrenci_bilgi GROUP BY ulke, sehir
İlişkisel sorgular
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
5
SELECT
tablo1.kolon1, tablo1.kolon2, …. , tablo1.kolonN,
tablo2.kolon1, tablo2.kolon2, …. , tablo2.kolonN,
tablo3.kolon1, tablo3.kolon2, …. , tablo3.kolonN,
FROM tablo1, tablo2, tablo3
WHERE tablo1.kolon1 = tablo2.kolon1 AND tablo2.kolon1 = tablo3.kolon1
Tablo1
Kolon1
Kolon2
Kolon3
Tablo2
Kolon1
Kolon2
Kolon3
Tablo3
Kolon1
Kolon2
Kolon3
İlişkisel sorgular
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
6
SELECT
stok.sno, stok.stokadı,
satış.adet AS [Satış Adedi], satış.fiyat AS [Satış Fiyatı],
(satış.adet, * satış.fiyat) as Tutar, satış.tarih AS [Satış Tarihi]
FROM stok, satış WHERE stok.sno = satış.sno
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
sno stokadı Satış adedi Satış fiyatı Tutar Satış Tarihi
İlişkisel sorgular
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
7
SELECT
stok.sno, stok.stokadı,
satış.adet AS [Satış Adedi], satış.fiyat AS [Satış Fiyatı],
(satış.adet, * satış.fiyat) as Tutar, satış.tarih AS [Satış Tarihi]
FROM stok, satış WHERE stok.sno = satış.sno AND stok.sno=101
ORDER BY satış.tarih DESC
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
sno stokadı Satış adedi Satış fiyatı Tutar Satış Tarihi
İlişkisel sorgular
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
8
SELECT
stok.sno, stok.stokadı,
satış.adet AS [Satış Adedi], satış.fiyat AS [Satış Fiyatı],
(satış.adet, * satış.fiyat) as Tutar, satış.tarih AS [Satış Tarihi],
müşteri.adsoy AS [Adı Soyadı]
FROM stok, satış, müşteri WHERE stok.sno = satış.sno AND müşteri.mno=satış.mno
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
sno stokadı Satış adedi Satış fiyatı Tutar Satış Tarihi Adı Soyadı
İlişkisel sorgular
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
9
SELECT
stok.sno, stok.stokadı,
satış.adet AS [Satış Adedi], satış.fiyat AS [Satış Fiyatı],
(satış.adet, * satış.fiyat) as Tutar, satış.tarih AS [Satış Tarihi],
müşteri.adsoy AS [Adı Soyadı]
FROM stok, satış, müşteri WHERE stok.sno = satış.sno AND müşteri.mno=satış.mno
AND satış.tarih between ‘2011-04-01’ AND ‘2011-04-31’ ORDER BY satış.tarih DESC
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
sno stokadı Satış adedi Satış fiyatı Tutar Satış Tarihi Adı Soyadı
İlişkisel sorgular
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
10
SELECT
stok.sno, stok.stokadı,
satış.adet AS [Satış Adedi], satış.fiyat AS [Satış Fiyatı],
(satış.adet, * satış.fiyat) as Tutar, satış.tarih AS [Satış Tarihi]
FROM stok, satış, müşteri WHERE stok.sno = satış.sno AND müşteri.mno=satış.mno
AND satış.tarih between ‘2011-04-01’ AND ‘2011-04-31’ AND müşteri.mno=5
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
sno stokadı Satış adedi Satış fiyatı Tutar Satış Tarihi
Takma AD (Alias)
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
11
SELECT
s.sno, s.stokadı,
st.adet AS [Satış Adedi], st.fiyat AS [Satış Fiyatı],
(st.adet, * st.fiyat) as Tutar, st.tarih AS [Satış Tarihi]
FROM stok s, satış st, müşteri m WHERE s.sno = st.sno AND m.mno=st.mno
AND st.tarih between ‘2011-04-01’ AND ‘2011-04-31’ AND m.mno=5
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
sno stokadı Satış adedi Satış fiyatı Tutar Satış Tarihi
INNER JOIN
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
12
SELECT
tablo1.kolon1, tablo1.kolon2, …. , tablo1.kolonN,
tablo2.kolon1, tablo2.kolon2, …. , tablo2.kolonN,
tablo3.kolon1, tablo3.kolon2, …. , tablo3.kolonN,
FROM tablo1 INNER JOIN tablo2 ON tablo1.kolon1 = tablo2.kolon1
INNER JOIN tablo3 ON tablo2.kolon2 = tablo3.kolon1
Tablo1
Kolon1
Kolon2
Kolon3
Tablo2
Kolon1
Kolon2
Kolon3
Tablo3
Kolon1
Kolon2
Kolon3
En pahalı malı alan müşteri bilgileri
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
13
SELECT m.* FROM stok s INNER JOIN satış st ON s.sno=st.sno
INNER JOIN müşteri m ON m.mno=st.mno
WHERE s.sno in ( select sno from stok WHERE fiyat >= ( select max(fiyat) from stok ) )
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
doğum_tarihi
mno adsoy adres Doğum_tarihi
101 Ali Can Burdur 01.01.1982
102 Mehmet Koç Muğla 06.11.1990
Belirli tarihler arasında günlük satışların tarihini ve tutarını listele
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
14
SELECT st.tarih AS [Satış Tarihi], sum(st.adet + st.fiyat ) as [Toplam Satış] FROM satış st
WHERE st.tarih>=‘2011-04-01’ AND s.tarih<=‘2011-04-30’ GROUP BY st.tarih
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
doğum_tarihi
Satış tarihi Toplam Satış
SELECT st.tarih AS [Satış Tarihi], sum(st.adet + st.fiyat ) as [Toplam Satış] FROM satış st
GROUP BY st.tarih HAVING st.tarih >=‘ 2011-04-01’ AND s.tarih <= ‘2011-04-30’
En çok alışveriş yapan müşteri bilgileri
05
.05
.20
11
M
uh
amm
er İL
KU
ÇA
R, M
AK
Ü-2
01
1 B
UR
DU
R
15
SELECT m.* FROM satış st INNER JOIN müşteri m ON m.mno=st.mno
WHERE st.mno in ( select Top 1 mno from satış gruop by mno having sum(fiyat*adet) >=
(select max(fiyat*adet) from satış )
)
stok
sno (P.K)
stokadı
adet
fiyat
sonkultar
satış
sno(FK)
mno (F.K.)
adet
fiyat
tarih
odenen
muşteri
mno (P.K.)
adsoy
adres
doğum_tarihi
mno adsoy adres Doğum_tarihi
101 Ali Can Burdur 01.01.1982