En SQL, una subconsulta se puede definir simplemente como una consulta dentro de otra consulta. En otras palabras podemos decir que una Subconsulta es una consulta que está incrustada en la cláusula WHERE de otra consulta SQL. Reglas importantes para subconsultas:
- Puede colocar la subconsulta en varias cláusulas SQL: DÓNDE cláusula, cláusula HAVING, cláusula FROM. Las subconsultas se pueden utilizar con declaraciones SELECT, UPDATE, INSERT, DELETE junto con el operador de expresión. Podría ser un operador de igualdad o un operador de comparación como =,>, =, <= y el operador Me gusta.
- Una subconsulta es una consulta dentro de otra consulta. La consulta externa se llama como consulta principal y la consulta interna se llama como subconsulta .
- La subconsulta generalmente se ejecuta primero cuando la subconsulta no tiene ningún correlación con el consulta principal , cuando hay una correlación el analizador toma la decisión sobre la marcha en qué consulta ejecutar precedencia y utiliza la salida de la subconsulta en consecuencia.
- La subconsulta debe estar entre paréntesis.
- Las subconsultas están en el lado derecho del operador de comparación.
- ORDENAR POR dominio no puedo ser utilizado en una subconsulta. AGRUPAR POR El comando se puede utilizar para realizar la misma función que el comando ORDER BY.
- Utilice operadores de una sola fila con subconsultas de una sola fila. Utilice operadores de varias filas con subconsultas de varias filas.
Sintaxis: No existe ninguna sintaxis general para las subconsultas. Sin embargo, se considera que las subconsultas se utilizan con mayor frecuencia con la instrucción SELECT, como se muestra a continuación:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Tabla de muestra :
BASE DE DATOS
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO |
|---|---|---|---|
| RAM | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| sasi | 103 | Madurai | 7766553344 |
| Tratamiento | 104 | Salem | 8989898989 |
| sumati | 105 | Kanchipuram | 8989856868 |
ALUMNO
| NOMBRE | ROLL_NO | SECCIÓN |
|---|---|---|
| Tratamiento | 104 | A |
| sumati | 105 | B |
| Raj | 102 | A |
Consultas de muestra
:
- Para mostrar NOMBRE, UBICACIÓN, NÚMERO DE TELÉFONO de los estudiantes de la tabla BASE DE DATOS cuya sección es A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Explicación: La primera subconsulta ejecuta SELECT ROLL_NO de ESTUDIANTE donde SECCIÓN = 'A' devuelve ROLL_NO de la tabla ESTUDIANTE cuya SECCIÓN es 'A'. Luego, la consulta externa la ejecuta y devuelve el NOMBRE, UBICACIÓN, NÚMERO DE TELÉFONO de la tabla BASE DE DATOS del estudiante cuyo ROLL_NO se devuelve de la subconsulta interna. Producción:
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO |
| Tratamiento | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Insertar ejemplo de consulta:
Tabla1: Estudiante1
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO | |
|---|---|---|---|---|
| RAM | 101 | chennai | 9988773344 | |
| raju | 102 | coimbatore | 9090909090 | |
| Tratamiento | 103 | salem | 8989898989 |
Tabla2: Estudiante2
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO | |
|---|---|---|---|---|
| Raj | 111 | chennai | 8787878787 | |
| Hasta | 112 | Bombay | 6565656565 | |
| sri | 113 | coimbatore | 7878787878 |
- Para insertar Estudiante2 en la tabla Estudiante1:
INSERT INTO Student1 SELECT * FROM Student2;>
- Producción:
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO | |
|---|---|---|---|---|
| RAM | 101 | chennai | 9988773344 | |
| raju | 102 | coimbatore | 9090909090 | |
| Tratamiento | 103 | salem | 8989898989 | |
| Raj | 111 | chennai | 8787878787 | |
| Hasta | 112 | Bombay | 6565656565 | |
| sri | 113 | coimbatore | 7878787878 |
- Para eliminar estudiantes de la tabla Student2 cuyo número de lista sea el mismo que el de la tabla Student1 y que tengan una ubicación en Chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Producción:
1 row delete successfully.>
- Mostrar tabla Student2:
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO | |
|---|---|---|---|---|
| Hasta | 112 | Bombay | 6565656565 | |
| sri | 113 | coimbatore | 7878787878 |
- Para actualizar el nombre de los estudiantes a geeks en la tabla Student2 cuya ubicación es la misma que Raju, Ravi en la tabla Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Producción:
1 row updated successfully.>
- Mostrar tabla Student2:
| NOMBRE | ROLL_NO | UBICACIÓN | NÚMERO DE TELÉFONO | |
|---|---|---|---|---|
| Hasta | 112 | Bombay | 6565656565 | |
| frikis | 113 | coimbatore | 7878787878 |