forked from profmuratcakir/SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
day9_joins.sql
172 lines (124 loc) · 6.34 KB
/
day9_joins.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
/*============================== JOIN İSLEMLERİ ===============================
Set Operatorleri (Union,Intersect,Minus) farklı tablolardaki sutunlari
birlestirmek kullanilir.
Join islemleri ise farklı Tablolari birlestirmek icin kullanilir. Diger
bir ifade ile farkli tablolardaki secilen sutunlar ile yeni bir tablo
olusturmak icin kullanilabilir.
JOIN islemleri Iliskisel Veritabanlari icin cok onemli bir ozelliktir. Çunku
Foreign Key'ler ile iliskili olan tablolardan istenilen sutunlari cekmek
icin JOIN islemleri kullanilabilir.
ORACLE SQL'de 4 Cesit Join isemi kullanilabilmektedir.
1) FULL JOIN: Tablodaki tum sonuclari gosterir
2) INNER JOIN: Tablolardaki ortak olan sonuc kumesini gosterir
3) LEFT JOIN: Ilk tabloda (Sol) olup digerinde olmayan sonuclari gosterir
4) RIGHT JOIN: Sadece Ikinci tabloda olan tum sonuclari gosterir
==============================================================================*/
CREATE TABLE sirketler
(
sirket_id NUMBER(9),
sirket_isim VARCHAR2(20)
);
INSERT INTO sirketler VALUES(100, 'Toyota');
INSERT INTO sirketler VALUES(101, 'Honda');
INSERT INTO sirketler VALUES(102, 'Ford');
INSERT INTO sirketler VALUES(103, 'Hyundai');
CREATE TABLE siparisler
(
siparis_id NUMBER(9),
sirket_id NUMBER(9),
siparis_tarihi DATE
);
INSERT INTO siparisler VALUES(11, 101, '17-Apr-2020');
INSERT INTO siparisler VALUES(22, 102, '18-Apr-2020');
INSERT INTO siparisler VALUES(33, 103, '19-Apr-2020');
INSERT INTO siparisler VALUES(44, 104, '20-Apr-2020');
INSERT INTO siparisler VALUES(55, 105, '21-Apr-2020');
SELECT * FROM siparisler;
SELECT * FROM sirketler;
/*=============================== FULL JOIN ==================================
FULL JOIN, Her iki tablo icin secilen sutunlara ait olan tum satirlari
getirmek icin kullanilir.
Syntax
-----------
SELECT sutun1,sutun2....sutunN
FROM tablo1
FULL JOIN tablo2
ON tablo1.sutun = tablo2.sutun;
==============================================================================*/
/* -----------------------------------------------------------------------------
ORNEK1: sirketler ve siparisler adındaki tablolarda yer alan sirket_isim,
siparis_id ve siparis_tarihleri listeleyen bir sorgu yaziniz.
------------------------------------------------------------------------------*/
SELECT s.sirket_isim, sp.siparis_id, sp.siparis_tarihi, sp.sirket_id
FROM sirketler s
FULL JOIN siparisler sp
ON s.sirket_id = sp.sirket_id;
-- FULL Join'de iki tabloda var olan tum satirlar gosterilir.
-- Bir olupda digerlerine olmayan alanlar bo birakildi.
-- Join isleminde genelde iki tablodaki ortak olarak bulunan sutun, ON
-- cumleciginde kosul yapisi kullanilir.
/*=============================== INNER JOIN ==================================
Iki tablonun kesisim kumesi ile yeni bir tablo olusturmak icin kullanilir.
Syntax
-----------
SELECT sutun1,sutun2....sutunN
FROM tablo1
INNER JOIN tablo2
ON tablo1.sutun = tablo2.sutun;
================================================================================
/* -----------------------------------------------------------------------------
ORNEK2: Iki Tabloda sirket_id’si ayni olanlarin sirket_ismi, siparis_id ve
siparis_tarihleri listeleyen bir sorgu yaziniz.
------------------------------------------------------------------------------*/
SELECT s.sirket_isim, sp.siparis_id, sp.siparis_tarihi, sp.sirket_id
FROM sirketler s
INNER JOIN siparisler sp
ON s.sirket_id = sp.sirket_id;
-- INNER JOIN ile sadece iki tabloki ortak olan satilar secilir.
-- Diger ifadeyle iki tablodaki ortak olan sirket_id degerleri icin ilgili
-- sutunlar listenir.
-- INNER anahtar kelimesi opsiyoneldir.
/*=============================== LEFT JOIN ==================================
LEFT JOIN, 1. tablodan (sol tablo) SELECT ile ifade edilen sutunlara ait tum
satirlari getirir.
Ancak, diger tablodan sadece ON ile belirtilen kosula uyan satirlari getirir.
Syntax
-----------
SELECT sutun1,sutun2....sutunN
FROM tablo1
LEFT JOIN tablo2
ON tablo1.sutun = tablo2.sutun;
==============================================================================*/
/* -----------------------------------------------------------------------------
ORNEK3: sirketler tablosundaki tum sirketleri ve bu sirketlere ait olan
siparis_id ve siparis_tarihleri listeleyen bir sorgu yaziniz.
------------------------------------------------------------------------------*/
SELECT s.sirket_isim, sp.siparis_id, sp.siparis_tarihi, sp.sirket_id, s.sirket_id
FROM sirketler s
LEFT JOIN siparisler sp
ON s.sirket_id = sp.sirket_id;
-- Left Join’de ilk tablodaki tum satirlar gosterilir.
-- Ilk tablodaki satirlara 2.tablodan kosula uyan ortak satirlar gosterilir
-- ancak ortak olmayan kisimlar bos kalir
/*=============================== RIGHT JOIN ==================================
RIGHT JOIN, 2. tablodan (sag tablo) SELECT ile ifade edilen sutunlara ait tum
satirlari getirir.
Ancak, diger tablodan sadece ON ile belirtilen kosula uyan satirlari getirir.
Syntax
-----------
SELECT sutun1,sutun2....sutunN
FROM tablo1
RIGHT JOIN tablo2
ON tablo1.sutun = tablo2.sutun;
==============================================================================*/
/* -----------------------------------------------------------------------------
ORNEK4: siparisler tablosundaki tum siparis_id ve siparis_tarihleri ile
bunlara karşılık gelen sirket_isimlerini listeleyen bir sorgu yaziniz.
------------------------------------------------------------------------------*/
SELECT s.sirket_isim, sp.siparis_id, sp.siparis_tarihi, sp.sirket_id
FROM sirketler s
RIGHT JOIN siparisler sp
ON s.sirket_id = sp.sirket_id;
-- Right Join’de 2. tablodaki tum satirlar gosterilir.
-- 2 tablodaki satirlara 1.tablodan kosula uyan ortak satirlar gosterilir
-- ancak ortak olmayan kisimlar bos kalirir.