-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathi06_existOrderLimit.sql
231 lines (191 loc) · 9.53 KB
/
i06_existOrderLimit.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
use sys;
/*=========================== EXISTS, NOT EXIST ================================
EXISTS Condition subquery’ler ile kullanilir. IN ifadesinin kullanımına benzer olarak,
EXISTS ve NOT EXISTS ifadeleri de alt sorgudan getirilen değerlerin içerisinde
bir değerin olması veya olmaması durumunda işlem yapılmasını sağlar.
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
(
urun_id int,
musteri_isim varchar(50),
urun_isim varchar(50)
);
CREATE TABLE nisan
(
urun_id int ,
musteri_isim varchar(50),
urun_isim varchar(50)
);
INSERT INTO mart VALUES (10, 'Mark', 'Honda');
INSERT INTO mart VALUES (20, 'John', 'Toyota');
INSERT INTO mart VALUES (30, 'Amy', 'Ford');
INSERT INTO mart VALUES (20, 'Mark', 'Toyota');
INSERT INTO mart VALUES (10, 'Adam', 'Honda');
INSERT INTO mart VALUES (40, 'John', 'Hyundai');
INSERT INTO mart VALUES (20, 'Eddie', 'Toyota');
INSERT INTO nisan VALUES (10, 'Hasan', 'Honda');
INSERT INTO nisan VALUES (10, 'Kemal', 'Honda');
INSERT INTO nisan VALUES (20, 'Ayse', 'Toyota');
INSERT INTO nisan VALUES (50, 'Yasar', 'Volvo');
INSERT INTO nisan VALUES (20, 'Mine', 'Toyota');
/* -----------------------------------------------------------------------------
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.
-----------------------------------------------------------------------------*/
-- 1.yol
select urun_id,musteri_isim from mart
where urun_id in(select urun_id from nisan where mart.urun_id=nisan.urun_id);
-- 2.yol
select urun_id,musteri_isim from mart
where exists(select urun_id from nisan where mart.urun_id=nisan.urun_id);
/* -----------------------------------------------------------------------------
ORNEK2: Her iki ayda birden 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 as n
where exists (select urun_isim from mart m
where n.urun_isim=m.urun_isim);
/* ORNEK3: Her iki ayda ortak satilmayan ü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 as n
where not exists (select urun_isim from mart m
where n.urun_isim=m.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), -- Social Security Number
isim VARCHAR(50),
adres VARCHAR(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');
select * from insanlar;
-- ORNEK1: isim i null olanlari sorgula
select * from insanlar
where isim is null;
-- isim null olmayanlar
select * from insanlar
where isim is not null;
/* ----------------------------------------------------------------------------
ORNEK3: isim 'i NULL olan kişilerin isim'ine NO NAME atayınız. kisa soruda eski yolla olur
-------------------------------------------------------------------------- */
update insanlar
set isim='NO NAME'
where isim is null;
select * from insanlar;
-- tabloyu eski haline döndürüyoruz
update insanlar
set isim=null
where isim ='NO NAME';
select * from insanlar;
/* ----------------------------------------------------------------------------
ORNEK4: isim 'i NULL olanlara 'Henuz isim girilmedi'
adres 'i NULL olanlara 'Henuz adres girilmedi'
ssn 'i NULL olanlara ' no ssn' atayalım.
çoklu değişimde ve WHERE isim IS NULL or adres is null....;
gibi ifade yazmamak için. coalesce=birleşmek
-----------------------------------------------------------------------------*/
update insanlar
set isim=coalesce(isim,'Henuz girilmedi'),
adres=coalesce(adres,'Henuz 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
( id int PRIMARY KEY,
ssn CHAR(9) ,
isim VARCHAR(50),
soyisim VARCHAR(50),
maas int,
adres VARCHAR(50)
);
INSERT INTO kisiler VALUES(1,123456789, 'Ali','Can', 3000,'Istanbul');
INSERT INTO kisiler VALUES(2,234567890, 'Veli','Cem', 2890,'Ankara');
INSERT INTO kisiler VALUES(3,345678901, 'Mine','Bulut',4200,'Adiyaman');
INSERT INTO kisiler VALUES(4,256789012, 'Mahmut','Bulut',3150,'Adana');
INSERT INTO kisiler VALUES (5,344678901, 'Mine','Yasa', 5000,'Ankara');
INSERT INTO kisiler VALUES (6,345458901, 'Veli','Yilmaz',7000,'Istanbul');
INSERT INTO kisiler VALUES(7,123456789, 'Ali','Can', 3000,'Istanbul');
INSERT INTO kisiler VALUES(8,234567890, 'Veli','Cem', 2890,'Ankara');
INSERT INTO kisiler VALUES(9,345678901, 'Mine','Bulut',4200,'Ankara');
INSERT INTO kisiler VALUES(10,256789012, 'Mahmut','Bulut',3150,'Istanbul');
INSERT INTO kisiler VALUES (11,344678901, 'Mine','Yasa', 5000,'Ankara');
INSERT INTO kisiler VALUES (12,345458901, 'Veli','Yilmaz',7000,'Istanbul');
/* ----------------------------------------------------------------------------
ORNEK1: kisiler tablosunu adres'e göre sıralayarak sorgulayınız.
-----------------------------------------------------------------------------*/
select * from kisiler
order by adres;
/* ----------------------------------------------------------------------------
ORNEK2: kisiler tablosunu maas a göre ters sıralayarak sorgulayınız.
-----------------------------------------------------------------------------*/
select * from kisiler
order by maas desc;
/* ----------------------------------------------------------------------------
ORNEK4: ismi Mine olanları, maas a göre AZALAN sırada sorgulayınız.
-----------------------------------------------------------------------------*/
select * from kisiler
where isim='Mine'
order by maas desc;
/* ----------------------------------------------------------------------------
ORNEK5: soyismi 'i Bulut olanları maas sıralı olarak sorgulayınız.
-----------------------------------------------------------------------------*/
select * from kisiler
where soyisim='Bulut'
order by maas ;
-- *****************************LİMİT**********************************
-- listeden ilk 10 veriyi getir
select * from kisiler limit 10;
-- 10. veriden sonraki 2 veriyi al (11 ve 12) 1. yol
select * from kisiler limit 10,2;-- ilk sayi dahil değil (11 den başla), 2. say kadar git (2 tane git)
-- 2. yol
select*from kisiler where id>10 limit 2;
/* ----------------------------------------------------------------------------
ORNEK1: MAAŞ'ı en yüksek 3 kişinin bilgilerini listeleyen sorguyu yazınız.
-----------------------------------------------------------------------------*/
select *from kisiler
order by maas desc
limit 3;
/*oracle çözümü
select * from kisiler
order by maas desc
fetch next 3 rows only;*/
/* ----------------------------------------------------------------------------
ORNEK2: MAAŞ'a göre sıralamada 4. 5. 6. kişilerin bilgilerini listeleyen
sorguyu yazınız.
-----------------------------------------------------------------------------*/
select*from kisiler
order by maas
limit 3,3;
-- oracle çözümü
-- OFFSET 3 ROWS -- ilk 3 kaydı atladık
-- FETCH NEXT 3 ROWS ONLY; -- sonraki 3 kisi