-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathday6_existsOrderFetch.sql
250 lines (195 loc) · 10.5 KB
/
day6_existsOrderFetch.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
/*=========================== EXISTS, NOT EXIST ================================
EXISTS operatorü bir Boolean operatördür ve true - false değer döndürür.
EXISTS operatorü sıklıkla Subquery'lerde satırların doğruluğunu test etmek
için kullanılır.
Eğer bir subquery (altsorgu) bir satırı döndürürse EXISTS operatörü de TRUE
değer döndürür. Aksi takdirde, FALSE değer döndürecektir.
Özellikle altsorgularda hızlı kontrol işlemi gerçekleştirmek için kullanılır
==============================================================================*/
CREATE TABLE mart_satislar
(
urun_id number(10),
musteri_isim varchar2(50),
urun_isim varchar2(50)
);
CREATE TABLE nisan_satislar
(
urun_id number(10),
musteri_isim varchar2(50),
urun_isim varchar2(50)
);
INSERT INTO mart_satislar VALUES (10, 'Mark', 'Honda');
INSERT INTO mart_satislar VALUES (10, 'Mark', 'Honda');
INSERT INTO mart_satislar VALUES (20, 'John', 'Toyota');
INSERT INTO mart_satislar VALUES (30, 'Amy', 'Ford');
INSERT INTO mart_satislar VALUES (20, 'Mark', 'Toyota');
INSERT INTO mart_satislar VALUES (10, 'Adem', 'Honda');
INSERT INTO mart_satislar VALUES (40, 'John', 'Hyundai');
INSERT INTO mart_satislar VALUES (20, 'Eddie', 'Toyota');
INSERT INTO nisan_satislar VALUES (10, 'Hasan', 'Honda');
INSERT INTO nisan_satislar VALUES (10, 'Kemal', 'Honda');
INSERT INTO nisan_satislar VALUES (20, 'Ayse', 'Toyota');
INSERT INTO nisan_satislar VALUES (50, 'Yasar', 'Volvo');
INSERT INTO nisan_satislar VALUES (20, 'Mine', 'Toyota');
SELECT * FROM mart_satislar;
SELECT * FROM nisan_satislar;
DELETE FROM nisan_satislar;
/* -----------------------------------------------------------------------------
ORNEK1: MART VE NİSAN aylarında aynı URUN_ID ile satılan ürünlerin
URUN_ID’lerini listeleyen ve aynı zamanda bu ürünleri MART ayında alan
MUSTERI_ISIM 'lerini listeleyen bir sorgu yazınız.
-----------------------------------------------------------------------------*/
-- tablolara kısa isim vermek mümkündür. Böylece sorgularımızın daha kısa
-- gözükmesini sağlabiliriz.
-- AS -> bir sutuna kısa isim veriyor.
-- Bir sorgu içerisinde tabloya da kısa isim vermek mümkün.
-- tablo_Adi kısa_isim
SELECT urun_id, musteri_isim FROM mart_satislar
WHERE EXISTS (SELECT urun_id FROM nisan_satislar
WHERE mart_satislar.urun_id = nisan_satislar.urun_id);
-- WHERE urun_id IN(SELECT urun_id FROM nisan_satislar
-- WHERE mart_satislar.urun_id = nisan_satislar.urun_id);
/* -----------------------------------------------------------------------------
ORNEK2: Her iki ayda da satılan ürünlerin URUN_ISIM'lerini ve bu ürünleri
NİSAN ayında satın alan MUSTERI_ISIM'lerini listeleyen bir sorgu yazınız.
-----------------------------------------------------------------------------*/
SELECT urun_isim, musteri_isim FROM nisan_satislar nisan
WHERE EXISTS (SELECT urun_id FROM mart_satislar mart
WHERE mart.urun_isim = nisan.urun_isim);
/* ----------------------------------------------------------------------------
ORNEK3: Her iki ayda da ortak olarak satılmayan ürünlerin URUN_ISIM'lerini
ve bu ürünleri NİSAN ayında satın alan MUSTERI_ISIM'lerini listeleyiniz.
-----------------------------------------------------------------------------*/
SELECT urun_isim, musteri_isim FROM nisan_satislar nisan
WHERE NOT EXISTS (SELECT urun_id FROM mart_satislar mart
WHERE mart.urun_isim = nisan.urun_isim);
/*===================== IS NULL, IS NOT NULL, COALESCE ========================
IS NULL, ve IS NOT NULL BOOLEAN operatörleridir. Bir ifadenin NULL olup
olmadığını kontrol ederler.
COALESCE ise bir fonksiyondur ve içerisindeki parameterelerden NULL olmayan
ilk ifadeyi döndürür. Eğer aldığı tüm ifadeler NULL ise NULL döndürürür.
sutun_adi = COALESCE(ifade1, ifade2, .....ifadeN)
==============================================================================*/
CREATE TABLE insanlar
(
ssn CHAR(9),
isim VARCHAR2(50),
adres VARCHAR2(50)
);
INSERT INTO insanlar VALUES('123456789', 'Ali Can', 'Istanbul');
INSERT INTO insanlar VALUES('234567890', 'Veli Cem', 'Ankara');
INSERT INTO insanlar VALUES('345678901', 'Mine Bulut', 'Izmir');
INSERT INTO insanlar (ssn, adres) VALUES('456789012', 'Bursa');
INSERT INTO insanlar (ssn, adres) VALUES('567890123', 'Denizli');
INSERT INTO insanlar (adres) VALUES('Sakarya');
INSERT INTO insanlar (ssn) VALUES('999111222');
DELETE FROM insanlar;
/* ----------------------------------------------------------------------------
ORNEK1: isim 'i NULL olanları sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM insanlar
WHERE isim IS NULL;
/* ----------------------------------------------------------------------------
ORNEK2: isim 'i NULL olmayanları sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM insanlar
WHERE isim IS NOT NULL;
/* ----------------------------------------------------------------------------
ORNEK3: isim 'i NULL olan kişilerin isim'ine NO NAME atayınız.
-----------------------------------------------------------------------------*/
UPDATE insanlar
SET isim = 'NO NAME'
WHERE isim IS NULL;
/* ----------------------------------------------------------------------------
ORNEK4: isim 'i NULL olanlara 'Henuz isim girilmedi'
adres 'i NULL olanlara 'Henuz adres girilmedi'
ssn 'i NULL olanlara ' no ssn' atayalım.
-----------------------------------------------------------------------------*/
UPDATE insanlar
SET isim = COALESCE (isim, 'Henüz isim girilmedi'),
adres = COALESCE (adres, 'Henüz adres girilmedi'),
ssn= COALESCE (ssn, 'No SSN');
/*================================ ORDER BY ===================================
ORDER BY cümleciği bir SORGU deyimi içerisinde belli bir SUTUN’a göre
SIRALAMA yapmak için kullanılır.
Syntax
-------
ORDER BY sutun_adi ASC -- ARTAN
ORDER BY sutun_adi DESC -- AZALAN
==============================================================================*/
CREATE TABLE kisiler
(
ssn CHAR(9) PRIMARY KEY,
isim VARCHAR2(50),
soyisim VARCHAR2(50),
maas NUMBER,
adres VARCHAR2(50)
);
INSERT INTO kisiler VALUES(123456789, 'Ali','Can', 3000,'Istanbul');
INSERT INTO kisiler VALUES(234567890, 'Veli','Cem', 2890,'Ankara');
INSERT INTO kisiler VALUES(345678901, 'Mine','Bulut',4200,'Ankara');
INSERT INTO kisiler VALUES(256789012, 'Mahmut','Bulut',3150,'Istanbul');
INSERT INTO kisiler VALUES (344678901, 'Mine','Yasa', 5000,'Ankara');
INSERT INTO kisiler VALUES (345458901, 'Veli','Yilmaz',7000,'Istanbul');
SELECT * FROM kisiler;
/* ----------------------------------------------------------------------------
ORNEK1: kisiler tablosunu adres'e göre sıralayarak sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
ORDER BY adres; --- ASC gibi sıradı.
/* ----------------------------------------------------------------------------
ORNEK2: kisiler tablosunu maas'a göre sıralayarak sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
ORDER BY maas;
/* ----------------------------------------------------------------------------
ORNEK3: kisiler tablosunu maas'a göre AZALAN sırada sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
ORDER BY maas DESC; -- Azalan
/* ----------------------------------------------------------------------------
ORNEK4: ismi Mine olanları, SSN'e göre AZALAN sırada sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
WHERE isim = 'Mine'
ORDER BY ssn DESC;
/* ----------------------------------------------------------------------------
ORNEK5: soyismi 'i Bulut olanları isim sıralı olarak sorgulayınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
WHERE soyisim = 'Bulut'
ORDER BY 2; -- isim'e göre sıralanmış
/*====================== FETCH NEXT, OFFSET (12C VE ÜSTÜ) ======================
FETCH cümleciği ile listelenecek kayıtları sınırlandırabiliriz. İstersek
satır sayısına göre istersek de toplam satır sayısının belli bir yüzdesine
göre sınırlandırma koymak mümkündür.
Syntax
---------
FETCH NEXT satir_sayisi ROWS ONLY;
FETCH NEXT satir_yuzdesi PERCENT ROWS ONLY;
OFFSET Cümleciği ile de listenecek olan satırlardan sırasıyla istediğimiz
kadarını atlayabiliriz.
Syntax
----------
OFFSET satır_sayisi ROWS;
==============================================================================*/
/* ----------------------------------------------------------------------------
ORNEK1: MAAŞ'ı en yüksek 3 kişinin bilgilerini listeleyen sorguyu yazınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
ORDER BY maas DESC
FETCH NEXT 3 ROWS ONLY;
/* ----------------------------------------------------------------------------
ORNEK2: MAAŞ'ı en DÜŞÜK 2 kişinin bilgilerini listeleyen sorguyu yazınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
ORDER BY maas ASC
FETCH NEXT 2 ROWS ONLY;
/* ----------------------------------------------------------------------------
ORNEK3: MAAŞ'a göre sıralamada 4. ile 6. kişilerin bilgilerini listeleyen
sorguyu yazınız.
-----------------------------------------------------------------------------*/
SELECT * FROM kisiler
ORDER BY maas DESC
OFFSET 3 ROWS -- ilk 3 kaydı atladık
FETCH NEXT 3 ROWS ONLY; -- sonraki 3 kaydı seçtik.