Menerapkan pernyataan bersyarat di ON / WHERE
Di sini saya telah menjelaskan tentang langkah-langkah pemrosesan query logis.
Referensi: Di dalam Microsoft® SQL Server ™ 2005 T-SQL
Penerbit Querying : Microsoft Press
Pub Tanggal: 07 Maret 2006
Cetak ISBN-10: 0-7356-2313-9
Cetak ISBN-13: 978-0-7356-2313-2
Halaman: 640
Di dalam Microsoft® SQL Server ™ 2005 T-SQL Querying
(8) SELECT (9) DISTINCT (11) TOP <top_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
Aspek pertama yang terlihat dari SQL yang berbeda dari bahasa pemrograman lain adalah urutan di mana kode diproses. Di sebagian besar bahasa pemrograman, kode diproses sesuai urutan penulisan. Dalam SQL, klausa pertama yang diproses adalah klausa FROM, sedangkan klausa SELECT, yang muncul pertama, diproses hampir terakhir.
Setiap langkah menghasilkan tabel virtual yang digunakan sebagai input ke langkah berikut. Tabel virtual ini tidak tersedia untuk pemanggil (aplikasi klien atau permintaan luar). Hanya tabel yang dihasilkan oleh langkah terakhir yang dikembalikan ke pemanggil. Jika klausa tertentu tidak ditentukan dalam kueri, langkah yang sesuai hanya dilewati.
Deskripsi Singkat Fase Pemrosesan Kueri Logis
Jangan terlalu khawatir jika uraian langkah-langkahnya tampaknya tidak masuk akal untuk saat ini. Ini disediakan sebagai referensi. Bagian yang datang setelah contoh skenario akan mencakup langkah-langkah lebih detail.
DARI: Produk Cartesian (cross join) dilakukan antara dua tabel pertama dalam klausa FROM, dan sebagai hasilnya, tabel virtual VT1 dihasilkan.
ON: Filter ON diterapkan ke VT1. Hanya baris yang <join_condition>
BENAR yang dimasukkan ke VT2.
OUTER (gabung): Jika OUTER JOIN ditentukan (sebagai lawan dari CROSS JOIN atau INNER JOIN), baris dari tabel yang diawetkan atau tabel yang tidak ditemukan kecocokan ditambahkan ke baris dari VT2 sebagai baris luar, menghasilkan VT3. Jika lebih dari dua tabel muncul dalam klausa FROM, langkah 1 hingga 3 diterapkan berulang kali antara hasil dari join terakhir dan tabel berikutnya dalam klausa FROM sampai semua tabel diproses.
WHERE: Filter WHERE diterapkan ke VT3. Hanya baris yang <where_condition>
BENAR yang dimasukkan ke VT4.
KELOMPOK OLEH: Baris dari VT4 disusun dalam kelompok berdasarkan daftar kolom yang ditentukan dalam klausa GROUP BY. VT5 dihasilkan.
CUBE | ROLLUP: Supergroups (grup grup) ditambahkan ke baris dari VT5, menghasilkan VT6.
HAVING: Filter HAVING diterapkan ke VT6. Hanya grup yang <having_condition>
bernilai BENAR yang dimasukkan ke VT7.
SELECT: Daftar SELECT diproses, menghasilkan VT8.
DISTINCT: Baris duplikat dihapus dari VT8. VT9 dihasilkan.
ORDER BY: Baris dari VT9 diurutkan berdasarkan daftar kolom yang ditentukan dalam klausa ORDER BY. Kursor dihasilkan (VC10).
TOP: Jumlah atau persentase baris yang ditentukan dipilih dari awal VC10. Tabel VT11 dihasilkan dan dikembalikan ke pemanggil.
Karenanya, (INNER JOIN) ON akan memfilter data (jumlah data VT akan berkurang di sini sendiri) sebelum menerapkan klausa WHERE. Kondisi gabungan selanjutnya akan dieksekusi dengan data yang difilter yang meningkatkan kinerja. Setelah itu hanya kondisi WHERE yang akan menerapkan kondisi filter.
(Menerapkan pernyataan bersyarat dalam ON / WHERE tidak akan membuat banyak perbedaan dalam beberapa kasus. Ini tergantung pada berapa banyak tabel yang Anda telah bergabung dan jumlah baris yang tersedia di setiap tabel bergabung)