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

Dalam SQL, apa perbedaan antara JOIN dan CROSS JOIN?

SQL memiliki jenis gabungan berikut, yang semuanya berasal langsung dari teori himpunan:

  • Gabungan batin.
    From A inner join B adalah ekuivalen dengan A B, menyediakan himpunan elemen yang sama untuk kedua himpunan.

  • Gabung luar kiri.
    From A left outer join B adalah setara dengan (A B) (A B). Setiap A akan muncul setidaknya sekali; jika ada beberapa B yang cocok, A akan diulang satu kali per B yang cocok.

  • Gabung luar kanan.
    From A right outer join B adalah setara dengan (A B) (B A). Ini identik dengan gabungan kiri dengan meja tempat perdagangan. Setiap B akan muncul setidaknya sekali; jika ada beberapa As yang cocok, setiap B akan diulang satu kali per pencocokan B.

  • Gabungan luar penuh.
    From A full outer join B adalah setara dengan (A B) (A B) (B A). Setiap A dan setiap B akan muncul setidaknya sekali. Jika A cocok dengan beberapa B, itu akan diulang sekali per pertandingan; jika a B cocok dengan beberapa As, itu akan diulang sekali per pertandingan.

  • Gabung Salib.
    From A cross join B menghasilkan produk kartesius A × B. Setiap A akan diulang sekali untuk setiap B. Jika A memiliki 100 baris dan B memiliki 100 baris, himpunan hasil akan terdiri dari 10.000 baris.

Perlu dicatat bahwa eksekusi teoritis dari select kueri terdiri dari langkah-langkah berikut yang dilakukan dalam urutan ini:

  1. Hitung produk kartesius lengkap dari kumpulan sumber di from klausa untuk mengungguli kumpulan hasil kandidat.

  2. Terapkan kriteria bergabung di from klausa dan kurangi kumpulan hasil kandidat.

  3. Terapkan kriteria dalam where clause untuk lebih mengurangi kumpulan hasil kandidat.

  4. partisi hasil kandidat yang ditetapkan ke dalam grup berdasarkan kriteria dalam group by klausa.

  5. Hapus dari hasil kandidat, atur kolom apa pun selain yang terlibat dalam group by klausa atau terlibat dalam evaluasi fungsi agregat.

  6. Hitung nilai fungsi agregat tersebut untuk setiap grup dalam kumpulan hasil kandidat.

  7. Ciutkan setiap grup dalam kumpulan hasil kandidat menjadi satu baris yang terdiri dari kolom pengelompokan dan nilai yang dihitung untuk setiap fungsi agregat. Kumpulan hasil kandidat sekarang terdiri dari satu baris untuk setiap grup, dengan semua kolom selain group by kolom atau nilai komputasi dari fungsi agregat untuk grup dihilangkan.

  8. Terapkan kriteria di having klausa untuk mengurangi kumpulan hasil kandidat dan menghasilkan kumpulan hasil akhir.

  9. Urutkan hasil akhir sesuai kriteria di order by klausa dan memancarkannya.

Ada lebih banyak langkah, berkaitan dengan hal-hal seperti compute dan compute by klausa, tetapi ini cukup untuk mendapatkan gagasan teoretis tentang cara kerjanya.

Perlu juga dicatat bahwa tidak ada yang lain selain implementasi yang paling naif yang benar-benar mengevaluasi select pernyataan dengan cara ini, tetapi hasil yang dihasilkan harus sama seperti jika langkah-langkah di atas dilakukan secara penuh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat tombol kirim, hapus dan perbarui pada formulir yang sama,php

  2. Bagaimana Anda memperbarui beberapa bidang dari tabel lain di mysql?

  3. Nama indeks yang sama untuk dua tabel

  4. Instal Mtop (Pemantauan Server Database MySQL) di RHEL/CentOS 6/5/4, Fedora 17-12

  5. Cara terbaik untuk mencari sebagian kata dalam kumpulan data MySQL yang besar