|
Il est possible d’imbriquer une instruction SQL dans une autre. Lorsque cette opération est effectuée sur les instructions WHERE ou HAVING, nous obtenons une construction de sous-requête.
La syntaxe est comme suit :
SELECT "nom de colonne 1"
FROM "nom de table 1"
WHERE "nom de colonne 2" [opérateur de comparaison]
(SELECT "nom de colonne 3"
FROM "nom de table 2"
WHERE [condition])
[opérateur de comparaison] peut être un opérateur d’égalité tel que =, >, <, >=, <=. Il peut être aussi un opérateur de texte tel que "LIKE". La partie en rouge est considérée comme "requête interne", alors que la partie en vert est considérée comme "requête externe".
Utilicemos el mismo ejemplo mostrado para ilustrar las uniones SQL:
Tabla Store_Information
| store_name |
Sales |
Date |
| Los Angeles |
1500 € |
05-Jan-1999 |
| San Diego |
250 € |
07-Jan-1999 |
| Los Angeles |
300 € |
08-Jan-1999 |
| Boston |
700 € |
08-Jan-1999 |
Tabla Geography
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San Diego |
y deseamos utilizar una subconsulta para encontrar las ventas de todos los negocios en la región Oeste. Para hacerlo, utilizamos la siguiente instrucción SQL:
SELECT SUM(Sales) FROM Store_Information
WHERE Store_name IN
(SELECT store_name FROM Geography
WHERE region_name = 'West')
Resultado:
En este ejemplo, en vez de juntar las dos tablas directamente y luego sólo agregar la suma de ventas para los negocios en la región Oeste, primero utilizamos la subconsulta para encontrar que negocios están en la región Oeste, y luego agregamos la suma de ventas para estos negocios.
En el ejemplo anterior, la consulta interna se ejecuta primero, y luego el resultado se ingresa en la consulta externa. Este tipo de subconsulta se denomina subconsulta simple. Si la consulta interna depende de la consulta externa, obtendremos la subconsulta correlacionada. A continuación se muestra un ejemplo de una subconsulta correlacionada :
SELECT SUM(a1.Sales) FROM Store_Information a1
WHERE a1.Store_name IN
(SELECT store_name FROM Geography a2
WHERE a2.store_name = a1.store_name)
Note la cláusula WHERE en la consulta interna, donde la condición incluye una tabla de una consulta externa.
SQL EXISTS >>
|