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