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

Gabung kiri atau pilih dari beberapa tabel menggunakan koma (,)

Pertama-tama, agar benar-benar setara, kueri pertama seharusnya ditulis

   SELECT mw.*, 
          nvs.* 
     FROM mst_words mw 
LEFT JOIN (SELECT *
             FROM vocab_stats 
            WHERE owner = 1111) AS nvs ON mw.no = nvs.vocab_no 
    WHERE (nvs.correct > 0 ) 
      AND mw.level = 1

Sehingga mw.* dan nvs.* bersama-sama menghasilkan set yang sama dengan singular *. Kueri seperti yang Anda tulis dapat menggunakan INNER JOIN, karena menyertakan filter di nvs.correct.

Bentuk umum

TABLEA LEFT JOIN TABLEB ON <CONDITION>

attempts untuk menemukan record TableB berdasarkan kondisi. Jika gagal, hasil dari TABLEA akan disimpan, dengan semua kolom dari TableB disetel ke NULL. Sebaliknya

TABLEA INNER JOIN TABLEB ON <CONDITION>

juga attempts untuk menemukan record TableB berdasarkan kondisi. Namun , ketika gagal, record tertentu dari TableA dihapus dari kumpulan hasil keluaran.

Standar ANSI untuk CROSS JOIN menghasilkan Produk Cartesian antara dua tabel.

TABLEA CROSS JOIN TABLEB
  -- # or in older syntax, simply using commas
TABLEA, TABLEB

Maksud dari sintaks adalah bahwa SETIAP baris di TABLEA bergabung dengan SETIAP baris di TABLEB. Jadi 4 baris di A dan 3 baris di B menghasilkan 12 baris output. Ketika dipasangkan dengan kondisi dalam klausa WHERE, terkadang menghasilkan perilaku INNER JOIN yang sama, karena keduanya mengekspresikan hal yang sama (kondisi antara A dan B => keep atau tidak). Namun, jauh lebih jelas saat membaca maksud penggunaan INNER JOIN daripada koma.

Dari segi kinerja, sebagian besar DBMS akan memproses LEFT join lebih cepat daripada INNER JOIN. Notasi koma dapat menyebabkan sistem database salah menafsirkan maksud dan menghasilkan rencana kueri yang buruk - jadi nilai tambah lainnya untuk notasi SQL92.

Mengapa kita perlu LEFT JOIN? Jika penjelasan LEFT JOIN di atas masih belum cukup (simpan catatan di A tanpa kecocokan di B), maka pertimbangkan bahwa untuk mencapai hal yang sama, Anda memerlukan UNION kompleks antara dua set menggunakan notasi koma lama untuk mencapai efek yang sama . Tapi seperti yang dinyatakan sebelumnya , ini tidak berlaku untuk contoh Anda, yang sebenarnya adalah INNER JOIN yang bersembunyi di balik LEFT JOIN.

Catatan:

  • RIGHT JOIN sama dengan LEFT, kecuali dimulai dengan TABLEB (sisi kanan), bukan A.
  • RIGHT dan LEFT JOINS keduanya merupakan OUTER join. Kata OUTER bersifat opsional, yaitu dapat ditulis sebagai LEFT OUTER JOIN .
  • Jenis OUTER join yang ketiga adalah FULL OUTER join, tetapi itu tidak dibahas di sini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pertimbangan DevOps untuk Penerapan Basis Data Siap Produksi

  2. Memicu panggilan dalam penghapusan kaskade

  3. Kunci asing MySQL pada diri sendiri

  4. kenaikan otomatis primer meninggalkan celah dalam penghitungan

  5. Apakah MySQL Short Circuit fungsi IF()?