Anasayfa > Programlama > MySQL > MySQL ile Subselect Islemini Join kullanarak Basarmak
Hazırlanıyor..

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 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

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  

Bölüm Başlık İlgili Dökümanlar

Döküman / Makale - Mysql türkçe karekter sorunu Mysql türkçe karekter sorunu
Tanımlama:Biz phpciler için vazgeçilmez biricik veritabanımız Mysql, hüzünlü bir sonbahar akşama MySQL 4.1.x versiyonunu tüm dünyay...

Döküman / Makale - PHP ile COM-Port Kullanarak Haberleşme PHP ile COM-Port Kullanarak Haberleşme
Türkiye PHP Grubu'ndan Nurettin Sezer'in İzmir Dokuz Eylül Üniversitesi DESEM 'de verilen ücretsizseminerde bahsettiği konunun .pdf versiyonu.COM-Port ile PHP'nin webden elekt...

Döküman / Makale - XML kullanarak sık kullandığınız konfigürasyon verilerinin saklanması. XML kullanarak sık kullandığınız konfigürasyon verilerinin saklanması.
Öncelikle verilerimizin tutulacağı xml dosyasının yapısına bir göz atalım. ...

Döküman / Makale - .Htaccess kullanarak dosya uzantılarını dizin olarak okutmak .Htaccess kullanarak dosya uzantılarını dizin olarak okutmak
Merhaba lem Coşkun naber?İyi değilim abi, canım çok sıkkın ya..Neden lem neyin var? hayırdır..Yahu adamlar çıkarmış htaccess mi neyse, adam gibi uzantım...

Animasyon Görüntülü Ders - Facebook ve Youtubeyi Firefox Kullanarak Türkçe Yapma Görsel Anlatım Facebook ve Youtubeyi Firefox Kullanarak Türkçe Yapma Görsel Anlatım
Bu dersimizde firefox eklentileriyle facebook ve youtubeyi türkçe yapacağız ayrıca youtube videolarını bilgisayarımıza indireceğiz Malzemeler ...

Reklam Netinternet
Gizlilik | Copyright © 2006-2009 ™ Tüm hakları saklıdır.
Powered by BilgiPortal v2.2
Frasb Etiler WebTasarım Web Tasarım