Bir web sitesi Customers Tablo ve OrdersTablo olmak üzere iki tablo içerir . Hiçbir zaman sipariş vermeyen tüm müşterileri bulmak için bir SQL sorgusu yazalım.

İkincisi, konu gereksinimleri

Örneklem


Customers ID:
+----+-------+
| Id | Name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+
Orders ID:

+----+------------+
| Id | CustomerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+
Örneğin, yukarıdaki tablo göz önüne alındığında, sorgunuz şunu döndürmelidir:

+-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+

ziyaret etmek


1. Alt sorgu, sol birleştirme

2. 10~25dk kullanılması tavsiye edilir.
3. Problem Analizi

1. Alt sorgular


Bu sorudaki iki tablonun kimlikleri aslında farklıdır ve farklı anlamlara sahiptir. Orders ID Customer ID'ın içerisindedir.
Böylece, bu sorunun fikri çok netleşiyor. Sadece neyin Customers ID içinde göründüğünü neyin Orders ID içinde görünmediğini bulmamız gerekiyor.CustomerId

2. Tablo Birleştirme birleştirme


Sol birleştirme, önce soldaki tablonun tüm kayıtlarının çıktısını almak ve yalnızca sağdaki tablodaki karşılık gelen koşullara eşit verileri döndürmek içindir.Bu soruyu örnek alarak, sol birleştirmenin sonucu şöyle olmalıdır:
+----+-------++-----------+
| Id | Name || Id | CustomerId |
+----+-------++----+------------+
| 1 | Joe || 1 | 3 |
| 2 | Henry || 2 | 1 |
| 3 | Sam || null | null |
| 4 | Max || null | null |
Yukarıdaki tabloda görüldüğü gibi soldaki tüm veriler çıktı ve sağdaki tablo ise sadece şartları sağlayan sonuçları verir.İki tabloyu sadece ID numarası üzerinden bağlamamız ve ardından ID numarasının üzerinde olup olmadığını belirlememiz yeterlidir. sağ boş.
ek:
  • sağ Birleştirme
    Sağ birleştirme, sol birleştirme ile aynıdır. Tüm doğru tablo verilerini verir, ancak yalnızca koşulları karşılayan sol tablo verilerini verir. Koşulları karşılamıyorsa, boş olarak ayarlanır.
  • iç birleşim
    Aynı anda iki tablodaki eşleşen verileri eşleştirir
Dördüncüsü, kodlama uygulaması

1. Alt sorgular


select c.Name as 'Customers'
from Customers as c
where c.Id not in( select CustomerId from Orders)

2. Sol birleştirme


select c.Name as 'Customers'
from Customers c
left join Orders o on o.CustomerId=c.Id where o.Id is null