Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apa perbedaan antara menggunakan dan bergabung dalam tabel di MySQL?

Saya tidak menggunakan sintaks MENGGUNAKAN, karena

  1. sebagian besar gabungan saya tidak cocok untuk itu (bukan nama bidang yang sama yang dicocokkan, dan/atau beberapa kecocokan dalam gabungan) dan
  2. tidak jelas apa terjemahannya dalam kasus dengan lebih dari dua tabel

yaitu dengan asumsi 3 tabel dengan kolom 'id' dan 'id_2', bukan

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

menjadi

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

atau

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

atau sesuatu yang lain lagi?

Menemukan ini untuk versi database tertentu adalah latihan yang cukup sepele, tetapi saya tidak memiliki keyakinan besar bahwa itu konsisten di semua database, dan saya bukan satu-satunya orang yang harus mempertahankan kode saya (jadi orang lain juga harus mengetahui apa yang setara dengannya).

Perbedaan yang jelas dengan WHERE vs ON adalah jika gabungannya berada di luar:

Dengan asumsi T1 dengan bidang ID tunggal, satu baris berisi nilai 1, dan T2 dengan bidang ID dan VALUE (satu baris, ID=1, VALUE=6), maka kita mendapatkan:

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

tidak memberikan baris, karena WHERE harus cocok, sedangkan

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

akan memberikan satu baris dengan nilai

1, NULL, NULL

karena AKTIF hanya diperlukan untuk mencocokkan gabungan, yang bersifat opsional karena berada di luar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menerapkan sistem filter dalam SQL?

  2. Cara melewatkan nilai database dalam hyperlink menggunakan PHP + HTML

  3. Bagaimana cara menekan output dan memeriksa apakah suatu perintah berhasil atau tidak?

  4. Ubah batas untuk ukuran Baris Mysql terlalu besar

  5. Perbaiki "ERROR 1250 (42000):Tabel '...' dari salah satu SELECT tidak dapat digunakan dalam klausa ORDER global" saat menggunakan UNION di MySQL