-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday7_setOperators.sql
More file actions
237 lines (200 loc) · 9.1 KB
/
day7_setOperators.sql
File metadata and controls
237 lines (200 loc) · 9.1 KB
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
/*==================== SET (küme) OPERATORLERI: UNION, UNION ALL======================
set=küme diyelim diğer set (sql komutu) ile karışmasın
UNION, UNION ALL, INTERSECT, ve MINUS gibi SET operatorleri yardimiyla
Çoklu Sorgular birlestirilebilirler.aynı tablodan yada farklı tablodan sütunları birleştirip aynı sütunda yazdırma
?
UNION : Bir SET operatorudur. 2 veya daha fazla Sorgu ifadesinin sonuc kumelerini birlesitirerek tek bir sonuc kumesi olusturur. (iki kümenin birleşimi)
-- UNION
-- Eger tek sorguda birlestiremeyecegim iki sorgunun sonucunu ayni tabloda
-- gormek istersek UNION islemi kullanilir
-- BU durumda dikkat etmemiz gereken konu iki sorguda da field sayisi ve
-- alt alta gelecek field data tiplerinin ayni olmasidir
?
-- UNION ALL komutu ise tekrara bakmaksizin iki sorgudan gelen tum sonuclari listeler
-- UNION ALL komutunda da iki sorgunun sonucunun esit sayida field'a ve data
-- tiplerine sahip olmasi gereklidir
?
SÜTUN birleştirme=> SET
TABLO birleştirme=> JOIN
Syntax:
----------
SELECT sutun_adi,sutun_adi2, .. FROM tablo_adi1
UNION
SELECT sutun_adi1, sutun_adi2, .. FROM tablo_adi2;
NOT: UNION operatoru SADECE benzersiz degerleri alır. Benzerli verileri almak
için UNION ALL kullanılır.
==============================================================================*/
CREATE TABLE personel
(
id NUMBER(9),
isim VARCHAR2(50),
sehir VARCHAR2(50),
maas NUMBER(20),
sirket VARCHAR2(20)
--CONSTRAINT personel_pk PRIMARY KEY(id)
);
INSERT INTO personel VALUES(123456789, 'Ali Yilmaz', 'Istanbul', 5500, 'Honda');
INSERT INTO personel VALUES(234567890, 'Veli Sahin', 'Istanbul', 4500, 'Toyota');
INSERT INTO personel VALUES(345678901, 'Mehmet Ozturk', 'Ankara', 3500, 'Honda');
INSERT INTO personel VALUES(456789012, 'Mehmet Ozturk', 'Izmir', 6000, 'Ford');
INSERT INTO personel VALUES(567890123, 'Mehmet Ozturk', 'Ankara', 7000, 'Tofas');
INSERT INTO personel VALUES(453445611, 'Veli Sahin', 'Ankara', 4500, 'Ford');
INSERT INTO personel VALUES(123456710, 'Hatice Sahin','Bursa', 4200, 'Honda');
SELECT * FROM personel;
/* -----------------------------------------------------------------------------
ORNEK1: Maasi 4000’den cok olan isci isimlerini ve 5000 liradan fazla maas
alinan sehirleri gosteren sorguyu yaziniz.
------------------------------------------------------------------------------*/
SELECT isim AS isim_veya_sehir,maas from personel
where maas>4000
UNION ALL
select sehir,maas from personel
where maas>5000;
-- UNION ALL yazdigimiz zaman tum satırlardaki elemanlari aldi. 9 sutun var.
SELECT isim AS isim_veya_sehir,maas from personel
where maas>4000
UNION
select sehir,maas from personel
where maas>5000;
-- UNION yazdigim zaman tekrar eden satirlardaki elemanlari almaz.unique dir. 8 sutun var.
/* -----------------------------------------------------------------------------
ORNEK2: Mehmet Ozturk ismindeki kisilerin aldigi maaslari ve Istanbul’daki
personelin maaslarini yüksekten alçağa doğru sıralayarak bir tabloda gosteren
sorguyu yaziniz.
------------------------------------------------------------------------------*/
select isim AS isim_sehir,maas from personel
where isim ='Mehmet Ozturk'
UNION
-- TEKRARSIZ BIRLESTIRME YAPTIM.. satirlarin tamami aynı olmalı.
select sehir,maas from personel
where sehir ='Istanbul'
order by maas desc;
-- MAASI AZALAN SEKILDE YAZDIR DESCENDING
/*======================== FARKLI TABLOLARDAN BIRLESTIRME ====================*/
-- hata verirse personel i sil bir daha create et
CREATE TABLE personel_bilgi
(
id NUMBER(9),
tel char(10) UNIQUE ,
cocuk_sayisi NUMBER(2)
-- CONSTRAINT fk_personel FOREIGN KEY (id) REFERENCES personel(id)
);
INSERT INTO personel_bilgi VALUES(123456789, '5302345678' , 5);
INSERT INTO personel_bilgi VALUES(234567890, '5422345678', 4);
INSERT INTO personel_bilgi VALUES(345678901, '5354561245', 3);
INSERT INTO personel_bilgi VALUES(456789012, '5411452659', 3);
INSERT INTO personel_bilgi VALUES(567890123, '5551253698', 2);
INSERT INTO personel_bilgi VALUES(453445611, '5524578574', 2);
INSERT INTO personel_bilgi VALUES(123456710, '5537488585', 1);
?
SELECT * FROM personel_bilgi;
?
/* -----------------------------------------------------------------------------
ORNEK4: id’si 123456789 olan personelin Personel tablosundan sehir ve
maasini, personel_bilgi tablosundan da tel ve cocuk sayisini yazdirin
------------------------------------------------------------------------------*/
--console da ilk select teki isimler çıkar
SELECT sehir AS sehir_tel, maas AS maas_cocukSayisi
FROM personel
WHERE id = 123456789
UNION
SELECT tel, cocuk_sayisi
FROM personel_bilgi
WHERE id = 123456789;
-- sehir ile tel, maas ile cocuk ayni sutunda birlestiği icin veri tipleri
-- uygun olmalidir.
/*========================= SET OPERATORLERI: INTERSECT ========================
--ıntersect=> iki kümenin kesişimini döndürür
INTERSECT operarotu 2 veya daha fazla Sorgu ifadesinin sonuclarini
dondurmek icin kullanilir. Ancak, intersect SADECE tum sorgularin ortak
verilerini (kesimlerini) dondurur.
Syntax:
----------
SELECT sutun_adi,sutun_adi2, .. FROM tablo_adi1
INTERSECT
SELECT sutun_adi1, sutun_adi2, .. FROM tablo_adi2;
==============================================================================*/
?
/* -----------------------------------------------------------------------------
ORNEK5: Personel tablosundan Istanbul veya Ankara’da calisanlarin id’lerini
sorgulayiniz.
Personel_bilgi tablosundan 2 veya 3 cocugu olanlarin id lerini sorgulayiniz.
Bu iki sorguyu INTERSECT ile birlesitiriniz.
------------------------------------------------------------------------------*/
SELECT id FROM personel
WHERE sehir IN('Istanbul','Ankara')
INTERSECT
SELECT id FROM personel_bilgi
WHERE cocuk_sayısı IN (2,3);--2 olanlar veya 3 olanlar demek (IN)
--WHERE cocuk_sayisi = 2 or cocuk_sayısı=3; üsttekiyle aynı şey
?
/* -----------------------------------------------------------------------------
ORNEK6: Honda,Ford ve Tofas’ta calisan ortak isimde personel varsa listeleyin
------------------------------------------------------------------------------*/
--UNION yazarsak istenen herşeyi alır gelir (tofas+honda+ford), INTERSECT ortakları alıyor
SELECT isim FROM personel
WHERE sirket = 'Honda'
INTERSECT
SELECT isim FROM personel
WHERE sirket = 'Ford'
INTERSECT
SELECT isim FROM personel
WHERE sirket = 'Tofas';
-- tek satirda birkac veri birden isteniyorsa and ile birlesir
-- farkli satirlardan oertaklik isteniyorsa INTERSECT kullanilir.
/* -----------------------------------------------------------------------------
ORNEK7: Toyota ve Ford sirketlerinde ayni maasi alan personel isimlerini
listeleyin
------------------------------------------------------------------------------*/
select isim, maas from personel
where sirket ='Toyota'
INTERSECT
select isim, maas from personel
where sirket ='Ford';
-- iki şeyin ortaklığı başka yolla olmaz (AND OR gibi yollarla olmaz)4 lü tablo kümesi gibi çünkü.
-- normal küme olacaksa AND olur. altlarda var,3 yöntemli soru
-- bazı işlemleri AND ile yapabilirdik
-- INTERSECT islemi mantik olarak AND komutu ile aynidir(isim...and sehir...olur.sirket... and sirket... olmaz)
-- ancak INTERSECT ile cozulen her soru AND ile cozulemez
/*========================= SET OPERATORLERI: MINUS ============================
MINUS operatoru ilk Sorgu ifadesinde olup da diger sorgu ifadesinde olmayan
verileri dondurur. Yani 1. sorgu ile 2. sorgu arasindaki farklı olanları
dondurur
Syntax:
----------
SELECT sutun_adi,sutun_adi2, .. FROM tablo_adi1
MINUS
SELECT sutun_adi1, sutun_adi2, .. FROM tablo_adi2;
==============================================================================*/
?
?
/* -----------------------------------------------------------------------------
ORNEK8: 5000’den az maas alan ve Honda calisani olmayanların bilgilerini
listeleyen bir sorgu yaziniz.
------------------------------------------------------------------------------*/
-- 1.yontem
select isim , maas, sirket from personel
where maas <5000
INTERSECT
select isim, maas,sirket from personel
where sirket != 'Honda';
--2.yol
select isim , maas, sirket from personel
where maas <5000
MINUS
select isim, maas,sirket from personel
where sirket = 'Honda';
--3. YÖNTEM-------
SELECT isim,maas, sirket
FROM personel
WHERE maas < 5000 AND sirket!='Honda';
/* -----------------------------------------------------------------------------
ORNEK8: Ismi Mehmet Ozturk olup Izmir’de calismayanlarin isimlerini ve
sehirlerini listeleyen sorguyu yaziniz.
------------------------------------------------------------------------------*/
select isim,sehir from personel
where isim = 'Mehmet Ozturk'
MINUS
select isim,sehir from personel
where sehir = 'Izmir';
-- MINUS ta UNION gibi tekrarli satirlardan sadece birini yazdirir.