Pernyataan pilih bersarang di SQL Server


388

Mengapa cara berikut tidak berfungsi?

SELECT name FROM (SELECT name FROM agentinformation)

Saya kira pemahaman saya tentang SQL salah, karena saya akan berpikir ini akan mengembalikan hal yang sama

SELECT name FROM agentinformation

Bukankah pernyataan pilih dalam membuat set hasil yang kemudian diminta oleh pernyataan SELECT luar?

Jawaban:


673

Anda perlu alias subquery.

SELECT name FROM (SELECT name FROM agentinformation) a  

atau lebih eksplisit

SELECT a.name FROM (SELECT name FROM agentinformation) a  

76
Pastikan alias Anda agak bertele-tele juga! Saya suka ketika saya mulai bekerja di sebuah wuery dengan t1, t2, t3, t4, t5, t6
Doug Chamberlain

2
Di mana whereklausa akan digunakan untuk kueri luar?
Kolonel Panic

3
@ColonelPanic: Klausa WHERE untuk query luar akan ditempel di bagian paling akhir.
Joe Stefanelli

"Benar, aku idiot! Terima kasih, akan menerima begitu diizinkan." Tidak Tidak tahu apa-apa. Seperti kita semua.
Lucio Mollinedo

2
Oracle menerima yang pertama selecttanpa alias.
Kjetil S.

49

The jawaban yang diberikan oleh Joe Stefanelli sudah benar.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Kita perlu membuat alias dari subquery karena permintaan membutuhkan objek tabel yang akan kita dapatkan dari membuat alias untuk subquery. Secara konseptual, hasil subquery diganti dengan permintaan luar. Karena kita membutuhkan objek tabel dalam kueri luar, kita perlu membuat alias dari kueri dalam.

Pernyataan yang mencakup subquery biasanya mengambil salah satu dari formulir ini:

  • Ekspresi WHERE DI MANA (subquery)
  • WHERE ekspresi compar_operator [ANY | SEMUA] (subquery)
  • DIMANA [TIDAK] ADA (subquery)

Periksa aturan subquery dan jenis subquery lainnya .

Lebih banyak contoh Subqueries Bersarang.

  1. IN / NOT IN - Operator ini mengambil output dari permintaan dalam setelah permintaan dalam dieksekusi yang bisa bernilai nol atau lebih dan mengirimkannya ke permintaan luar. Query luar kemudian mengambil semua baris [operator IN] yang cocok atau yang tidak cocok [operator TIDAK IN].

  2. APA SAJA - [> APA SAJA atau APA SAJA operator mengambil daftar nilai yang dihasilkan oleh permintaan dalam dan mengambil semua nilai yang lebih besar dari nilai minimum daftar. Itu

mis. APAPUN (100.200.200), operator APA SAJA akan mengambil semua nilai lebih besar dari 100.

  1. ALL - [> ALL atau ALL operator mengambil daftar nilai yang dihasilkan oleh kueri dalam dan mengambil semua nilai yang lebih besar dari maksimum daftar. Itu

misalnya> ALL (100,200,300), operator ALL akan mengambil semua nilai yang lebih besar dari 300.

  1. EXISTS - Kata kunci EXISTS menghasilkan nilai Boolean [BENAR / SALAH]. EXISTS ini memeriksa keberadaan baris yang dikembalikan oleh sub kueri.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.