Dalam MySQL JOIN
, apa perbedaan antara ON
dan USING()
? Sejauh yang saya tahu, USING()
hanya sintaksis yang lebih nyaman, sedangkan ON
memungkinkan sedikit lebih banyak fleksibilitas ketika nama kolom tidak identik. Namun, perbedaan itu sangat kecil, Anda akan berpikir mereka hanya akan menghapus begitu saja USING()
.
Apakah ada yang lebih dari sekadar memenuhi mata? Jika ya, yang mana yang harus saya gunakan dalam situasi tertentu?
using
memiliki penggunaan lain selain bergabung. Lihat stackoverflow.com/a/13750399/632951Jawaban:
Ini sebagian besar gula sintaksis, tetapi beberapa perbedaan patut diperhatikan:
ON adalah yang lebih umum dari keduanya. Satu dapat bergabung tabel PADA kolom, satu set kolom dan bahkan suatu kondisi. Sebagai contoh:
MENGGUNAKAN berguna ketika kedua tabel berbagi kolom dengan nama yang sama persis di mana mereka bergabung. Dalam hal ini, dapat dikatakan:
Perlakukan bagus tambahan adalah bahwa seseorang tidak perlu memenuhi syarat sepenuhnya kolom bergabung:
Untuk mengilustrasikan, untuk melakukan hal di atas dengan ON , kita harus menulis:
Perhatikan
film.film_id
kualifikasi dalamSELECT
klausa. Tidak sah hanya mengatakanfilm_id
karena itu akan membuat ambiguitas:Adapun
select *
, kolom bergabung muncul di hasil yang ditetapkan dua kali denganON
sementara itu hanya muncul sekali denganUSING
:sumber
USING
penerjemahON
.USING(
kategori,
field_id)
yang berguna ketika bergabung dengan kunci primer komposit, juga saya mendengar bahwa pengoptimal memang digunakanUSING
untuk meningkatkan kinerja dalam beberapa kasusUSING
definisi MySQL atau standar?Kupikir aku akan bermain di sini dengan ketika aku telah menemukan
ON
lebih bermanfaat daripadaUSING
. Saat itulahOUTER
bergabung diperkenalkan ke pertanyaan.ON
manfaat dari mengijinkan kumpulan hasil dari tabel dimana kueriOUTER
bergabung menjadi dibatasi sementara mempertahankanOUTER
gabungan. Mencoba membatasi hasil yang ditetapkan melalui menentukanWHERE
klausa akan, secara efektif, mengubahOUTER
bergabung menjadiINNER
bergabung.Memang ini mungkin kasus sudut relatif. Layak diletakkan di sana .....
Sebagai contoh:
sumber
using
disediakan, tidak dapat digabungkan dengan predikat lain:select*from t join t2 using(i) and on 1
tidak akan berfungsi.where hasAirport ;
- Apa artinya ini ? tidak ada nilai yang bisa dibandingkan.SELECT * FROM country LEFT JOIN city ON country.countryId=city.countryId AND city.city BETWEEN 'C' AND 'E'
akan mendaftar semua negara tetapi hanya kota yang dimulai dengan C atau D (jika ada). (Plus kota yang disebut 'E')Wikipedia memiliki informasi berikut tentang
USING
:Tabel yang dibicarakan:
The Postgres dokumentasi juga mendefinisikan mereka cukup baik:
sumber
Bagi yang bereksperimen dengan ini di phpMyAdmin, cukup kata:
phpMyAdmin tampaknya memiliki beberapa masalah dengan
USING
. Sebagai catatan, ini adalah phpMyAdmin yang berjalan di Linux Mint, versi: "4.5.4.1deb2ubuntu2", server database: "10.2.14-MariaDB-10.2.14 + maria ~ xenial - mariadb.org binary distribution".Saya telah menjalankan
SELECT
perintah menggunakanJOIN
danUSING
di phpMyAdmin dan di Terminal (command line), dan yang di phpMyAdmin menghasilkan beberapa tanggapan membingungkan:1)
LIMIT
klausa di bagian akhir tampaknya diabaikan.2) dugaan jumlah baris seperti yang dilaporkan di bagian atas halaman dengan hasil kadang-kadang salah: misalnya 4 dikembalikan, tetapi di atas dikatakan "Menampilkan baris 0 - 24 (total 2503, Kueri butuh 0,0018 detik.) "
Masuk ke mysql secara normal dan menjalankan kueri yang sama tidak menghasilkan kesalahan ini. Kesalahan ini juga tidak terjadi ketika menjalankan kueri yang sama di phpMyAdmin menggunakan
JOIN ... ON ...
. Agaknya bug phpMyAdmin.sumber