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 |