-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHazirFonkKullanimlari.sql
91 lines (52 loc) · 4.43 KB
/
HazirFonkKullanimlari.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use VTDERS21EKIM
-- AS komutu kısaltmalar için takma ad gibi kullanılır.
-- ROUND : Yuvarlama yapıyor.
-- CEILING : Sürekli üst değere yuvarlar.Tam sayı kısmının üstüne.
-- FLOOR : Aşağı yuvarlar.
select ROUND(5,576,1) as ROUND1,
ROUND(5,576,2) as ROUND1,
CEILING(5.576) as CEILING1,
FLOOR(5.576) as FLOOR1;
select count(MAAS) as COUNTMAAS from personel; -- Kaç tane maaş değeri olduğunu yazıyor.
select count(*) as COUNTMAAS from personel; -- Toplam satır sayısı kaç tane ise onu getirir. boş satırları getirmez AMA null değerleri de sayar.
select count(maas) as maassayisi from personel where ulke='ABD'; -- Ülkesi abd olan kaç kişinin maaşı var?
select count(distinct ULKE) as ULKESAYISI from personel; -- Kaç tane farklı ülke olduğunu yazıyor.
select max(yas) as enyasli, min(yas) as engenc from personel; -- En genç ve en yaşlı kişilerin yaşı.
-- En genç ve en yaşlı kişilerin yaşını ve ismini yazdırmak istersek :
select isim, yas as enyasli from personel where yas = (select max(yas) from personel); -- Bu şekilde yazdırıyoruz.
select isim, yas as engenc from personel where yas = (select min(yas) from personel);
-- SUM : Sütundaki değerleri toplar.
select sum(maas) as toplamMaas from personel;
-- AVG : Ortalama hesaplar.
-- GROUP BY : Sonuç kümesini elde ettikten sonra bir veya birden fazla sütuna göre gruplandırma yapmamızı sağlar.
select ulke from personel group by ulke; --ulkelere göre sınıflandırma yaptık. -- Datayı en son tekrar ettiği noktada tabloya yerleştiriyor.
-- Türkiye son sırada olduğu için en son tabloda en sona attı.
select AVG(maas) as UlkelereGoreOrtalamaMaas from personel group by ulke; -- Ülkelere göre ortalama maas
-- ülke ismini de ekleme
select ulke, AVG(maas) as UlkelereGoreOrtalamaMaas from personel group by ulke;
--Cinsiyete göre ortalama maas
select cinsiyet, AVG(maas) as CinsiyeteGoreOrtalamaMaas from personel group by cinsiyet;
-- Group by ile birden fazla alan kullanımı
select ulke, kent from personel group by ulke, kent; -- Önce ülke, sonra kent alanına göre gruplama yaptık.
-- Her bir gruba ait kaç çalışan olduğunu görmek için : COUNT
select count(*) as CalisanSayisi, ulke, kent from personel group by ulke, kent;
select count(*) as CalisanSayisi, kent, ulke from personel group by kent, ulke; -- Hangi sıralamayı yazdığımız önemli !!
select ulke, cinsiyet, AVG(yas), COUNT(*) from personel group by ulke, cinsiyet;
-- Yukarıdaki sorguya maası 2000'den büyük olanları getirmek istersek
select ulke, cinsiyet, AVG(yas), COUNT(*) from personel where maas > 20000 group by ulke, cinsiyet; -- Maaşı 2000'den büyük olan veriler için gruplama ,işlemi gerçekleşecek.
-- HAVING : where ifadesine çok benziyor. Ancak kümeleme fonksiyonları ile where ifadesi kullanılamadığından HAVING ifadesine ihtiyaç vardır.
select kent, count(*) from personel group by kent having count(*) = 1; -- 1 tane olan kentleri getir
-- Maaş ortalaması 3000'den fazla olan ülkelerdeki erkek personellerin maaş ortalaması.
select AVG(maas) as OrtalamaMaas, ulke, cinsiyet from personel group by ulke, cinsiyet having cinsiyet='E' and AVG(maas)>3000; -- Having ile şart belirtiyoruz.
select AVG(maas) as OrtalamaMaas, ulke, cinsiyet from personel where cinsiyet='E' group by ulke, cinsiyet having AVG(maas)>3000; -- Aynı çıktıyı veriyor.Hoca böyle yazdı.
-- Maaşı 2000' e eşit olan veya fazla olan personelleri ülkelerine göre gruplayan ve grubun yaş ortalaması 25 yaşına eşit olan veya daha büyükse
-- bu grupların ülke, ortalama yaş, ortalama maaş ve kişi sayısı bilgilerini getiren sorguyu yazınız.
-- ***** Personellerin dediği için bireysel bakıyoruyz ve where kullanılıyır. ** Ülkeler deseydi genel olacağı için having kullanmamız gerekirdi.
select count(*) as KisiSayisi, ulke, AVG(yas) as OrtalamaYas, AVG(maas) as OrtalamaMaas from personel where maas>=2000 group by ulke having AVG(yas)>=25;
-- Ülke, ortalama için having , personel için bireysel olduğu için where..
-- Personelleri ülkelerine göre gruplayarak ortalama maaşı en büyük olan ülkenin maaş ortalamasını getiren sorguyu yazınız.
select top(1) ulke, avg(maas) as OrtalamaMaas from personel group by ulke order by avg(maas) desc; -- 1.YOL
-- 2. YOL
select max(OrtalamaMaas) as MaxOrtalamaMaas from (select ulke, AVG(maas) as OrtalamaMaas from personel group by ulke) as MAAS;
-- as maas yazmamızın nedeni ara sorguya takma bir ad verme zorunluluğu
-- VIEW : Sanal tablo kısmı.