-
Notifications
You must be signed in to change notification settings - Fork 0
/
SQL(Kütüphane, Aggregate Function).sql
306 lines (213 loc) · 9.05 KB
/
SQL(Kütüphane, Aggregate Function).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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
--Öncelikle hangi veritabıı ile çalışacaksan onu belirtmemiz gerekiyor
use kutuphaneyeni
-- ogrenci tablosundan bütün verilerini Read edelim
select * from ogrenci -- buradaki kod da ogrenci tablosuna sorgu attığımızı belirtiyoruz. Ayrıca "*" sembolü bütün sütunlar anlamına gelmektedir.
--Employees tablosundan ogrno, ad, soyad, cinsiyet ,sınıf sütunlarını okuyalım--
select ogrno,
ad,
soyad,
cinsiyet,
sinif
from ogrenci
--Kitap tablosundan kitapno, ad, yazarno ve puan alanlarını getirelim.
select kitapno,
ad,
yazarno,
puan
from kitap
--ogrenci tablosundan ad, soyad bilgilerini getirin. Lakin dönen sonuç kümesinde ki sütun isimlerini birlşetirip isimledirelim olarak isimlen--
/*İsim vermek istediğin tek kelime ise '[]' kulanılmasına gerek olmaz ayrıca SPACE operatörüde kullanılabilir.*/
select (ad +' '+ soyad) as [Full Name], /* Şayet isimlendirmemiz 2 kelimeden oluşuyorsa "[]" içerisine yazmamız gerekmektedir.*/
cinsiyet,
sinif
from ogrenci
--İşlem tablosundan işlemno , öğrencino, kitapno,alış ve veriş tarihlerini isimlerde düzenleme yaparak getirelim--
select islemno as [transaction number],
ogrno as [student number],
kitapno as [Book Number],
atarih as [purchase date],
vtarih as [date of issue]
from islem
--Where => Sorgu sonucunda bize dönen veri kümesi üzerinde filtreleme yapmak istediğimizde kullanacağımız yapıdır.İstediğimiz şarta uygun olmayan verileri eler.
--Puanı 70 den büyük olan öğrencileri getirelim
select ogrno as Number,
ad as [First Name],
soyad as [LastName],
puan
from ogrenci
where puan > 70
-- Cinsiyeti Kız Olan öğrencileri getirelim
select ogrno as Number,
ad as [First Name],
soyad as [LastName],
puan,
cinsiyet
from ogrenci
where cinsiyet = 'K'
--Puanı 50 ile 70 arası erkek öğrencileri READ edelim
--Between iki değer arasında ki verileri ayıklar
select ogrno,
ad,
soyad,
puan
from ogrenci
where (cinsiyet = 'E')
and
(puan between 50 and 70)
/*Not: "and" , "or" anahtar sözcükleri where sorguları ile sıklıkla kullanılmaktadır. "and" bir aralık kontrolü yapmak için tercih edilirken,
"or" şartlarden herhangi birine bakar. Örneğin yaşı 60 yada 50 olan kullanıcılar gibi. "and" ise yaşı 60 ile 50 arasında olanları getirir*/
/*ogrenci tablosundan notu 18 yada 25 olan öğrencielri getirin*/
select ogrno as [No],
(ad +' '+ soyad) as Öğrenci,
cinsiyet,
puan
from ogrenci
where puan between 18 and 25
/*In Operatörü=> birden fazla "or" yazacağımız zaman tercih ettiğimiz yapıdır.*/
--Puanı 39 yada 17 yada 13 olan öğrencileri listeleyiniz
select *
from ogrenci
where puan = 13 or puan = 17 or puan = 39
select *
from ogrenci
where puan in (13,17,39)
select * from islem
--İşlem tablosundaki öğrencilerin alış ve veriş tarihlerini çıkartım kaç gün ödünç alınmış getirelim
--Not: işlem tablosunda alış ve veriş tarihleri bilgisi 1948-12-08 şekilnde tutulmuş. Buradan yıl bilgisini söküp almak için SQL içerisinde gömül olarak bulunan (built-in) Year() fonksiyonunu kullanacağız.
--DateDiff() => Zaman hesaplarken kullanabileceğimiz bir built-in methodtur. İlk tarihi ikinci tarihin farkını alır. İlk başta yazdığımız değer Cinsine göre verir(DD Gün , MM Ay, YY Yıl)
select *,
YEAR(atarih) as [Alış Tarihi],
YEAR(vtarih) as [Veriş Tarihi],
DATEDIFF("DD",atarih,vtarih) as [Ödünç_Alma_Süresi]
from islem
select GETDATE() -- System saatini yani bize anı teslim eder.
--Order By
--Sorgu sonucunda bizlere dönen veri kümesi üzerinde sıralma işlemi yapmak istiyorsak
--kullanacağımız yapıdır. Order By deyiminin iki faklı yapısı vardır. Bunlardan birincisi
--ascending (asc) yani verilen değere göre azdan çoka yada a'dan z'ye sıralar. Diğer bir
--sıralama ölçütü ise descending (desc), verilen değere göre çoktan aza yada z'den a'ya sıralama yapar.
--Puanı 85'den büyük olan Öğrencileri, Puan bilgisine göre yüksekten aza sıralayalım.
select ogrno,
ad,
soyad,
puan
from ogrenci
Where puan > 85
Order by puan desc
--Puanı 75'den küçük olan ERKEK öğrencileri isimlerine göre A'DAN Z'YE sıralayalım--
select ogrno,
ad,
soyad,
puan
from ogrenci
WHERE
(puan < 75)
AND
(cinsiyet = 'E')
Order BY ad ASC
-- Notu en düşük olan öğrenciyi bulalım
select Top 1 ogrno,
ad,
soyad,
puan
from ogrenci
Order By puan ASC --Not: Order by ile asc kullanmaya gerek yoktur. Çünkü order by deyiminin varsayılan (default) değeri "asc"dir.
--Not: Sonuç kümesi üzerinde istediğmiz kadar satırı dönmek için TOP yapısını kullanıypruz. Yani TOP 1 dersem sonuç kümeisindeki birinci satırı, TOP 5 dersem sonuç kümesindeki ilk 5 satırı bana döner.
--Like Operatörü
--Sözel ifadeler üzerinde belirli bir harf kontrolleri yapamk için kullandığımız bir yapıdır.
--Lakin bu kontrolleri yaparken bazı özel karakterlere ihtiyaç duyulmaktaıdr.
--Sorgu sonucunda dönen veri kümesi üzeirnde filtreleme yaparkan kullanılmaktadır.
--Adının baş harfi 'A' ile balayan öğrencileri getirin.
select ad,
soyad,
cinsiyet,
puan
from ogrenci
Where ad like 'A%' -- baş harfi kontrol etmek istediğimizde ifadenin sonuna yüzde işareti koyuyoruz
--Öğrenci adının son harfi "N" olan ürünleri listeleyiniz
select ad,
soyad,
cinsiyet,
puan
from ogrenci
where ad like '%N'
--Öğrencilerin isimlerinde "E" harfi geçen Öğrencileri, a'dan z'ye sıralayınız
select ogrno,
ad,
soyad,
cinsiyet,
puan
from ogrenci
Where ad like '%E%'
Order By ad ASC
--Adının baş harfi A, 3.harfi N olan Öğrencileri listeleyiniz
select ogrno,
ad,
soyad,
cinsiyet,
puan
from ogrenci
Where ad like 'A_ş%'
--İçerisinde M harfi olmayan Öğrencileri listeleyiniz
--I.Yol
select * from ogrenci where ad not like '%M%'
--II.Yol
select * from ogrenci where ad like '%[^M]%'
--Aggragete Function
--Sum() => İçerisine parametre olarak verilen değeri satır , satır toplar
select Sum(ogrno) as [Öğrenci no'larının Toplamı] from ogrenci
--Öğrencilerinin yaşlarının toplamı
select
SUM(DATEDIFF("YY", dtarih, GetDate())) as [Total Age]
from ogrenci
--Count() => Sorgu sonucunda dönen veri kümesinin satır sayısını sayar
select COUNT(*) as [Toplam Öğrenci Sayısı] from ogrenci
--İsmi farklı olan Öğrencileri getirelim
select Count(distinct ad)
from ogrenci
--Not: "distinct" anahtar sözcüğü ile count fonksiyonu içeriisnde kullanılan parametredeki sütun içerisinde ki tekrar eden satırları görmezden gelir.
--Uyarı: Count() fonksiyonunu kullanırken çok dikkatli olmalıyız. Şayet Count içerisine vereceğimiz parametrede tekrar eden değerler var ise çok yanlış sonuçlar elde edebiliriz.
--Average() => Ortamayı hesaplar
--Öğrencilerin yaşlarının ortalamasını bulalım
select Avg(DATEDIFF("YY",dtarih, GETDATE())) from ogrenci
--En genç çalışan ve En yaşlı çalışanı bulun
select Min(DATEDIFF("YY",dtarih, GETDATE())) as [En Küçük Öğrenci],
MAX(DATEDIFF("YY",dtarih, GetDate())) as [En Büyük Öğrenci] from ogrenci
--Group By: Sorgu sonucunda dönen veri kümesi üzerinde gruplama işlemleri yapmka için kullanılır.
--Aggregate function kullanıldığında select alaında birdan fazla sütun varsa sorgu sonucunda bu sütunlardan herhangi birine göre gruplama yapmak gerekmektedir.
--Burada ki düşünce mantığımızı şöylede kurabiliriz. Group by kullandığımda verdiğim parametreyi select alanında da kullanmalıyım.
--Her bir Öğrencinin ne kadar Puan aldığını öğrenelim ? (Her Öğrenciyi tutarına göre gruplayınız)
select ogrno,
Sum(puan) as [Not] -- burada aggregate function her bir ÖğrenciNo için çalışacak
from ogrenci
group by ogrno
order by [Not] desc
--Cinsiyeti Erkek olanlar veya yaşı 40'tan büyük olanların, NO, Adı, Soyadı, Doğum Tarihi ve sınıf bilgilerini getirin
select ogrno,
ad,
soyad,
dtarih,
sinif,
(
Cast(YEAR(dtarih) as varchar)
+'.'+
Cast(MONTH(dtarih) as varchar)
+'.'+
Cast(DAY(dtarih) as varchar)
) as [Birth Date]
from ogrenci
where (cinsiyet = 'E') or
(dtarih > 40)
--Having
--Sorgu sonucunda dönen veri kümesi üzerinde Aggreagete Fonksiyonlara bağlı olarak filtreleme işlemlerinde kullanılır.
--Şayet sorguda aggregate function yoksa where kullanılabilinir. Aggregate function sonucunda dönen veri kümesi üzerinde
--filtreleme için where kullanılamaz.
--Hangi Öğrencilerin puan ortalamaları 70 olanları getirelim.
select ogrno,
AVG(puan) as [Ort. Not]
from ogrenci
group by ogrno
having Avg(puan) = 70
order by puan desc
--Not : AVG ilk defa yazmamızın sebebi ilk AVG' yı yazmamızın sebebi puan sutundan ortalama almak istememiz ver işleme girdiği için yeni bir sutun oluşmuş bu sutuna isim vermemiz zorunludur.
--İkinci AVG'yı yazmamızın sebebi having operatörünün filitreleme yapması için böylelikle having işlemden geçmiş yeni oluşmuş sutunumuzu filitreler