Anasayfa > Programlama > MySQL > MySQL ile Subselect Islemini Join kullanarak Basarmak

MySQL ile Subselect Islemini Join kullanarak Basarmak




MySQL:

  1.  
  2. # Subselect_IN.sql
  3. # Normal bir Subselect Sorgusu:
  4. # SELECT * FROM t1 WHERE col1 IN (SELECT col2 FROM t2);
  5. # Yukaridaki sorguyu "join" islemi ile t1.col1
  6. # ve t2.col2 kolanlari icin arasinda yeniden
  7. # yazalim:
  8. DROP TABLE IF EXISTS t1;
  9. DROP TABLE IF EXISTS t2;
  10. CREATE TABLE t1 
  11. ( 
  12. col1 CHAR(10) 
  13. );
  14. CREATE TABLE t2 
  15. ( 
  16. col2 CHAR(10) 
  17. );
  18. INSERT INTO t1 (col1) VALUES('a'),('b'),('c');
  19. INSERT INTO t2 (col2) VALUES('b'),('c'),('d');
  20. # Tablolarin iceriklerini goruntule,
  21. SELECT * FROM t1; #Cikti 1
  22. SELECT * FROM t2; #Cikti 2
  23. # "join" islemi uygulanarak "subselect" ile ayni
  24. # neticeler aliniyor...
  25. SELECT t1.* FROM t1, t2 WHERE t1.col1 = t2.col2; #Cikti 3
Bu islemlerin ciktisi asagidaki gibidir:

ÇIKTI:

  1.  
  2. a
  3. b
  4. c

ÇIKTI:

  1.  
  2. b
  3. c
  4. d

ÇIKTI:

  1.  
  2. b
  3. 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 :

MySQL:

  1. # Subselect_NOT_IN.sql
  2. # Subselect Sorgusu olsa asagidaki gibi olacakti:
  3. # SELECT * FROM t1 WHERE col1 NOT IN (SELECT col2 FROM t2);
  4. # Yukaridaki sorguyu LEFT JOIN kullanacak sekilde
  5. # t1.col1 ve t2.col2 arasinda yeniden yazmaya
  6. # calisalim:
  7. DROP TABLE IF EXISTS t1;
  8. DROP TABLE IF EXISTS t2;
  9. CREATE TABLE t1 
  10. ( 
  11. col1 CHAR(10) 
  12. );
  13. CREATE TABLE t2 
  14. ( 
  15. col2 CHAR(10) 
  16. );
  17. INSERT INTO t1 (col1) VALUES('a'),('b'),('c');
  18. INSERT INTO t2 (col2) VALUES('b'),('c'),('d');
  19. # Tablo iceriklerini goster,
  20. SELECT * FROM t1; #Cikti1
  21. SELECT * FROM t2; #Cikti2
  22. # Left Join islemini kullanarak sonuca bakalim,
  23. SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.col1 = t2.col2 
  24. WHERE t2.col2 IS NULL;
  25. # Basarili bir LEFT JOIN islemi t2.col2 alaninda
  26. # herhangi bir NULL degerin olmamasini
  27. # gerektirmektedir.Eger t2.col2 bir NULL deger
  28. # tasiyorsa bu durumda o satira karsilik gelecek
  29. # t1.col1 icindeki degerde secilecektir ki bu
  30. # yanlis bir sonuctur...

ÇIKTI:

  1.  
  2. a
  3. b
  4. c

ÇIKTI:

  1.  
  2. b
  3. c
  4. d

ÇIKTI:

  1.  
  2. a



Bu makale hakkında ek bilgi eklemek için buraya tıklayınız

Bu makalenin yazar yada kaynağını bildirmek için tıklayınız.

Digg this Post! Add Post to del.icio.us Bookmark Post in Technorati Furl this Post!
Eklenme tarihi: 3-2-2006  Okunma: 1809

Bu Makaleye Verilen Puan:    Bu makaleye puan verilmemiş.
Bu Makaleye Puan Ver  

Bölüm Başlık Kullanıcı Yorumları


Bu makaleye yorum gönderilmemiş, ilk yorumu sen gönder !

Yorum Ekle  

Reklam Netinternet
Bazı hakları saklıdır: İçeriğin editör ve yazarlarımız tarafından oluşturulan kısımları ve site tasarımının hakkı saklıdır.  Bu sayfa en iyi 1280x1024 ve 1024x768 çözünürlükte izlenir.
Powered by BilgiPortal v2.2
Resim Emlak Canlı TV Firma Rehberi Firma Ekle Estetik çiçek Makale izafet Download indir ADSL Teknik Servis Yorumlar Müzik