Saya punya 2 tabel seperti ini:
> SELECT * FROM table_a;
+------+------+
| id | name |
+------+------+
| 1 | row1 |
| 2 | row2 |
+------+------+
> SELECT * FROM table_b;
+------+------+------+
| id | name | aid |
+------+------+------+
| 3 | row3 | 1 |
| 4 | row4 | 1 |
| 5 | row5 | NULL |
+------+------+------+
INNER BERGABUNG peduli tentang kedua tabel
INNER BERGABUNG peduli tentang kedua tabel, sehingga Anda hanya mendapatkan baris jika kedua tabel memiliki satu. Jika ada lebih dari satu pasangan yang cocok, Anda mendapatkan beberapa baris.
> SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
+------+------+------+------+------+
Tidak ada bedanya dengan INNER BERGABUNG jika Anda membalikkan pesanan, karena itu peduli dengan kedua tabel:
> SELECT * FROM table_b b INNER JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
+------+------+------+------+------+
Anda mendapatkan baris yang sama, tetapi kolom berada dalam urutan yang berbeda karena kami menyebutkan tabel dalam urutan yang berbeda.
KIRI BERGABUNG hanya peduli tentang tabel pertama
LEFT JOIN peduli tentang tabel pertama yang Anda berikan, dan tidak terlalu peduli tentang tabel kedua, jadi Anda selalu mendapatkan baris dari tabel pertama, bahkan jika tidak ada baris yang sesuai di tabel kedua:
> SELECT * FROM table_a a LEFT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| 2 | row2 | NULL | NULL | NULL |
+------+------+------+------+------+
Di atas Anda dapat melihat semua baris table_a meskipun beberapa dari mereka tidak cocok dengan apa pun di tabel b, tetapi tidak semua baris table_b - hanya baris yang cocok dengan sesuatu di table_a.
Jika kami membalik urutan tabel, LEFT JOIN berperilaku berbeda:
> SELECT * FROM table_b b LEFT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| 5 | row5 | NULL | NULL | NULL |
+------+------+------+------+------+
Sekarang kita mendapatkan semua baris table_b, tetapi hanya mencocokkan baris table_a.
BERGABUNG DENGAN BENAR hanya peduli tentang tabel kedua
a RIGHT JOIN b
memberi Anda baris yang persis sama dengan b LEFT JOIN a
. Satu-satunya perbedaan adalah urutan default kolom.
> SELECT * FROM table_a a RIGHT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| NULL | NULL | 5 | row5 | NULL |
+------+------+------+------+------+
Ini adalah baris yang sama dengan table_b LEFT JOIN table_a
yang kita lihat di bagian LEFT JOIN.
Demikian pula:
> SELECT * FROM table_b b RIGHT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| NULL | NULL | NULL | 2 | row2 |
+------+------+------+------+------+
Apakah baris yang sama dengan table_a LEFT JOIN table_b
.
Tidak bergabung sama sekali memberi Anda salinan segalanya
Klausa Tidak Gabung: Jika Anda menulis tabel tanpa klausa GABUNG sama sekali, hanya dipisahkan oleh koma, Anda mendapatkan setiap baris tabel pertama yang ditulis di sebelah setiap baris tabel kedua, dalam setiap kombinasi yang mungkin:
> SELECT * FROM table_b, table_a;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 3 | row3 | 1 | 2 | row2 |
| 4 | row4 | 1 | 1 | row1 |
| 4 | row4 | 1 | 2 | row2 |
| 5 | row5 | NULL | 1 | row1 |
| 5 | row5 | NULL | 2 | row2 |
+------+------+------+------+------+
(Ini dari posting blog saya Contoh-contoh tipe join SQL )