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