Kesin farklılıkları açıklayan cevaplar güzel olsa da, ilişkisel cebirin nasıl SQL'e dönüştürüldüğünü ve 3 kavramın gerçek değerinin ne olduğunu göstermek istiyorum.
Sorunuzdaki anahtar kavram, bir birleştirme fikridir. Bir birleştirmeyi anlamak için bir Kartezyen Ürünü anlamanız gerekir (örnek, SQL'e dayanır, burada eşdeğer bir gün gösterildiğinde çapraz birleştirme olarak adlandırılır);
Bu pratikte pek kullanışlı değil. Bu örneği düşünün.
Product(PName, Price)
====================
Laptop, 1500
Car, 20000
Airplane, 3000000
Component(PName, CName, Cost)
=============================
Laptop, CPU, 500
Laptop, hdd, 300
Laptop, case, 700
Car, wheels, 1000
Kartezyen ürün Ürün x Bileşeni - feryat veya sql fiddle olacaktır . Gördüğünüz gibi 12 sıra = 3 x 4. Açıktır ki, "tekerlekli" gibi "Dizüstü Bilgisayar" gibi sıraların bir anlamı yoktur, bu yüzden pratikte Kartezyen ürünü nadiren kullanılır.
| PNAME | PRICE | CNAME | COST |
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Laptop | 1500 | wheels | 1000 |
| Car | 20000 | CPU | 500 |
| Car | 20000 | hdd | 300 |
| Car | 20000 | case | 700 |
| Car | 20000 | wheels | 1000 |
| Airplane | 3000000 | CPU | 500 |
| Airplane | 3000000 | hdd | 300 |
| Airplane | 3000000 | case | 700 |
| Airplane | 3000000 | wheels | 1000 |
JOIN'ler bu ürünlere daha fazla değer katmak için buradalar. Gerçekten istediğimiz şey, ürünü ilişkili bileşenleriyle "birleştirmektir", çünkü her bileşen bir ürüne aittir. Bunu yapmanın yolu bir birleştirmedir:
Ürün Pname ÜZERİNE BİRLEŞTİRİN
İlişkili SQL sorgusu şöyle olacaktır ( buradaki tüm örneklerle oynayabilirsiniz )
SELECT *
FROM Product
JOIN Component
ON Product.Pname = Component.Pname
ve sonuç:
| PNAME | PRICE | CNAME | COST |
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Car | 20000 | wheels | 1000 |
Sonuçta yalnızca 4 satır olduğuna dikkat edin, çünkü Dizüstü Bilgisayarda 3 bileşen vardır, Arabada 1 ve Uçakta hiçbir bileşen yoktur. Bu çok daha kullanışlıdır.
Sorularınıza geri dönersek, sorduğunuz tüm birleşimler az önce gösterdiğim JOIN'in varyasyonları:
Natural Join = birleştirme (ON cümlesi) aynı ada sahip tüm sütunlarda yapılır; diğer tüm birleştirmelerin aksine sonuçtan yinelenen sütunları kaldırır; Çoğu DBMS (Microsoft'un SQL Sunucusu, Oracle'ın MySQL'i gibi çeşitli satıcılar tarafından oluşturulan veritabanı sistemleri) bunu desteklemeye zahmet bile etmez, bu sadece kötü bir uygulamadır (veya kasıtlı olarak uygulamamayı seçmiştir). Bir geliştiricinin gelip Ürün'deki ikinci sütunun adını Fiyattan Maliyet olarak değiştirdiğini hayal edin. Daha sonra tüm doğal birleştirmeler PName VE Maliyet üzerinde yapılır ve hiçbir sayı eşleşmediği için 0 satırla sonuçlanır.
Theta Join = bu, koşulu belirlemenize izin verdiği için herkesin kullandığı genel birleşimdir (SQL'deki ON cümlesi). İstediğiniz hemen hemen her koşula katılabilirsiniz, örneğin ilk 2 harfi benzer olan veya farklı bir fiyatı olan Ürünler. Pratikte durum nadiren böyledir - vakaların% 95'inde eşitlik koşuluyla katılacaksınız ve bu da bizi şu noktalara götürüyor:
Equi Join = pratikte kullanılan en yaygın olanı. Yukarıdaki örnek bir eşit birleşmedir. Veritabanları bu tür birleştirmeler için optimize edilmiştir! Bir eşit birleşmenin zıttı, eşit olmayan bir birleşimdir, yani "=" dışında bir koşulda birleştiğinizde. Veritabanları bunun için optimize edilmemiştir! Her ikisi de genel teta birleşiminin alt kümeleridir. Doğal birleştirme aynı zamanda bir teta birleşimidir ancak koşul (teta) örtüktür.
Bilgi kaynağı: üniversite + sertifikalı SQL Server geliştiricisi + yakın zamanda Stanford'dan MOO "Veritabanlarına Giriş" i tamamladı, bu yüzden ilişkisel cebir aklımda yeni olduğunu söyleyebilirim.