-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path24102022-SELECT SORGULAR DB.sql
311 lines (233 loc) · 8.16 KB
/
24102022-SELECT SORGULAR DB.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
307
308
309
310
311
--SELECT kolon1,kolon2... FROM tabloadi
--SELECT * FROM tabloadi
USE NORTHWND
GO
-- ÜRÜN İSİMLERİ VE BİRİM FİYATLARI
SELECT ProductName,UnitPrice FROM Products
-- ÜRÜN TABLOSUNDAKİ TÜM VERİLER
SELECT * FROM Products
-- MÜŞTERİ TİTLE VE İSİM BİLGİSİ TEK KOLONDA
-- ARADA BOŞLUK YOK
SELECT ContactTitle+ContactName
FROM Customers
-- MÜŞTERİ TİTLE VE İSİM BİLGİSİ TEK KOLONDA
-- ARADA BOŞLUK VAR
SELECT ContactTitle+' '+ContactName AS MUSTERI
FROM Customers
SELECT ContactTitle+' '+ContactName AS 'MUSTERI'
FROM Customers
SELECT ContactTitle+' '+ContactName'MUSTERI'
FROM Customers
-- STOK ADEDİ 25 ALTINDA OLAN ÜRÜNLER
select * from Products
where UnitsInStock<25
-- stok adedi 25 ten büyük ve 40 tan küçük olan ürünler
select * from Products where UnitsInStock>25 and UnitsInStock<40
-- stok adedi 25 ile 40 arasında olan ürünler
-- 40 ve 25 e eşit olanlarıda getiriyor.
select * from Products where UnitsInStock between 25 and 40
-- between olmadan aynı sonuç
select * from Products
where UnitsInStock>25 and UnitsInStock<40
-- patron dedi ki;
-- hangi müşteri hangi şehirde
select CompanyName,City from Customers
-- hangi şehirlerde müşterilerimiz var
-- şehirleri tekilleştirmemiz lazım. distinct kullandık. Londro 4 kere gelmiş.Tek gelsin
select distinct City from Customers
-- burda city i tekilleştirdik ama şirket adı birden fazla tekrar ettiği için distinct in anlamı kalmıyor
select distinct City,CompanyName from Customers
-- ***** NOT => distinct kullanıyorsak yanına yazacağımız kolonlar gruplandırılmış olmalı
-- o şehirde kaç müşteri var gibi
-- london şehrinde hangi müşterilerimiz var
select CompanyName,City from Customers where City='london'
-- Stok değeri 10 a eşit veya küçük olan ürünler
select ProductName
from Products
--where UnitsInStock<10
where UnitsInStock<10 or UnitsInStock=10
-- berlin ve london da bulunan müşteriler
select CompanyName,City
from Customers
where City='berlin' or City='london'
-- aynı sonuç
select CompanyName,City
from Customers
where City in('london','berlin')
-- ürün adı cha ile BAŞLIYOR.sonrasından emin değilim.olabilirde olmayailirde
select * from Products where ProductName like 'cha%'
-- sonu syrup ile biten
select * from Products where ProductName like '%syrup'
-- ürün adı içerisinde arıycam.başında-sonunda-ortasında
select * from Products where ProductName like '%anton%'
-- cha olduğunu biliyorum ama ondan sonra 1 karakter daha var ama onun ne olduğunu bilmiyorum
-- çizgi başta sonra ortada da kullanılabilir
select * from Products where ProductName like 'cha_'
-- ürün adı m ile başlar u ile biter. arada kaç karakter olduğu bilinmiyor
select * from Products where ProductName like 'm%u'
-- mexico da olmayan müşteriler
select *
from Customers
where Country!='mexico'
-- ikinci kullanım
select *
from Customers
where not Country='mexico'
-- mexico da olmayan müşterileri contry alanına göre
-- alfabetik sırada
select Country,City,ContactName
from Customers
where not Country='mexico'
order by Country --asc
-- mexico da olmayan müşterileri contry ve sıralama içinde city alanına göre
-- alfabetik sırada
select Country,City,ContactName
from Customers
where not Country='mexico'
order by Country,City
-- mexico da olmayan müşterileri contry a-z ve sıralama içinde city z-a alanına göre
-- alfabetik sırada
select Country,City,ContactName
from Customers
where not Country='mexico'
order by Country asc,City desc
-- birim fiyatı en az olan ürün
select top 1 ProductName,UnitPrice
from Products
order by UnitPrice asc
-- aggregate function
-- en düşük birim fiyat
select min(UnitPrice) as 'En Ucuz'
from Products
-- en yüksek birim fiyat
select max(UnitPrice) as 'En Pahalı'
from Products
-- stokta toplam kaç adet ürün var
select sum(UnitsInStock) 'Toplam Stok Adedi' from Products
-- ürünlerimizin ortalama satış fiyatı
select avg(UnitPrice) 'Ortalama Satış Fiyatı' from Products
-- kaç kalem ürünümüz var
select count(ProductID) from Products
-- kaç müşterimiz var
select count(CustomerID) from Customers
-- kaç müşterinin fax numarası var
select count(Fax) from Customers
-- GROUP BY
-- hangi ülkeden kaç müşterim var
select Country,count(CustomerId) 'Müşteri Sayısı'
from Customers
group by Country -- veri setimi kümele =>country a lanıma göre
use TestDB2410
go
--CREATE TABLE Personel
-- (
-- Id INT PRIMARY KEY IDENTITY(1,1),
-- Ad NVARCHAR(50) NOT NULL,
-- Soyad NVARCHAR(50) NOT NULL,
-- Yas TINYINT NOT NULL,
-- Cinsiyet BIT NOT NULL,--0 1
-- Sehir NVARCHAR(50) NOT NULL,
-- Ulke NVARCHAR(50) NOT NULL,
-- Maas DECIMAL(9,2) NOT NULL--1234567,89
-- )
-- GO
-- INSERT INTO Personel VALUES
-- ('Ahmet','Yılmaz',20,1,'Ankara','Türkiye',2000),
-- ('Mehmet','Efe',22,1,'Bolu','Türkiye',2000),
-- ('Ayşe','Can',23,0,'İstanbul','Türkiye',3500),
-- ('Fatma','Ak',35,0,'Ankara','Türkiye',3200),
-- ('John','Smith',45,1,'New York','USA',3500),
-- ('Ellen','Smith',40,0,'New York','USA',3500),
-- ('Hans','Müller',30,1,'Berlin','Almanya',4000),
-- ('Frank','Cesanne',35,1,'Paris','Fransa',3700),
-- ('Abbas','Demir',26,1,'Adana','Türkiye',2000),
-- ('Hatice','Topçu',26,0,'Hatay','Türkiye',2200),
-- ('Gülsüm','Demir',35,0,'Adana','Türkiye',2000)
-- GO
-- ülkelere göre ortalama maaşlar
select Ulke,avg(maas) 'Ortalama Maaş'
from Personel
group by ulke
-- hangi ülkede kaç çalışan var
select Ulke,Count(Id) 'Personel Sayısı'
from Personel
group by Ulke
-- cinsiyete göre maaş ortalaması
select Cinsiyet,avg(maas) 'Ortalama Maaş'
from Personel
group by Cinsiyet
-- hangi ülkenin hangi şehrinde kaç personelim var
select Ulke,Sehir,count(Id) 'Personel Sayısı'
from Personel
group by Ulke,Sehir
-- her ülke için maaşı 2000 den
-- büyük kadın ve erkek çalışanların yaş ortalaması ve personel sayısı
select Ulke,Cinsiyet,avg(Yas) 'Yaş Otalaması',count(Id) 'Personel Sayısı'
from Personel
where maas>2000
group by Ulke,Cinsiyet
-- her ülke için maaşı 2000 den büyük ve yaş ortalaması 30 dan büyük
-- kadın ve erkek çalışanların yaş ortalaması ve sayısı nedir
select Ulke,Cinsiyet,avg(Yas) 'Yaş Ortalaması',count(Id) 'Personel Sayısı'
from Personel
where maas>2000
group by Ulke,Cinsiyet
having avg(Yas)>30
go
use NORTHWND
go
/*
iki yada daha fazla SELECT ifadesi sonuç kümesini birleştirmek için kullanırız
UNION içerisinde her select deyimi aynı sayıda sütuna sahip olmalıdır
Sütunlar da benzer veri türlerine sahip olmalıdır.
her SELECT ifadesindeki sütunlarda aynı sırada olmalıdır.
*/
select CompanyName,ContactName,Fax
from Customers
union
select CompanyName,ContactName,Fax
from Suppliers
------- SUBQUERY
-- almanyadan tedarik edilen ürünlerin isimleri
--select ProductName from Products where SupplierID in(11,12,13)
--select * from Suppliers
select ProductName
from Products
where SupplierID in(select SupplierID from Suppliers where Country='Germany')
------ EXISTS
/* BİR ALT SORGUDAKİ HERHANGİ BİR KAYDIN VARLIĞINI TEST ETMEK İÇİN KULLANILIR
exist; alt sorgu bir veya daha fazla kayıt dönerse TRUE,
hiç kayıt dönmez ise FALSE döner
*/
select ContactName
from Suppliers
where exists (select ProductName
from Products
where Products.SupplierID=Suppliers.SupplierID
and UnitPrice<20)
--ANY
/*
Orderdetails tablosundan Quantity değeri 10 a eşit olan ürünlerin
listesi
*/
select ProductName
from Products
where ProductID= any (select ProductId from [Order Details] where Quantity=10)
/*
Orderdetails tablosundan Quantity değeri 10 a eşit olan ürünlerin
listesi
(Quantity sütununda bazı değerler 99 olduğunda bu false sonucunu döndürür)
*/
select ProductName
from Products
where ProductID= any (select ProductId from [Order Details] where Quantity=99)
-- ALL Operatörü
/*
All operatörü sonuç olarak boolen (true/false) değer döner
All alt sorgu değerleri koşulu karşılıyor ise TRUE, değilse FALSE döner
SELECT,WHERE,HAVING ifadeleri ile kullanılablir
ALL koşulun yalnızca aralıktaki tüm değer için işlem doğru ise true olacağı anlamını getirir.
*/
select ProductName
from Products
where ProductID= all (select ProductId from [Order Details] where Quantity=10)