MySQL : Subquery

Mysql içinde sql sorguları yazarken zaman zaman iki tabloyu ilişkilendirmemiz gerekir. Bunu php ile bir başka tablodan aldığımız veriyi mysql sorgusunda kullanarak yapabiliriz ama bariz biçimde performans kaybına neden oluruz. Bu tip veritabanı ile ilgili işlemlerde sql üzerinden işleri yapmanın her zaman avantajlı olduğunu unutmayın. Daha doğrusu işlem yaptığınız, komut gönderdiğiniz asıl programa hangi komut yakınsa onu kullanmalıyız.

Böyle bakınca mysql’de alt sorgular kullanmak her zaman performans açısından avantajlı ve işimizi daha kısaltacak alternatiflerdir. Şimdi bunlara birlikte göz atalım.

Basit Kullanım

SELECT baslik,yazi FROM yazilar WHERE yazar = (SELECT kullanici FROM kullanicilar WHERE id= '1');

Haliyle alt sorgu iki tabloyu ilişkilendirmek olduğundan ilişkili olabilecek iki tablo seçtim. Birincisi “yazilar” tablosu, ikicnisi “kullanicilar” tablosu. Yazarı, kullancilinicilar tablosunda 1 id numarasına sahip kullanici olan baslik ve yazi bilgileri yazilar tablosundan çekiliyor. Yani yazar ismini kullanıcılar tablosundan id numarası ile alıp gelen kullanıcı ismini yazilar tablosundan kullanıyoruz.

Bu sorguda tek satir çekildiğini unutmayın. Eğer sonuç birden fazla satır dönderirse mysql

“Error 1241: Subquery returns more than 1 row.”

hatası verecektir.

Çok Alt Sorgulu Kullanım

SELECT numara, sinif FROM siniflar WHERE ogretmen_no IN ((SELECT ogretmen_no FROM ogretmenler WHERE soyad = 'Soylu') ,(SELECT ogretmen_no FROM ogretmenler WHERE soyad = 'Koçak') ,

Bu sorguda ise numara ve sinif bilgileri siniflar tablosundan bir kaç alt soru sonucuna göre çekiliyor. Ogretmen_no’su ogretmenler tablosunda soyadı “Soylu” ya da soyadı “Koçak” olan öğretmenlerin siniflar tablosundaki numara ve sinif bilgileri çekiliyor.Çok Satırlı Sonuçlar Almak

Bu sorguda cumleler tablosundan kullanıcı_id değeri kullanıcılar tablosunda kullanici değeri zee olan satırın id numarası ile eşleştirilip, ilgili kullanıcı_id değerine sahip tüm satırlar çekiliyor.

Şimdilik sub query ile ilgili bunları yazdım. İlerde benimde ihtiyacım olup birşeyler öğrenirsem o zaman yine eklemelere devam edeceğim.

Sağlıcakla kalın…

  • Share/Bookmark

admin hakkında

1987'de ilk kez renkli televizyon gördüm. 1989'da ilk kez kaz gördüm. 1996'da ilk defa denizi (akdeniz) gördüm. 2007'de ilk kez İstanbul'u gördüm.
Bu yazı Kategorilenmemiş kategorisine gönderilmiş ve , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word