Our social:

Rabu, 25 Juni 2014

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."
Berikut ini adalah pernyataan contoh yang menunjukkan poin utama tentang sintaks subquery seperti yang ditetapkan oleh standar SQL dan didukung di MySQL:
 
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