Instrucțiune Select imbricate în SQL Server (Programare, Sql, Server Sql, Nested, Subquery, Interogare)

Brennan Vincent a intrebat.

De ce nu funcționează următorul lucru?

SELECT name FROM (SELECT name FROM agentinformation)

Cred că înțelegerea mea despre SQL este greșită, pentru că aș fi crezut că acest lucru va returna același lucru ca și

SELECT name FROM agentinformation

Instrucțiunea select internă nu creează un set de rezultate pe care instrucțiunea SELECT externă îl interoghează apoi?

2 răspunsuri
Joe Stefanelli

Trebuie să aliasați subquery.

SELECT name FROM (SELECT name FROM agentinformation) a  

sau, pentru a fi mai explicit

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

Comentarii

    83

  • Asigură-te că aliasul tău este și el oarecum verbos! Îmi place când lucrez la un studiu cu t1,t2,t3,t4,t5,t6…  > Por Doug Chamberlain.
  • Unde ar trebui să fie un where clauză pentru interogarea exterioară? –  > Por Colonel Panic.
  • @ColonelPanic: Clauza WHERE pentru interogarea exterioară ar fi adăugată chiar la sfârșit. –  > Por Joe Stefanelli.
  • „Corect, sunt un idiot! Mulțumesc, voi accepta odată ce mi se va permite.” Nah. Doar ignorant. Ca noi toți. –  > Por Lucio Mollinedo.
  • Oracle acceptă prima select fără alias. –  > Por Kjetil S..
Somnath Muluk

Răspunsul oferit de Joe Stefanelli este deja corect.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Trebuie să creăm un alias al subinterogării deoarece o interogare are nevoie de un obiect tabel pe care îl vom obține prin crearea unui alias pentru subinterogare. Din punct de vedere conceptual, rezultatele subinterogării sunt substituite în interogarea externă. Deoarece avem nevoie de un obiect tabel în interogarea externă, trebuie să creăm un alias al interogării interne.

Declarațiile care includ o interogare secundară iau de obicei una dintre aceste forme:

  • WHERE expression [NOT] IN (subquery)
  • WHERE expression comparison_operator [ANY | ALL] (subquery)
  • WHERE [NOT] EXISTS (subquery)

Verificați dacă există mai multe Reguli de subîntrebare și tipuri de subcomenzi.

Mai multe exemple de subinterogări imbricate.

  1. IN / NOT IN – Acest operator preia rezultatul interogării interne după ce interogarea internă este executată, care poate fi zero sau mai multe valori, și îl trimite la interogarea externă. Interogarea exterioară preia apoi toate rândurile care corespund [operatorului IN] sau care nu corespund [operatorului NOT IN].

  2. ANY – [>Operatorul ANY sau ANY preia lista de valori produsă de interogarea internă și extrage toate valorile care sunt mai mari decât valoarea minimă a listei. Opțiunea

ex. >ANY(100,200,300), operatorul ANY va prelua toate valorile mai mari decât 100.

  1. ALL – [>Operatorul ALL sau ALL preia lista de valori produsă de interogarea internă și extrage toate valorile care sunt mai mari decât valoarea maximă a listei. Operatorul

ex. >ALL(100,200,300), operatorul ALL va prelua toate valorile mai mari de 300.

  1. EXISTS – Cuvântul cheie EXISTS produce o valoare booleană [TRUE/FALSE]. Acest EXISTS verifică existența rândurilor returnate de interogarea secundară.