MySQL:
Kod Çizelgesi Kod Dili: php
# Subselect_IN.sql
# Normal bir Subselect Sorgusu:
# SELECT * FROM t1 WHERE col1 IN (SELECT col2 FROM t2);
# Yukaridaki sorguyu "join" islemi ile t1.col1
# ve t2.col2 kolanlari icin arasinda yeniden
# yazalim:
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
CREATE TABLE t1
(
col1 CHAR(10)
);
CREATE TABLE t2
(
col2 CHAR(10)
);
INSERT INTO t1 (col1) VALUES('a'),('b'),('c');
INSERT INTO t2 (col2) VALUES('b'),('c'),('d');
# Tablolarin iceriklerini goruntule,
SELECT * FROM t1; #Cikti 1
SELECT * FROM t2; #Cikti 2
# "join" islemi uygulanarak "subselect" ile ayni
# neticeler aliniyor...
SELECT t1.* FROM t1, t2 WHERE t1.col1 = t2.col2; #Cikti 3Bu islemlerin ciktisi asagidaki gibidir:
ÇIKTI:
Kod Çizelgesi Kod Dili: php
a
b
c
ÇIKTI:
Kod Çizelgesi Kod Dili: php
b
c
d
ÇIKTI:
Kod Çizelgesi Kod Dili: php
b
c
Yukaridaki ciktilardan neyi basarmak istedigimizi herhalde daha net anlamissinizdir...
Baska bir ornek vermek istersek:
Normalde bu tip islemler ile ornegin iki tablo arasindaki veriler birbiri ile alakali oldugunda
bunlari cekip alabiliyoruz.Mesela "yazar" tablosunda "K_ID" (Kayit ID) alaninda birinci tabloda "1"
degeri olsun.Bu "K_ID" ile her yazara otomatik bir numara veriyoruz.Tum yazarlari bu numara ile
birbirinden ayirt ediyor olalim.
Bu durumda yukarida anlatilan "join" islemi icin kullanilacak ve ikinci tabloda ("yazilar"
tablosunda) yazinin yazarini belirlemek icin kullanilan bir anahtar "Y_ID" (Yazar ID) olsun.Bu
durumda yazilar tablosundaki bu alan da ornegin 4 adet "1" varsa bu demektir ki ("yazar"
tablosundan alinan) "1" numarali yazarin "yazilar" tablosunda 4 adet kayidi bulunmaktadir.
Bu durumda "yazar" tablosundan alinan "1" degeri, ikinci tablomuz olan "yazilar" icinde "Y_ID"
bolumunde sorgulandiginda karsimiza tam istedigimiz sonuclar gelmis oluyor.
Simdi de her iki tabloyi da sorgulayip birinin icinde olup da (sorgu icinde solda kullandigimiz
tablo icinde olup da, sorgu icinde sag tarafta kullandigimiz tablo icinde olmayan) degerleri
bulmaya calisalim.
Bu tip sorgulara "Left Join" yani "Sol'dan Katilim" denilmesinin sebebi de budur.Bu sorgu
tekniginin birde "Right Join" yani "Sag'dan Katilim" olani vardir.
Sozu fazla uzatmadan ornek sorgumuza bakalim :
Kod Çizelgesi Kod Dili: php
MySQL: # Subselect_NOT_IN.sql
# Subselect Sorgusu olsa asagidaki gibi olacakti:
# SELECT * FROM t1 WHERE col1 NOT IN (SELECT col2 FROM t2);
# Yukaridaki sorguyu LEFT JOIN kullanacak sekilde
# t1.col1 ve t2.col2 arasinda yeniden yazmaya
# calisalim:
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
CREATE TABLE t1
(
col1 CHAR(10)
);
CREATE TABLE t2
(
col2 CHAR(10)
);
INSERT INTO t1 (col1) VALUES('a'),('b'),('c');
INSERT INTO t2 (col2) VALUES('b'),('c'),('d');
# Tablo iceriklerini goster,
Kod Çizelgesi Kod Dili: php
SELECT * FROM t1; #Cikti1
SELECT * FROM t2; #Cikti2
# Left Join islemini kullanarak sonuca bakalim,
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.col1 = t2.col2
WHERE t2.col2 IS NULL;
# Basarili bir LEFT JOIN islemi t2.col2 alaninda
# herhangi bir NULL degerin olmamasini
# gerektirmektedir.Eger t2.col2 bir NULL deger
# tasiyorsa bu durumda o satira karsilik gelecek
# t1.col1 icindeki degerde secilecektir ki bu
# yanlis bir sonuctur...
ÇIKTI:
Kod Çizelgesi Kod Dili: php
a
b
c
ÇIKTI:
Kod Çizelgesi Kod Dili: php
b
c
d
ÇIKTI:
Kod Çizelgesi Kod Dili: php
a