Apa subqueri yang berkorelasi?

Subquery yang terkorelasi adalah penggunaan SQL yang canggih.

SQL

Database relasional yang paling modern menggabungkan SQL untuk menambah dan memperbarui data, membuat struktur dan mengumpulkan informasi. SQL didasarkan pada teori tentang data yang dikembangkan pada tahun 1970 dan terus disempurnakan sejak saat itu. Ini terdiri dari seperangkat negara, termasuk SELECT, INSERT, CREATE dan DELETE, diikuti oleh beberapa klausul yang menentukan data dan opsi yang dikelola, seperti pengurutan dan grup. Penggunaan database secara luas adalah karena fleksibilitas dan kecanggihan SQL; Ini memungkinkan organisasi untuk menganalisis kelompok data yang kompleks dalam banyak cara.

Pertanyaan dan subkueri

Perintah SQL untuk mengambil data disebut query. Biasanya, programmer menggunakan pernyataan permintaan SELECT, meskipun banyak aturan untuk pencarian data juga berlaku untuk INSERT, DELETE, dan UPDATE. Queri SELECT sederhana dapat menampilkan isi tabel data, seperti pernyataan berikut:

PILIH * DARI inventaris;

Kueri ini menampilkan semua rekaman dalam tabel yang disebut "Inventaris" Anda bisa mendapatkan hasil dari kueri yang lebih spesifik dengan menambahkan pengujian bersyarat, seperti dalam pernyataan "inventaris" ini:

SELECT * FROM inventory WHERE warehouse_code = 'chicago5';

Pernyataan ini menunjukkan catatan inventaris Anda dari kode deposit, chicago5.

Subkueri adalah kueri dalam kueri lain. Pernyataan berikut mencantumkan catatan inventaris barang-barang tersebut bahwa simpanan berada di wilayah tertentu:

SELECT * FROM inventory WHERE warehouse_code IN (PILIH gudang_code DARI gudang DI MANA wilayah = 'midwest');

Perhatikan bahwa kueri ini memiliki dua pernyataan SELECT, yang menunjukkan catatan inventaris dan lainnya yang menetapkan kueri utama dengan kode setoran.

Subquery berkorelasi

Dalam subkueri yang berkorelasi, kueri utama dan bawahan mengekstrak data dari tabel yang sama. Permintaan internal melakukan fungsi agregat, seperti statistik, dan feed informasi ini ke permintaan eksternal, yang menggunakannya sebagai dasar perbandingan. Misalnya, subquery berkorelasi ini menghasilkan daftar catatan inventaris untuk item dengan harga di atas rata-rata setoran. Kueri eksternal meneruskan informasi dari setoran ke kueri internal dan kueri internal mengirimkan harga rata-rata kembali ke kueri eksternal:

SELECT part_number, price, warehouse_code FROM inventaris i1 WHERE price> (PILIH AVG (harga) DARI inventaris i2 WHERE warehouse_code.i1 = warehouse_code.i2);

Kedua pertanyaan menggunakan tabel alias "I1" dan "I2". Meskipun mereka merujuk ke tabel yang sama, penggunaan alias memungkinkan kueri diperlakukan sebagai dua entitas yang terpisah.

Kekurangan operasi

Untuk subkueri yang berkorelasi, SQL mengevaluasi kueri internal satu kali untuk setiap rekaman dalam kueri luar. Ketika ukuran tabel menjadi lebih besar, prosesnya membutuhkan waktu lebih lama. Jika Anda menemukan bahwa subquery yang terkorelasi memerlukan waktu yang sangat lama untuk diselesaikan, pertimbangkan untuk menggunakan alternatif, seperti memuat tabel sementara dengan hasil antara, dan kemudian memproses tabel sementara langsung terhadap tabel utama dengan subkueri sederhana. Meski kurang elegan, itu bisa jauh lebih cepat.