Subquery Syntax
Dimulai dengan MySQL 4.1, semua bentuk subquery dan operasi yang standar SQL membutuhkan didukung, serta beberapa fitur yang MySQL-spesifik.Berikut adalah contoh dari subquery:
SELECT * FROM t1 MANA column1 = (SELECT column1 FROM t2);
Dalam contoh ini, SELECT * FROM t1 ...
adalah permintaan luar (atau pernyataan luar), dan (SELECT column1 FROM t2)
adalah subquery. Kita mengatakan bahwa subquery bersarang
dalam permintaan luar, dan pada kenyataannya adalah mungkin untuk
subqueries sarang dalam subqueries lain, dengan kedalaman yang cukup. Sebuah subquery harus selalu muncul dalam tanda kurung. Keuntungan utama dari subqueries adalah:
- Mereka memungkinkan query yang terstruktur sehingga dimungkinkan untuk mengisolasi setiap bagian dari sebuah pernyataan.
- Mereka menyediakan cara alternatif untuk melakukan operasi yang tidak akan membutuhkan kompleks bergabung dan serikat pekerja.
- Banyak orang menemukan subqueries lebih mudah dibaca daripada kompleks bergabung atau serikat pekerja. Memang, itu adalah inovasi subqueries yang memberi orang gagasan asli memanggil SQL awal "Structured Query Language."
DELETE FROM t1 WHERE s11 > ANY (SELECT COUNT(*) /* no hint */ FROM t2 WHERE NOT EXISTS (SELECT * FROM t3 WHERE ROW(5*t2.s1,77)= (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM (SELECT * FROM t5) AS t5)));
Sebuah subquery dapat kembali skalar (nilai tunggal), satu baris, satu kolom, atau meja (satu atau lebih baris dari satu atau lebih kolom). Ini disebut subqueries skalar, kolom, baris, dan meja. Subqueries yang kembali jenis tertentu hasil sering dapat digunakan hanya dalam konteks tertentu, seperti yang dijelaskan dalam bagian berikut.
Ada beberapa pembatasan pada jenis laporan yang subqueries dapat digunakan. Sebuah subquery dapat berisi banyak kata kunci atau klausul bahwa biasa
SELECT
dapat berisi: DISTINCT
, GROUP BY
, ORDER BY
, LIMIT
, bergabung, petunjuk indeks, UNION
konstruksi, komentar, fungsi, dan sebagainya. Pernyataan luar A subquery bisa menjadi salah satu dari:
SELECT
, INSERT
, UPDATE
, DELETE
, SET
, atau DO
. Di MySQL, Anda tidak dapat mengubah meja dan pilih dari tabel yang sama dalam suatu subquery. Hal ini berlaku untuk pernyataan seperti
DELETE
, INSERT
, REPLACE
, UPDATE
, dan (karena subqueries dapat digunakan dalam SET
klausul) LOAD DATA INFILE
. Untuk informasi tentang bagaimana optimizer menangani subqueries, lihat Bagian 8.3.1.14, "Mengoptimalkan Subqueries dengan
EXISTS
Strategy " .
Untuk diskusi tentang pembatasan penggunaan subquery, termasuk masalah
kinerja untuk bentuk-bentuk tertentu dari sintaks subquery, lihat Bagian D.3, "Pembatasan Subqueries" .sumber