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

Dalam kueri MySQL, mengapa menggunakan join alih-alih di mana?

Setiap kueri yang melibatkan lebih dari satu tabel memerlukan beberapa bentuk asosiasi untuk menautkan hasil dari tabel "A" ke tabel "B". Cara tradisional (ANSI-89) untuk melakukan ini adalah:

  1. Daftar tabel yang terlibat dalam daftar yang dipisahkan koma dalam klausa FROM
  2. Tulis asosiasi antar tabel dalam klausa WHERE

    SELECT *
      FROM TABLE_A a,
           TABLE_B b
     WHERE a.id = b.id
    

Berikut kueri yang ditulis ulang menggunakan sintaks ANSI-92 JOIN:

SELECT *
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

Dari Perspektif Kinerja:

Jika didukung (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), tidak ada manfaat kinerja untuk menggunakan salah satu sintaks di atas yang lain. Pengoptimal melihatnya sebagai kueri yang sama. Tetapi kueri yang lebih kompleks dapat memanfaatkan sintaks ANSI-92:

  • Kemampuan untuk mengontrol JOIN order - urutan tabel yang dipindai
  • Kemampuan untuk menerapkan kriteria filter pada tabel sebelum bergabung

Dari Perspektif Pemeliharaan:

Ada banyak alasan untuk menggunakan sintaks ANSI-92 JOIN daripada ANSI-89:

  • Lebih mudah dibaca, karena kriteria GABUNG terpisah dari klausa WHERE
  • Kemungkinan kecil untuk melewatkan kriteria GABUNG
  • Dukungan sintaks yang konsisten untuk tipe JOIN selain INNER, membuat kueri mudah digunakan di database lain
  • klausa WHERE hanya berfungsi sebagai penyaringan produk kartesius dari tabel yang digabungkan

Dari Perspektif Desain:

Sintaks ANSI-92 JOIN adalah pola, bukan anti-pola:

  • Tujuan kueri lebih jelas; kolom yang digunakan aplikasi jelas
  • Ini mengikuti aturan modularitas tentang penggunaan pengetikan yang ketat bila memungkinkan. Eksplisit hampir secara universal lebih baik.

Kesimpulan

Karena keakraban dan/atau kenyamanan, saya tidak melihat manfaat apa pun untuk terus menggunakan klausa ANSI-89 WHERE alih-alih sintaks ANSI-92 JOIN. Beberapa mungkin mengeluh bahwa sintaks ANSI-92 lebih bertele-tele, tapi itulah yang membuatnya eksplisit. Semakin eksplisit, semakin mudah untuk dipahami dan dipelihara.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengimpor data CSV menggunakan PHP/MySQL

  2. 'JIKA' dalam pernyataan 'PILIH' - pilih nilai keluaran berdasarkan nilai kolom

  3. Cara Mengonversi Karakter Huruf Besar ke Huruf Kecil di MySQL

  4. Hapus baris duplikat di MySQL

  5. Apa cara yang diketahui untuk menyimpan struktur pohon dalam DB relasional?