SQL 'de birden fazla tabloda arama yapmak?

1 oy
0

Merhabalar, benim alttaki resimlerden de görebileceğiniz yapıda farklı iki tane tablom var. Bu iki tablo "Marka_ID" vasıtasıyla birbiri ile ilişkili durumdadır.

Ben hem "Marka" hem de "Model" sütununa göre arama yaptırmak istiyorum. Nasıl bir SQL sorgusu yazmam gerekir acaba?

CEVAPLAR (1)

  • 0 oy

    Selam serhat83;

    SQL'de birden fazla tabloyu birleştirmek için JOIN parametresi kullanılır.

    Birden farklı JOIN tipi vardır:

    • INNER JOIN : En çok kullanılan JOIN tipidir ve her iki tablodaki ortak kayıtları döndürür. Bir başka ifade ile iki tablonun kesişimini döndürür.

      Sorudaki tablo örneğine göre düşünecek olursak :

      SELECT Markalar.Marka_ID, Markalar.Marka, Modeller.Model_ID, Modeller.Model FROM Markalar INNER JOIN Modeller ON (Markalar.Marka_ID = Modeller.Marka_ID)

      sorgusunu çalıştırdığımızda, Modeller tablosundaki Marka_ID değerlerinin hepsi Markalar tablosunda bulunduğu için 5 sonucu da getirecekti. Eğer bir adet Marka_ID eşleşmemiş olsaydı, kesişen 4 sonuç gelirdi.

    • LEFT JOIN ya da LEFT OUTER JOIN : Sol tabloda yer alan tüm kayıtları ve sağ tabloda eşleşen ortak kayıtları döndürür.

      Sorudaki tablo örneğine göre düşünecek olursak :

      SELECT Markalar.Marka_ID, Markalar.Marka, Modeller.Model_ID, Modeller.Model FROM Markalar LEFT JOIN Modeller ON (Markalar.Marka_ID = Modeller.Marka_ID)

      sorgusunu çalıştırdığımızda, Modeller tablosundaki Marka_ID değerlerinin hepsi Markalar tablosunda bulunduğu için 5 sonucu da getirecekti. Eğer bir adet Marka_ID eşleşmemiş olsaydı, eşleşen 4 sonuç gelirdi.

    • RIGHT JOIN ya da RIGHT OUTER JOIN : Sağ tabloda yer alan tüm kayıtları ve sol tabloda eşleşen ortak kayıtları döndürür.

      Sorudaki tablo örneğine göre düşünecek olursak :

      SELECT Markalar.Marka_ID, Markalar.Marka, Modeller.Model_ID, Modeller.Model FROM Markalar RIGHT JOIN Modeller ON (Markalar.Marka_ID = Modeller.Marka_ID)

      sorgusunu çalıştırdığımızda, Modeller tablosundaki Marka_ID değerlerinin hepsi Markalar tablosunda bulunduğu için 5 sonucu da getirecekti. Eğer bir adet Marka_ID eşleşmemiş olsaydı, tüm sonuçlar gelirdi fakat eşleşmeyen satırın Marka sütunu NULL gelecekti.

    • FULL JOIN ya da FULL OUTER JOIN : İki tablodaki tüm kayıtları getirir.
    • CROSS JOIN : Kayıtların sütun bazında kartezyen çarpımı şeklinde kayıtları getirir.
       

    Yukarıdaki JOIN türlerinden INNER JOIN'i kullanacağınızı varsayarsak, istemiş olduğunuz sorgu aşağıdaki gibi olacaktır : 

    SELECT Markalar.Marka_ID, Markalar.Marka, Modeller.Model_ID, Modeller.Model FROM Markalar INNER JOIN Modeller ON (Markalar.Marka_ID = Modeller.Marka_ID) WHERE Markalar.Marka = 'aranan_marka' OR Modeller.Model = 'aranan_model'

    Not : aranan_marka terimi yerine aranacak marka adı, aranan_model teriminin yerine de aranacak model adını yazınır.

    Başarılar.

Cevap Verin

Bu soruya cevap verebilmek için üye girişi yapmalı ya da kayıt olmalısınız.

Şikayet Sebebiniz :
Cevabı silmek istediğinizden emin misiniz?
E-posta Adresiniz :
Şifreniz :
Facebook ile Giriş Yapın!

Hemen sormak veya cevaplamak için bize katılın!

Çıkış yapmak istediğinizden emin misiniz?

Evet Hayır