Rumah  >  Artikel  >  pangkalan data  >  Apakah perbezaan antara mysql inner join dan outer join?

Apakah perbezaan antara mysql inner join dan outer join?

青灯夜游
青灯夜游asal
2022-01-06 14:50:2617910semak imbas

Perbezaan antara sambungan dalam mysql dan sambungan luar: sambungan dalam akan mengeluarkan data padanan dalam jadual sambungan, dan data yang tidak dapat dipadankan tidak akan dikekalkan manakala sambungan luar akan mengeluarkan padanan data dalam jadual sambungan, dan data yang sepadan juga tidak akan dikekalkan, nilainya adalah NULL.

Apakah perbezaan antara mysql inner join dan outer join?

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Perbezaan

  • Sambungan dalam: Keluarkan data yang sepadan dalam jadual sambungan dan jangan simpan data yang tidak sepadan
  • Sambungan luar : Keluarkan data yang sepadan dalam jadual sambungan, dan data yang tidak sepadan akan dikekalkan nilainya ialah NULL

Contoh jadual

jadual pengguna

mysql> select * from users;
+----+-------+
| id | name  |
+----+-------+
|  1 | john  |
|  2 | May   |
|  3 | Lucy  |
|  4 | Jack  |
|  5 | James |
+----+-------+
5 rows in set (0.00 sec)

jadual topik

mysql> select * from topics;
+----+---------------------------------------+---------+
| id | title                                 | user_id |
+----+---------------------------------------+---------+
|  1 |  Hello world                          |       1 |
|  2 | PHP is the best language in the world |       2 |
|  3 | Laravel artist                        |       6 |
+----+---------------------------------------+---------+
3 rows in set (0.00 sec)

gabungan dalam

  • Contoh
mysql> select * from users as u inner join topics as t on u.id=t.user_id;
+----+------+----+---------------------------------------+---------+
| id | name | id | title                                 | user_id |
+----+------+----+---------------------------------------+---------+
|  1 | john |  1 |  Hello world                          |       1 |
|  2 | May  |  2 | PHP is the best language in the world |       2 |
+----+------+----+---------------------------------------+---------+
2 rows in set (0.00 sec)

dalaman boleh ditinggalkan, kerana Untuk menyamakan jadual, anda juga boleh tinggalkan

mysql> select * from users u join topics t on u.id=t.user_id;
+----+------+----+---------------------------------------+---------+
| id | name | id | title                                 | user_id |
+----+------+----+---------------------------------------+---------+
|  1 | john |  1 |  Hello world                          |       1 |
|  2 | May  |  2 | PHP is the best language in the world |       2 |
+----+------+----+---------------------------------------+---------+
2 rows in set (0.00 sec)

Kedua-dua ayat di atas adalah bersamaan dengan

mysql> select * from users,topics where users.id=topics.user_id;
+----+------+----+---------------------------------------+---------+
| id | name | id | title                                 | user_id |
+----+------+----+---------------------------------------+---------+
|  1 | john |  1 |  Hello world                          |       1 |
|  2 | May  |  2 | PHP is the best language in the world |       2 |
+----+------+----+---------------------------------------+---------+
2 rows in set (0.00 sec)

sambung luar

  • sambung luar kiri (sambung luar kiri): Gunakan jadual pada kiri sebagai jadual utama
  • Cantuman luar kanan (cantuman luar kanan): Gunakan jadual di sebelah kanan sebagai jadual utama

Gunakan jadual tertentu sebagai jadual Utama, lakukan berkaitan pertanyaan. Tidak kira sama ada ia boleh dikaitkan atau tidak, data jadual utama akan disimpan Jika ia tidak boleh dikaitkan, ia akan dipaparkan sebagai NULL

Penjelasan yang popular ialah: keluarkan dahulu semua data jadual utama, dan kemudian pergi ke Cari yang berkaitan sama ada terdapat mana-mana data yang memenuhi syarat perkaitan dalam jadual itu. Jika ada, ia akan dipaparkan seperti biasa, ia akan dipaparkan sebagai NULL

Contoh

mysql> select * from users as u left join topics as t on u.id=t.user_id;
+----+-------+------+---------------------------------------+---------+
| id | name  | id   | title                                 | user_id |
+----+-------+------+---------------------------------------+---------+
|  1 | john  |    1 |  Hello world                          |       1 |
|  2 | May   |    2 | PHP is the best language in the world |       2 |
|  3 | Lucy  | NULL | NULL                                  |    NULL |
|  4 | Jack  | NULL | NULL                                  |    NULL |
|  5 | James | NULL | NULL                                  |    NULL |
+----+-------+------+---------------------------------------+---------+
5 rows in set (0.00 sec)

adalah bersamaan dengan yang berikut, cuma medan Kedudukannya berbeza

mysql> select * from topics as t right join users as u on u.id=t.user_id;
+------+---------------------------------------+---------+----+-------+
| id   | title                                 | user_id | id | name  |
+------+---------------------------------------+---------+----+-------+
|    1 |  Hello world                          |       1 |  1 | john  |
|    2 | PHP is the best language in the world |       2 |  2 | May   |
| NULL | NULL                                  |    NULL |  3 | Lucy  |
| NULL | NULL                                  |    NULL |  4 | Jack  |
| NULL | NULL                                  |    NULL |  5 | James |
+------+---------------------------------------+---------+----+-------+
5 rows in set (0.00 sec)

Cambung luar kiri dan cantuman luar kanan adalah relatif digunakan sebagai jadual utama untuk persatuan

[Cadangan berkaitan:tutorial video mysql

Atas ialah kandungan terperinci Apakah perbezaan antara mysql inner join dan outer join?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn