SQLite Birleştirme: Doğal Sol Dış, İç, Çapraz Tablolar Örneği

SQLite farklı türleri destekler SQL INNER JOIN, LEFT OUTER JOIN ve CROSS JOIN gibi birleştirmeler. Bu derste göreceğimiz gibi her JOIN türü farklı bir durum için kullanılır.

Giriş SQLite KATIL Maddesi

Birden çok tablo içeren bir veritabanı üzerinde çalışırken, genellikle bu birden çok tablodan veri almanız gerekir.

JOIN deyimiyle, iki veya daha fazla tabloyu veya alt sorguyu birleştirerek birbirine bağlayabilirsiniz. Ayrıca tabloları hangi sütuna ve hangi koşullara bağlamanız gerektiğini de tanımlayabilirsiniz.

Herhangi bir JOIN ifadesinin söz dizimi aşağıdaki gibi olmalıdır:

SQLite JOIN Madde Söz Dizimi
SQLite JOIN Madde Söz Dizimi

Her join cümleciği şunları içerir:

  • Soldaki tablo olan bir tablo veya alt sorgu; birleştirme yan tümcesinden önceki tablo veya alt sorgu (solunda).
  • JOIN operatörü – birleştirme türünü belirtin (INNER JOIN, LEFT OUTER JOIN veya CROSS JOIN).
  • JOIN kısıtlaması – birleştirilecek tabloları veya alt sorguları belirttikten sonra, birleştirme türüne bağlı olarak bu koşulla eşleşen eşleşen satırların seçileceği bir koşul olacak bir birleştirme kısıtlaması belirtmeniz gerekir.

Aşağıdakilerin tümü için şunu unutmayın: SQLite JOIN tablo örnekleri için sqlite3.exe'yi çalıştırmanız ve örnek veritabanına aşağıdaki gibi bir bağlantı açmanız gerekir:

) 1 Adım Bu adımda,

  1. Bilgisayarım'ı açın ve şu dizine gidin:C:\sqlite" ve
  2. Sonra aç"sqlite3.exe":

SQLite KATIL Maddesi

) 2 Adım Veritabanını aç “ÖğreticilerSampleDB.db” aşağıdaki komutla:

SQLite KATIL Maddesi

Artık veritabanında her türlü sorguyu çalıştırmaya hazırsınız.

SQLite INNER JOIN

INNER JOIN yalnızca birleştirme koşuluyla eşleşen satırları döndürür ve birleştirme koşuluyla eşleşmeyen diğer tüm satırları ortadan kaldırır.

SQLite INNER JOIN
SQLite INNER JOIN

Örnek E-posta

Aşağıdaki örnekte iki tabloyu birleştireceğiz "Öğrencilerve Gülay Pala iseBölümler” her öğrencinin bölüm adını almak için Departman Kimliği ile aşağıdaki gibi:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Kodun açıklaması

INNER JOIN şu şekilde çalışır:

  • Select yan tümcesinde, başvurulan iki tablodan seçmek istediğiniz sütunları seçebilirsiniz.
  • INNER JOIN cümlesi, “From” cümlesi ile başvurulan ilk tablodan sonra yazılır.
  • Daha sonra birleştirme koşulu ON ile belirtilir.
  • Başvurulan tablolar için takma adlar belirtilebilir.
  • INNER kelimesi isteğe bağlıdır, sadece JOIN yazabilirsiniz.

Çıktı

SQLite INNER JOIN Örneği

  • INNER JOIN, hem öğrencilerden hem de bölümün tablolarından “” şartına uyan kayıtları üretir.Students.DepartmentId = Departmanlar.DepartmentId “. Eşleşmeyen satırlar göz ardı edilecek ve sonuca dahil edilmeyecektir.
  • Bu nedenle, bu sorgudan BT, matematik ve fizik bölümleriyle 8 öğrenciden yalnızca 10 öğrenci döndürüldü. Oysa "Jena" ve "George" öğrencileri dahil edilmedi çünkü boş bir departman kimlikleri var ve bu da departments tablosundaki departmentId sütunuyla uyuşmuyor. Aşağıdaki gibi:

    SQLite INNER JOIN Örneği

SQLite KATILIN… KULLANIN

INNER JOIN, fazlalığı önlemek için “USING” cümlesi kullanılarak yazılabilir, bu nedenle “ON Students.DepartmentId = Departmanlar.DepartmentId” yazmak yerine sadece “USING(DepartmentID)” yazabilirsiniz.

Birleştirme koşulunda karşılaştıracağınız sütunların aynı isimde olması durumunda “JOIN.. USING” komutunu kullanabilirsiniz. Bu gibi durumlarda, açık koşulunu kullanarak bunları tekrarlamaya gerek yoktur ve yalnızca sütun adlarını ve adlarını belirtmeniz yeterlidir. SQLite bunu tespit edecektir.

INNER JOIN ve JOIN Arasındaki Farklar .. KULLANIMI:

“JOIN … USING” ile bir birleştirme koşulu yazmazsınız, sadece birleştirilen iki tablo arasında ortak olan birleştirme sütununu yazarsınız, table1 yazmak yerine “INNER JOIN table2 ON table1.cola = table2.cola” yazıyoruz “tablo1 masa2'ye (kola) KULLANARAK KATILIN” gibi.

Örnek E-posta

Aşağıdaki örnekte iki tabloyu birleştireceğiz "Öğrencilerve Gülay Pala iseBölümler” her öğrencinin bölüm adını almak için Departman Kimliği ile aşağıdaki gibi:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

açıklama

  • Önceki örnekten farklı olarak “ yazmadık.ON Students.DepartmentId = Departmanlar.DepartmentId“. Sadece şunu yazdık:KULLANIM(Departman Kimliği)".
  • SQLite katılım koşulunu otomatik olarak çıkarır ve her iki tablodan (Öğrenciler ve Departmanlar) DepartmentId'yi karşılaştırır.
  • Karşılaştırdığınız iki sütun aynı adda olduğunda bu sözdizimini kullanabilirsiniz.

Çıktı

  • Bu size önceki örnekle aynı sonucu verecektir:

SQLite KATILIN Örnek

SQLite DOĞAL KATIL

NATURAL JOIN, JOIN…USING'e benzer; fark, her iki tabloda da bulunan her sütunun değerleri arasındaki eşitliği otomatik olarak test etmesidir.

INNER JOIN ile NATURAL JOIN arasındaki fark:

  • INNER JOIN'de, iç birleştirmenin iki tabloyu birleştirmek için kullanacağı birleştirme koşulunu belirtmeniz gerekir. Doğal birleştirmede ise birleştirme koşulu yazmazsınız. İki tablonun isimlerini hiçbir koşul olmadan yazmanız yeterli. Daha sonra doğal birleştirme, her iki tabloda bulunan her sütunun değerleri arasındaki eşitliği otomatik olarak test edecektir. Doğal birleştirme, birleştirme koşulunu otomatik olarak çıkarır.
  • NATURAL JOIN'de her iki tablodaki aynı isimdeki tüm sütunlar birbiriyle eşleştirilecektir. Örneğin, ortak iki sütun adına sahip iki tablomuz varsa (iki sütun, iki tabloda aynı adla mevcutsa), o zaman doğal birleştirme, yalnızca birinden değil, her iki sütunun değerlerini karşılaştırarak iki tabloyu birleştirir. kolon.

Örnek E-posta

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

açıklama

  • Sütun adlarıyla bir birleştirme koşulu yazmamıza gerek yok (INNER JOIN'de yaptığımız gibi). Sütun adını bir kez bile yazmamıza gerek kalmadı (KULLANMAYA KATILIN'da yaptığımız gibi).
  • Doğal birleştirme, iki tablodaki her iki sütunu da tarayacaktır. Durumun, hem Öğrenciler hem de Bölümler tablosundaki Departman Kimliği'nin karşılaştırılmasından oluşması gerektiğini tespit edecektir.

Çıktı

SQLite DOĞAL KATILMA Örneği

  • Doğal JOIN, INNER JOIN ve JOIN USING örneklerinden aldığımız çıktıyla aynı çıktıyı verecektir. Çünkü örneğimizde üç sorgu da eşdeğerdir. Ancak bazı durumlarda, çıktı iç birleştirmeden doğal birleştirmeden farklı olacaktır. Örneğin, aynı adlara sahip daha fazla tablo varsa, doğal birleştirme tüm sütunları birbirleriyle eşleştirecektir. Ancak, iç birleştirme yalnızca birleştirme koşulundaki sütunlarla eşleşecektir (bir sonraki bölümde daha fazla ayrıntı; iç birleştirme ile doğal birleştirme arasındaki fark).

SQLite SOL DIŞ KATILMA

SQL standardı üç tür OUTER JOIN tanımlar: LEFT, RIGHT ve FULL, ancak SQLite yalnızca doğal LEFT OUTER JOIN'i destekler.

LEFT OUTER JOIN'de soldaki tablodan seçeceğiniz sütunların tüm değerleri sonuç kısmına dahil edilecektir. sorguyani değerin birleştirme koşuluyla eşleşip eşleşmediğine bakılmaksızın sonuca dahil edilecektir.

Yani eğer soldaki tabloda 'n' satır varsa, sorgu sonuçlarında da 'n' satır olacaktır. Ancak sağ tablodan gelen sütunların değerleri için birleştirme koşuluna uymayan herhangi bir değer varsa “null” değeri içerecektir.

Böylece sol birleştirmedeki satır sayısına eşdeğer sayıda satır elde edeceksiniz. Böylece her iki tablodan da eşleşen satırları (INNER JOIN sonuçları gibi) ve ayrıca soldaki tablodan eşleşmeyen satırları alacaksınız.

Örnek E-posta

Aşağıdaki örnekte, “Öğrenciler” ve “Bölümler” adlı iki tabloyu birleştirmek için “LEFT JOIN”i deneyeceğiz:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

açıklama

  • SQLite LEFT JOIN sözdizimi INNER JOIN ile aynıdır; iki tablo arasına LEFT JOIN yazarsınız ve ardından ON cümlesinden sonra birleştirme koşulu gelir.
  • From cümlesinden sonraki ilk tablo soldaki tablodur. Doğal LEFT JOIN'den sonra belirtilen ikinci tablo ise sağdaki tablodur.
  • OUTER yan tümcesi isteğe bağlıdır; LEFT doğal OUTER JOIN, LEFT JOIN ile aynıdır.

Çıktı

SQLite LEFT OUTER JOIN Örneği

  • Gördüğünüz gibi öğrenciler tablosundaki toplam 10 öğrenciden oluşan tüm satırlar dahil edilmiştir. Dördüncü ve son öğrenci olan Jena ve George'un departman kimlikleri Departmanlar tablosunda bulunmasa bile onlar da dahil edilmiştir.
  • Ve bu durumlarda, hem Jena hem de George için departmanAdı değeri "null" olacaktır çünkü departmanlar tablosunda kendi departmanId değeriyle eşleşen bir departmanAdı yoktur.

Sol birleştirmeyi kullanarak önceki sorguya Van diyagramlarını kullanarak daha derin bir açıklama verelim:

SQLite SOL DIŞ KATILMA

SQLite SOL DIŞ KATILMA

LEFT JOIN, öğrencinin bölümler tablosunda bulunmayan bir bölüm kimliğine sahip olsa bile, öğrenci tablosundaki tüm öğrencilerin adlarını verecektir. Dolayısıyla, sorgu size yalnızca INNER JOIN olarak eşleşen satırları vermeyecek, aynı zamanda soldaki tablo olan öğrenciler tablosundaki eşleşmeyen satırların bulunduğu ekstra kısmı da verecektir.

Eşleşen bölümü olmayan herhangi bir öğrenci adının bölüm adı için "boş" bir değere sahip olacağını unutmayın; çünkü bu bölüm için eşleşen bir değer yoktur ve bu değerler, eşleşmeyen satırlardaki değerlerdir.

SQLite ÇAPRAZ KATIL

CROSS JOIN, birinci tablodaki tüm değerleri ikinci tablodaki tüm değerlerle eşleştirerek, birleştirilmiş iki tablonun seçilen sütunları için Kartezyen çarpımını verir.

Yani, ilk tablodaki her değer için, ikinci tablodan 'n' eşleşme alacaksınız; burada n, ikinci tablo satırlarının sayısıdır.

INNER JOIN ve LEFT OUTER JOIN'den farklı olarak CROSS JOIN ile bir birleştirme koşulu belirtmenize gerek yoktur çünkü SQLite CROSS JOIN için buna gerek yoktur.

The SQLite ilk tablodaki tüm değerlerin ikinci tablodaki tüm değerlerle birleştirilmesiyle oluşturulan mantıksal sonuçlarla sonuçlanacaktır.

Örneğin, ilk tablodan (colA) bir sütun ve ikinci tablodan (colB) başka bir sütun seçtiyseniz. colA iki değer (1,2) içerir ve colB ayrıca iki değer (3,4) içerir.

O zaman CROSS JOIN'in sonucu dört satır olacaktır:

  • colA'nın ilk değeri olan 1 ile colB'nin (3,4) iki değeri (1,3), (1,4) birleştirilerek iki satır.
  • Aynı şekilde colA'dan gelen ikinci değer olan 2 ile colB'nin (3,4) iki değeri olan (2,3), (2,4) birleştirilerek iki satır elde edilir.

Örnek E-posta

Aşağıdaki sorguda Students ve Departments tabloları arasında CROSS JOIN yapmayı deneyeceğiz:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

açıklama

  • içinde SQLite birden fazla tablo arasından seçim yapmak için, öğrenciler tablosundan "öğrenciadı" ve bölümler tablosundan "bölümAdı" olmak üzere iki sütun seçtik.
  • Çapraz birleştirme için herhangi bir birleştirme koşulu belirtmedik, yalnızca iki tablonun ortasında CROSS JOIN ile birleştirildi.

Çıktı

SQLite CROSS JOIN Örneği

Gördüğünüz gibi sonuç 40 satır; students tablosundan 10 değer departments tablosundan 4 departmanla eşleşti. Aşağıdaki gibi:

  • Bölümler tablosundaki dört bölüm için dört değer, ilk öğrenci Michel ile eşleşti.
  • Bölümler tablosundaki Dört bölüm için dört değer, ikinci öğrenci John ile eşleşti.
  • Bölümler tablosundaki Dört bölüm için dört değer üçüncü öğrenci Jack ile eşleşti… vb.

ÖZET

kullanma SQLite JOIN sorgusunda, hem tablolardan hem de alt sorgulardan sütun seçmek için bir veya daha fazla tabloyu veya alt sorguyu birbirine bağlayabilirsiniz.