Mari kita selami aliran pelaksanaan untuk kedua-dua kaedah: Kaedah Pandangan Sebaris dan Kaedah Subkueri Berkorelasi. Memahami pelaksanaan langkah demi langkah pertanyaan ini akan membantu menjelaskan cara SQL memproses setiap senario untuk mendapatkan hasil yang diingini.
Kaedah Paparan Sebaris menggunakan subkueri dalam klausa FROM untuk mencipta set hasil sementara (paparan sebaris) dan kemudian memprosesnya dalam pertanyaan luar.
Pertanyaan:
PILIH Id Jabatan, MAX(Gaji) SEBAGAI Gaji Tertinggi
DARIPADA (
PILIH JabatanId, Gaji
DARIPADA Pekerja
) AS InlineView
KUMPULAN MENGIKUT Id Jabatan;
Langkah Pelaksanaan:
Pertanyaan dalaman (PILIH DepartmentId, Gaji DARI Pekerja) dilaksanakan terlebih dahulu.
Ia memilih lajur JabatanId dan Gaji daripada jadual Pekerja.
Langkah ini pada asasnya mencipta set hasil sementara (pandangan sebaris) yang merangkumi semua baris daripada jadual Pekerja tetapi hanya dengan lajur JabatanId dan Gaji.
Contoh hasil pertanyaan dalaman:
Selepas paparan sebaris (set hasil sementara) dibuat, pertanyaan luar mengambil set hasil ini dan melaksanakan pengagregatan menggunakan fungsi MAX(Gaji).
GROUP BY DepartmentId memastikan gaji maksimum dikira untuk setiap jabatan.
Pertanyaan luar mengimbas melalui baris dari paparan sebaris dan mengumpulkan baris berdasarkan DepartmentId. Kemudian, ia mengira gaji maksimum bagi setiap kumpulan.
Pertanyaan mengembalikan gaji tertinggi untuk setiap jabatan.
Keputusan akhir:
Ringkasan Aliran Pelaksanaan:
Laksanakan pertanyaan dalam untuk mencipta paparan sebaris.
Pertanyaan luar mengagregat (menggunakan MAX) dan mengumpulkan hasil mengikut DepartmentId.
Kembalikan keputusan akhir.
Dalam Kaedah Subkueri Berkorelasi, subkueri dalam dilaksanakan untuk setiap baris dalam pertanyaan luar, menjadikannya lebih dinamik tetapi berpotensi lebih perlahan daripada kaedah paparan sebaris.
Pertanyaan:
PILIH Id Jabatan, Id Pekerja, Gaji SEBAGAI Gaji Tertinggi
DARIPADA Pekerja e
MANA Gaji = (
PILIH MAX(Gaji)
DARIPADA Pekerja
WHERE DepartmentId = e.DepartmentId
);
Langkah Pelaksanaan:
Pertanyaan luar bermula dengan membaca setiap baris daripada jadual Pekerja.
Untuk setiap baris dalam jadual Pekerja, pertanyaan mendapatkan kembali DepartmentId, EmployeeId dan Gaji.
Contoh pemprosesan baris demi baris daripada pertanyaan luar:
Untuk setiap baris daripada pertanyaan luar, pertanyaan dalam (PILIH MAX(Gaji) DARI Pekerja DI MANA DepartmentId = e.DepartmentId) dilaksanakan.
Subkueri mengira gaji maksimum dalam jabatan yang sepadan dengan JabatanId baris semasa.
Kaitan antara pertanyaan luar dan subkueri berlaku melalui keadaan DepartmentId (WHERE DepartmentId = e.DepartmentId).
Contohnya:
Untuk baris dengan EmployeeId = 1, subquery mengira gaji maksimum untuk DepartmentId = 101, iaitu 6000.
Untuk baris dengan EmployeeId = 3, subquery mengira gaji maksimum untuk DepartmentId = 102, iaitu 7500.
Contoh pelaksanaan subkueri untuk setiap baris:
Selepas mengira gaji maksimum untuk JabatanId yang sepadan, pertanyaan luar membandingkan Gaji baris semasa dengan gaji maksimum yang dikembalikan oleh subkueri.
Jika Gaji sepadan dengan gaji maksimum jabatan, barisan itu dikekalkan.
Baris yang tidak sepadan ditapis keluar.
Contohnya:
Barisan untuk EmployeeId = 2 akan dikekalkan kerana gajinya 6000 sepadan dengan gaji maksimum di jabatan 101.
Barisan untuk EmployeeId = 1 akan ditapis kerana gajinya 5000 adalah kurang daripada gaji maksimum di jabatan 101.
Pertanyaan luar mengembalikan baris di mana gaji pekerja sepadan dengan gaji maksimum untuk jabatan mereka.
Keputusan akhir:
Ringkasan Aliran Pelaksanaan:
Untuk setiap baris dalam pertanyaan luar, laksanakan subkueri berkorelasi dalam.
Subkueri mengira gaji maksimum untuk JabatanId semasa.
Bandingkan gaji pekerja dengan hasil subkueri.
Tapis dan kembalikan baris di mana gaji pekerja sepadan dengan maksimum untuk jabatan mereka.
Différences clés dans le flux d'exécution :
Considérations relatives aux performances :
La méthode d'affichage en ligne est plus efficace lorsque vous êtes uniquement intéressé par le salaire le plus élevé de chaque département, sans avoir besoin d'informations détaillées sur les employés. Il effectue l'agrégation en un seul passage sur les données.
La méthode de sous-requête corrélée peut être plus lente pour les grands ensembles de données, car elle exécute la sous-requête pour chaque ligne de la requête externe, ce qui peut conduire à de nombreux calculs redondants. Cependant, il vous permet de récupérer à la fois le salaire le plus élevé du service et des informations détaillées sur les employés (par exemple, EmployeeId, Name).
Atas ialah kandungan terperinci Kaedah Paparan Sebaris dan Subkueri Berkorelasi dalam SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!