logo

SQL | Subconsulta

En SQL, una subconsulta es pot definir simplement com una consulta dins d'una altra consulta. En altres paraules, podem dir que una subconsulta és una consulta que està incrustada a la clàusula WHERE d'una altra consulta SQL. Regles importants per a les subconsultes:

  • Podeu col·locar la subconsulta en una sèrie de clàusules SQL: ON clàusula, clàusula HAVING, clàusula FROM. Les subconsultes es poden utilitzar amb sentències SELECT, UPDATE, INSERT, DELETE juntament amb l'operador d'expressió. Podria ser un operador d'igualtat o un operador de comparació com ara =,>, =, <= i operador Like.
  • Una subconsulta és una consulta dins d'una altra consulta. La consulta externa s'anomena com consulta principal i la consulta interna s'anomena com subconsulta .
  • La subconsulta generalment s'executa primer quan la subconsulta no en té cap correlació amb el consulta principal , quan hi ha una correlació l'analitzador pren la decisió sobre la marxa sobre quina consulta s'ha d'executar precedència i utilitza la sortida de la subconsulta en conseqüència.
  • La subconsulta s'ha de tancar entre parèntesis.
  • Les subconsultes es troben a la part dreta de l'operador de comparació.
  • DEMANAT PER comandament no pot utilitzar-se en una subconsulta. AGRUPAR PER L'ordre es pot utilitzar per realitzar la mateixa funció que l'ordre ORDER BY.
  • Utilitzeu operadors d'una sola fila amb subconsultes d'una sola fila. Utilitzeu operadors de diverses files amb subconsultes de diverses files.

Sintaxi: No hi ha cap sintaxi general per a les subconsultes. Tanmateix, es veu que les subconsultes s'utilitzen amb més freqüència amb la instrucció SELECT, tal com es mostra a continuació:

SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>

Taula de mostra :



BASE DE DADES

NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Ram 101 Chennai 9988775566
Raj 102 Coimbatore 8877665544
Sasi 103 Madurai 7766553344
Tractament 104 Salem 8989898989
Sumathi 105 Kanchipuram 8989856868

ESTUDIANT

NOM ROLL_NO SECCIÓ
Tractament 104 A
Sumathi 105 B
Raj 102 A

Consultes d'exemple

:

  • Per mostrar NOM, LOCATION, PHONE_NUMBER dels estudiants de la taula DATABASE la secció de la qual és A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
    Explicació: la primera subconsulta executa SELECT ROLL_NO de STUDENT on SECTION='A' retorna ROLL_NO de la taula STUDENT la SECCIÓ de la qual és 'A'. A continuació, la consulta externa l'executa i retorna el NOM, LOCATION, PHONE_NUMBER de la taula DATABASE de l'estudiant el ROLL_NO del qual. es retorna des de la subconsulta interna. Sortida:
NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Tractament 104 Salem 8989898989
Raj 102 Coimbatore 8877665544
  • Exemple d'inserció de consulta:

Taula 1: Estudiant1

NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Ram 101 chennai 9988773344
Raju 102 coimbatore 9090909090
Tractament 103 Salem 8989898989

Taula 2: Estudiant2

NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Raj 111 chennai 8787878787
Fins que 112 Bombai 6565656565
Sri 113 coimbatore 7878787878
  • Per inserir Student2 a la taula Student1:
INSERT INTO Student1 SELECT * FROM Student2;>
  • Sortida:
NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Ram 101 chennai 9988773344
Raju 102 coimbatore 9090909090
Tractament 103 Salem 8989898989
Raj 111 chennai 8787878787
Fins que 112 Bombai 6565656565
Sri 113 coimbatore 7878787878
  • Per suprimir estudiants de la taula Student2 el rollno dels quals és el mateix que el de la taula Student1 i amb la ubicació de Chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
  • Sortida:
1 row delete successfully.>
    Mostra la taula Student2:
NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Fins que 112 Bombai 6565656565
Sri 113 coimbatore 7878787878
  • Per actualitzar el nom dels estudiants a geeks a la taula Student2 la ubicació és la mateixa que Raju, Ravi a la taula Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
  • Sortida:
1 row updated successfully.>
    Mostra la taula Student2:
NOM ROLL_NO UBICACIÓ NÚMERO DE TELÈFON
Fins que 112 Bombai 6565656565
frikis 113 coimbatore 7878787878