Meskipun jawaban yang menjelaskan perbedaan pastinya baik-baik saja, saya ingin menunjukkan bagaimana aljabar relasional diubah menjadi SQL dan berapa nilai sebenarnya dari 3 konsep tersebut.
Konsep kunci dalam pertanyaan Anda adalah gagasan bergabung. Untuk memahami gabungan, Anda perlu memahami Produk Cartesian (contoh didasarkan pada SQL di mana padanannya disebut gabungan silang seperti yang ditunjukkan onedaywhen);
Ini tidak terlalu berguna dalam praktiknya. Pertimbangkan contoh ini.
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
Produk Kartesius Produk x Komponen akan - di bawah atau sumbu sql . Bisa dilihat ada 12 baris = 3 x 4. Ternyata baris seperti "Laptop" dengan "roda" tidak ada artinya, inilah mengapa dalam prakteknya produk Cartesian jarang digunakan.
| 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 |
GABUNG di sini untuk menambah nilai lebih pada produk ini. Yang benar-benar kami inginkan adalah "menggabungkan" produk dengan komponen terkaitnya, karena setiap komponen adalah milik suatu produk. Cara melakukannya adalah dengan bergabung:
Produk GABUNG Komponen PADA Pname
Kueri SQL terkait akan seperti ini (Anda dapat bermain dengan semua contoh di sini )
SELECT *
FROM Product
JOIN Component
ON Product.Pname = Component.Pname
dan hasilnya:
| PNAME | PRICE | CNAME | COST |
----------------------------------
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Car | 20000 | wheels | 1000 |
Perhatikan bahwa hasilnya hanya 4 baris, karena Laptop memiliki 3 komponen, Mobil memiliki 1 dan Airplane tidak ada. Ini jauh lebih berguna.
Kembali ke pertanyaan Anda, semua gabungan yang Anda tanyakan adalah variasi dari JOIN yang baru saja saya tunjukkan:
Natural Join = gabungan (klausa ON) dibuat pada semua kolom dengan nama yang sama; itu menghapus kolom duplikat dari hasil, sebagai lawan dari semua gabungan lainnya; kebanyakan DBMS (sistem database yang dibuat oleh berbagai vendor seperti Microsoft SQL Server, Oracle's MySQL, dll.) bahkan tidak perlu repot-repot mendukung ini, ini hanya praktik yang buruk (atau sengaja memilih untuk tidak mengimplementasikannya). Bayangkan seorang pengembang datang dan mengubah nama kolom kedua di Produk dari Harga menjadi Biaya. Kemudian semua gabungan natural akan dilakukan pada PName AND pada Cost, menghasilkan 0 baris karena tidak ada angka yang cocok.
Theta Join = ini adalah gabungan umum yang digunakan semua orang karena memungkinkan Anda untuk menentukan kondisi (klausa ON dalam SQL). Anda dapat bergabung dalam kondisi apa pun yang Anda suka, misalnya pada Produk yang memiliki 2 huruf pertama yang serupa, atau yang memiliki harga berbeda. Dalam praktiknya, ini jarang terjadi - dalam 95% kasus, Anda akan bergabung dalam kondisi kesetaraan, yang mengarahkan kami ke:
Equi Join = yang paling umum digunakan dalam latihan. Contoh di atas adalah equi join. Database dioptimalkan untuk jenis gabungan ini! Kebalikan dari gabungan eku adalah gabung non-eku, yaitu saat Anda bergabung pada kondisi selain "=". Database tidak dioptimalkan untuk ini! Keduanya adalah himpunan bagian dari gabungan theta umum. Gabungan alami juga merupakan gabungan theta tetapi kondisinya (theta) tersirat.
Sumber informasi: universitas + pengembang SQL Server bersertifikat + baru saja menyelesaikan MOO "Pengantar database" dari Stanford, jadi saya berani mengatakan bahwa saya memiliki aljabar relasional yang segar dalam pikiran.