Rumah > pangkalan data > tutorial mysql > SQL Joins: Apakah Perbezaan Prestasi dan Sintaks Antara USING, ON, dan WHERE?

SQL Joins: Apakah Perbezaan Prestasi dan Sintaks Antara USING, ON, dan WHERE?

DDD
Lepaskan: 2025-01-21 21:51:15
asal
527 orang telah melayarinya

SQL Joins: What are the Performance and Syntax Differences Between USING, ON, and WHERE?

Kaedah SQL JOIN: prestasi dan perbezaan sintaks USING, ON dan WHERE

SQL menyediakan beberapa pilihan untuk menyertai jadual: USING, ON dan WHERE. Walaupun kefungsian pilihan ini adalah serupa, salah faham tentang prestasi dan makna sintaksisnya mungkin timbul. Artikel ini meneroka perbezaan antara kaedah sambungan ini.

Prestasi

Bertentangan dengan kepercayaan popular, tiada perbezaan prestasi yang ketara antara tiga kaedah sambungan. Ketiga-tiga kaedah menghasilkan pelan pertanyaan yang dioptimumkan yang sama.

Sintaksis dan semantik

Sintaks ANSI:

  • SERTAI ​​(diperkenalkan dalam ANSI-92) ialah sintaks yang disyorkan untuk melaksanakan gabungan. Ia menggunakan klausa ON untuk mentakrifkan syarat gabungan secara eksplisit.
  • WHERE (ANSI-89) membenarkan penggunaan klausa WHERE untuk menentukan syarat gabungan, tetapi ia telah ditamatkan kerana kemungkinan isu kebolehbacaan dan kesamaran.

GUNAKAN sintaks:

  • USING (diperkenalkan dalam SQL:2003) ialah sintaks singkatan yang menggunakan kata kunci USING untuk menentukan lajur biasa antara jadual yang digabungkan. Ia menyediakan sintaks yang ringkas dan intuitif.

Kekaburan "menyertai di mana" (tersirat JOIN DALAM)

Menggunakan klausa WHERE untuk menentukan syarat cantuman boleh membawa kepada kesamaran, terutamanya dalam jenis cantuman luar. Masalahnya berpunca daripada susunan pemprosesan pertanyaan logik dalam SQL Server, di mana FROM dinilai sebelum WHERE. "join the where" mungkin secara tidak sengaja mencipta produk Cartesian atau menghasilkan hasil yang tidak dijangka.

Kekaburan tatabahasa:

Dua pertanyaan berikut menggambarkan kekaburan sintaks yang boleh timbul apabila mencampurkan cantuman dalam tersirat dalam klausa WHERE dengan cantuman luar eksplisit dalam klausa FROM:

<code class="language-sql">FROM T1, T2, T3
WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42

FROM T1 
INNER JOIN T2 ON T1.ID = T2.ID
INNER JOIN T3 ON T1.ID = T3.ID
WHERE T1.foo = 'bar' AND T2.fish = 42</code>
Salin selepas log masuk

Kekaburan timbul daripada ketidakupayaan untuk menentukan dengan jelas sambungan mana yang luaran dan yang mana dalaman.

Cadangan:

Untuk kejelasan, ketekalan dan keserasian dengan piawaian SQL moden, adalah disyorkan:

  • Gunakan cantuman eksplisit (SERTAI sintaks dengan klausa ON) untuk semua cantuman.
  • Elakkan menggunakan "menyertai di mana" (tersirat Inner JOIN dalam klausa WHERE).
  • Gunakan sintaks ANSI-92 (SERTAI dengan klausa ON) untuk keserasian merentas platform.

Atas ialah kandungan terperinci SQL Joins: Apakah Perbezaan Prestasi dan Sintaks Antara USING, ON, dan WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan