SlideShare una empresa de Scribd logo
3
Lo más leído
SQL >SQL Avanzado 
En esta sección, describiremos las siguientes palabras claves y conceptos SQL: 
· SQL UNION 
· SQL UNION ALL 
· SQL INTERSECT 
· SQL MINUS 
· SQL Subconsulta 
· SQL EXISTS 
· SQL CASE 
SQL >SQL Avanzado >Union 
El propósito del comando SQL UNION es combinar los resultados de dos consultas juntas. En este sentido, 
UNION es parecido a Join, ya que los dos se utilizan para información relacionada en múltiples tablas. Una 
restricción de UNION es que todas las columnas correspondientes necesitan ser del mismo tipo de datos. 
También, cuando utilizamos UNION, sólo se seleccionan valores distintos (similar a SELECT DISTINCT). 
La sintaxis es la siguiente: 
[Instrucción SQL 1] 
UNION 
[Instrucción SQL 2]; 
Supongamos que tenemos las siguientes dos tablas, 
Tabla Store_Information 
Store_Name Sales Txn_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 Internet_Sales 
Txn_Date Sales 
07-Jan-1999 250 
10-Jan-1999 535 
11-Jan-1999 320 
12-Jan-1999 750 
y deseamos saber de todas las fechas donde hay una operación de venta. Para hacerlo, utilizamos la siguiente 
instrucción SQL: 
SELECT Txn_Date FROM Store_Information 
UNION 
SELECT Txn_Date FROM Internet_Sales; 
Resultado:
Txn_Date 
05-Jan-1999 
07-Jan-1999 
08-Jan-1999 
10-Jan-1999 
11-Jan-1999 
12-Jan-1999 
Por favor note que si ingresamos "SELECT DISTINCT Txn_Date" para cada o ambas instrucciones SQL, 
obtendremos el mismo conjunto de resultados. 
SQL >SQL Avanzado >Union All 
El propósito del Comando SQL UNION ALL es también combinar los resultados de dos consultas juntas. La 
diferencia entre UNION ALL y UNION es que, mientras UNION sólo selecciona valores distintos, UNION 
ALL selecciona todos los valores. 
La sintaxis para UNION ALL es la siguiente: 
[Instrucción SQL 1] 
UNION ALL 
[Instrucción SQL 2]; 
Utilicemos el mismo ejemplo de la sección anterior para ilustrar la diferencia. Supongamos que tenemos las 
siguientes dos tablas, 
Tabla Store_Information 
Store_Name Sales Txn_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 Internet_Sales 
Txn_Date Sales 
07-Jan-1999 250 
10-Jan-1999 535 
11-Jan-1999 320 
12-Jan-1999 750 
y deseamos encontrar las fechas en donde se realizó una operación de venta en un negocio como así también 
las fechas donde hay una venta a través de Internet. Para hacerlo, utilizamos la siguiente instrucción SQL: 
SELECT Txn_Date FROM Store_Information 
UNION ALL 
SELECT Txn_Date FROM Internet_Sales; 
Resultado: 
Txn_Date
05-Jan-1999 
07-Jan-1999 
08-Jan-1999 
08-Jan-1999 
07-Jan-1999 
10-Jan-1999 
11-Jan-1999 
12-Jan-1999 
SQL >SQL Avanzado >Intersect 
Parecido al comando UNION, INTERSECT también opera en dos instrucciones SQL. La diferencia es que, 
mientras UNION actúa fundamentalmente como un operador OR (O) (el valor se selecciona si aparece en la 
primera o la segunda instrucción), el comando INTERSECT actúa como un operador AND (Y) (el valor se 
selecciona si aparece en ambas instrucciones). 
La sintaxis es la siguiente: 
[Instrucción SQL 1] 
INTERSECT 
[Instrucción SQL 2]; 
Digamos que tenemos las siguientes dos tablas: 
Tabla Store_Information 
Store_Name Sales Txn_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 Internet_Sales 
Txn_Date Sales 
07-Jan-1999 250 
10-Jan-1999 535 
11-Jan-1999 320 
12-Jan-1999 750 
y deseamos encontrar todas las fechas donde hay ventas tanto en el negocio como en Internet. Para hacerlo, 
utilizamos la siguiente instrucción SQL: 
SELECT Txn_Date FROM Store_Information 
INTERSECT 
SELECT Txn_Date FROM Internet_Sales; 
Resultado: 
Txn_Date 
07-Jan-1999
Por favor note que el comando INTERSECT sólo arrojará valores distintivos. 
SQL >SQL Avanzado >Minus 
MINUS opera en dos instrucciones SQL. Toma todos los resultados de la primera instrucción SQL, y luego 
sustrae aquellos que se encuentran presentes en la segunda instrucción SQL para obtener una respuesta final. Si 
la segunda instrucción SQL incluye resultados que no están presentes en la primera instrucción SQL, dichos 
resultados se ignoran. 
La sintaxis es la siguiente: 
[Instrucción SQL 1] 
MINUS 
[Instrucción SQL 2]; 
Continuemos con el mismo ejemplo: 
Tabla Store_Information 
Store_Name Sales Txn_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 Internet_Sales 
Txn_Date Sales 
07-Jan-1999 250 
10-Jan-1999 535 
11-Jan-1999 320 
12-Jan-1999 750 
y deseamos encontrar todas las fechas donde hay ventas en el negocio, pero no aquellas realizadas por Internet. 
Para hacerlo, utilizamos la siguiente instrucción SQL: 
SELECT Txn_Date FROM Store_Information 
MINUS 
SELECT Txn_Date FROM Internet_Sales; 
Resultado: 
Txn_Date 
05-Jan-1999 
08-Jan-1999 
'05-Jan-1999', '07-Jan-1999',et '08-Jan-1999' son los valores distintivos arrojados desde SELECT Txn_Date 
FROM Store_Information. También se arroja '07-Jan-1999' de la segunda instrucción SQL, SELECT 
Txn_Date FROM Internet_Sales, de este modo se lo excluye del conjunto final de resultados. 
Por favor note que el comando MINUS sólo arrojará valores distintos.
Algunas bases de datos pueden utilizar EXCEPT en vez de MINUS. Por favor verifique la documentación 
para su base de datos específica para el uso apropiado. 
SQL >SQL Avanzado >Subconsulta 
Es posible incorporar una instrucción SQL dentro de otra. Cuando esto se hace en las instrucciones WHERE o 
HAVING, tenemos una construcción de subconsulta. 
La sintaxis es la siguiente: 
SELECT "nombre1_columna" 
FROM "nombre1_tabla" 
WHERE "nombre2_columna" [Operador de Comparación] 
(SELECT "nombre3_columna" 
FROM "nombre2_tabla" 
WHERE "Condición"); 
[Operador de Comparación] podrían ser operadores de igualdad tales como =, >, <, >=, <=. También puede ser 
un operador textual como "LIKE". La parte en rojo se considera como la "consulta interna", mientras que la 
parte en verde se considera como la "consulta externa". 
Utilisons le même exemple que celui que nous avons utilisé pour illustrer les jointures SQL : 
Table Store_Information 
Store_Name Sales Txn_Date 
Los Angeles 1500 05-Jan-1999 
San Diego 250 07-Jan-1999 
Los Angeles 300 08-Jan-1999 
Boston 700 08-Jan-1999 
Table Geography 
Region_Name Store_Name 
East Boston 
East New York 
West Los Angeles 
West San Diego 
et en utilisant une sous-requête pour trouver les ventes de tous les magasins dans la région West (Ouest), il 
faudra utiliser l’instruction SQL suivante : 
SELECT SUM(Sales) FROM Store_Information 
WHERE Store_Name IN 
(SELECT Store_Name FROM Geography 
WHERE Region_Name = 'West'); 
Resultado: 
SUM(Sales) 
2050
Dans cet exemple, au lieu de joindre directement les deux tables et d’ajouter seulement le montant des ventes 
des magasins de la région West (Ouest), nous allons d’abord utiliser la sous-requête pour trouver les magasins 
situés dans la région West (Ouest), puis additionner le montant des ventes de ces magasins. 
Dans l’exemple ci-dessus, la requête interne est d’abord exécutée, puis le résultat est envoyé à la requête 
externe. Ce type de sous-requête est appelé sous-requête simple. Si la requête interne dépend de la requête 
externe, nous aurons une sous-requête corrélée. Vous trouverez ci-dessous un exemple de de sous-requête 
corrélée : 
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); 
Notez la clause WHERE dans la requête interne, où la condition nécessite une table de la requête externe 
SQL >SQL Avanzado >Exists 
En la sección anterior, utilizamos IN para enlazar la consulta interna y la consulta externa en una instrucción de 
subconsulta. IN no es la única forma de hacerlo – uno puede utilizar muchos operadores tales como >, <, o =. 
EXISTS es un operador especial que describiremos en esta sección. 
EXISTS simplemente verifica si la consulta interna arroja alguna fila. Si lo hace, entonces la consulta externa 
procede. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de la instrucción SQL no arroja nada. 
La sintaxis para EXISTS es 
SELECT "nombre1_columna" 
FROM "nombre1_tabla" 
WHERE EXISTS 
(SELECT * 
FROM "nombre2_tabla" 
WHERE "Condición"); 
Por favor note que en vez de *, puede seleccionar una o más columnas en la consulta interna. El efecto será 
idéntico. 
Utilizamos las mismas tablas de ejemplos: 
Tabla Store_Information 
Store_Name Sales Txn_Date 
Los Angeles 1500 05-Jan-1999 
San Diego 250 07-Jan-1999 
Los Angeles 300 08-Jan-1999 
Boston 700 08-Jan-1999 
Table Geography 
Region_Name Store_Name 
East Boston 
East New York 
West Los Angeles
West San Diego 
colocaríamos la siguiente consulta SQL: 
SELECT SUM(Sales) FROM Store_Information 
WHERE EXISTS 
(SELECT * FROM Geography 
WHERE region_name = 'West'); 
Obtendremos el siguiente resultado: 
SUM(Sales) 
2750 
Al principio, esto puede parecer confuso, debido a que la subsequencia incluye la condición [Region_Name = 
'West'], aún así la consulta sumó los negocios para todas las regiones. Si observamos de cerca, encontramos 
que debido a que la subconsulta arroja más de 0 filas, la condición EXISTS es verdadera, y la condición 
colocada dentro de la consulta interna no influencia la forma en que se ejecuta la consulta externa. 
SQL >SQL Avanzado >Case 
CASE se utiliza para brindar un tipo de lógica "si-entonces-otro" para SQL. Su sintaxis es: 
SELECT CASE ("nombre_columna") 
WHEN "condición1" THEN "resultado1" 
WHEN "condición2" THEN "resultado2" 
... 
[ELSE "resultadoN"] 
END 
FROM "nombre_tabla"; 
"condición" puede ser un valor estático o una expresión. La cláusula ELSE es opcional. 
En nuestra Tabla Store_Information de ejemplo, 
Tabla Store_Information 
Store_Name Sales Txn_Date 
Los Angeles 1500 05-Jan-1999 
San Diego 250 07-Jan-1999 
Los Angeles 300 08-Jan-1999 
Boston 700 08-Jan-1999 
si deseamos multiplicar las sumas de ventas de 'Los Angeles' por 2 y las sumas de ventas de 'San Diego' por 
1,5, ingresamos, 
SELECT Store_Name, CASE Store_Name 
WHEN 'Los Angeles' THEN Sales * 2 
WHEN 'San Diego' THEN Sales * 1.5 
ELSE Sales 
END 
"Nuevas Ventas", 
Txn_Date 
FROM Store_Information;
"Nuevas Ventas" es el nombre que se le otorga a la columna con la instrucción CASE. 
Resultado: 
Store_name Nuevas Ventas Txn_Date 
Los Angeles 3000 05-Jan-1999 
San Diego 375 07-Jan-1999 
San Francisco 300 08-Jan-1999 
Boston 700 08-Jan-1999

Más contenido relacionado

PPTX
Conjunto generador(26 08-2012)
DOC
Office supply checklist
DOC
Sample motion to strike punitive damages in california
PPT
DOC
Examen final de sql nadia
PDF
Ejercicios resueltos de sql
DOCX
Sql avanzado
DOC
Sql comamdo
Conjunto generador(26 08-2012)
Office supply checklist
Sample motion to strike punitive damages in california
Examen final de sql nadia
Ejercicios resueltos de sql
Sql avanzado
Sql comamdo

Similar a Sql avanzado (20)

PDF
46301750 comandos-basicos-de-sql (1)
DOCX
SENTENCIAS DE SQL SERVER
DOC
Proyecto De Aplicacion A La Bases Datos
PDF
Sql y programacion en access 2010
PPT
Consultas en SQL
PPTX
diapositiva-clase-unidad-4-sql.pptx
PPTX
diapositiva-clase-unidad-4-sql.pptx
PPT
Ti. Sql.Caso1al9.Consultas
PPTX
Consultas sql
PPTX
Comandos utilizados en sql
PDF
Guía de declaraciones de open sql
PDF
MySQL. Tutorial Básico
PPTX
Consultas sql 2014
PPTX
Consultas sql 2014
PPTX
Expo
PDF
Consultas básicas en sql server
PPTX
Presentacion 4 unidad
PDF
Operaciones basicas de sql
PPT
46301750 comandos-basicos-de-sql (1)
SENTENCIAS DE SQL SERVER
Proyecto De Aplicacion A La Bases Datos
Sql y programacion en access 2010
Consultas en SQL
diapositiva-clase-unidad-4-sql.pptx
diapositiva-clase-unidad-4-sql.pptx
Ti. Sql.Caso1al9.Consultas
Consultas sql
Comandos utilizados en sql
Guía de declaraciones de open sql
MySQL. Tutorial Básico
Consultas sql 2014
Consultas sql 2014
Expo
Consultas básicas en sql server
Presentacion 4 unidad
Operaciones basicas de sql
Publicidad

Último (20)

PDF
Mapa mental de cultura social Historia Economica
PDF
Manual de presentacion de la aplicacion Plugbot
PPTX
DIAPOSITIVA DE TEORIA CRITICA EN EDUCACION - RAMOS ALANIA ANA MARIA.pptx
PPTX
DICTÁMENES MÉDICO-PSIQUIÁTRICOS Y PSICOLÓGICOS FORENSES 6.pptx
PDF
Laboratorio#1 Nariz, Boca y Faringe, Subgrupo 1A.pdf
PPTX
SEPSIS_ULTIMA_EXPO[1]sepsisenelreci.pptx
PPTX
Grupo 008_Equipo 3_Evidencia 4_ATDI.pptx
PDF
TEST DE ORIENTACION VOCACIONAL DILAN MAHECHA
PPTX
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
PPTX
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
PPSX
Unidad II - Diseño de una solucion 2025.ppsx
PPTX
Epidemiologia de campo vrs epidemiologia social.pptx
PDF
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
PPTX
El adjetivo, descripción de la categoría gramatical
PDF
Administracion y contabilidad publica 1era clase
PDF
S07 - Morfología urbana..........................
PDF
HIS. UNI R03 - CLAVES.pdfG05 HIS.UNI- MUNI.pdf
PDF
jose david lopera tovar maria antonia izquierdo.pdf.pdf
PPT
RESOLUCION ALTERNATIVA DE CONFLICTOS 3 CONT.ppt
PPTX
GUERRAS INTERNACIONALES DE BOLIVIA .pptx
Mapa mental de cultura social Historia Economica
Manual de presentacion de la aplicacion Plugbot
DIAPOSITIVA DE TEORIA CRITICA EN EDUCACION - RAMOS ALANIA ANA MARIA.pptx
DICTÁMENES MÉDICO-PSIQUIÁTRICOS Y PSICOLÓGICOS FORENSES 6.pptx
Laboratorio#1 Nariz, Boca y Faringe, Subgrupo 1A.pdf
SEPSIS_ULTIMA_EXPO[1]sepsisenelreci.pptx
Grupo 008_Equipo 3_Evidencia 4_ATDI.pptx
TEST DE ORIENTACION VOCACIONAL DILAN MAHECHA
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
Unidad II - Diseño de una solucion 2025.ppsx
Epidemiologia de campo vrs epidemiologia social.pptx
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
El adjetivo, descripción de la categoría gramatical
Administracion y contabilidad publica 1era clase
S07 - Morfología urbana..........................
HIS. UNI R03 - CLAVES.pdfG05 HIS.UNI- MUNI.pdf
jose david lopera tovar maria antonia izquierdo.pdf.pdf
RESOLUCION ALTERNATIVA DE CONFLICTOS 3 CONT.ppt
GUERRAS INTERNACIONALES DE BOLIVIA .pptx
Publicidad

Sql avanzado

  • 1. SQL >SQL Avanzado En esta sección, describiremos las siguientes palabras claves y conceptos SQL: · SQL UNION · SQL UNION ALL · SQL INTERSECT · SQL MINUS · SQL Subconsulta · SQL EXISTS · SQL CASE SQL >SQL Avanzado >Union El propósito del comando SQL UNION es combinar los resultados de dos consultas juntas. En este sentido, UNION es parecido a Join, ya que los dos se utilizan para información relacionada en múltiples tablas. Una restricción de UNION es que todas las columnas correspondientes necesitan ser del mismo tipo de datos. También, cuando utilizamos UNION, sólo se seleccionan valores distintos (similar a SELECT DISTINCT). La sintaxis es la siguiente: [Instrucción SQL 1] UNION [Instrucción SQL 2]; Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information Store_Name Sales Txn_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 Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos saber de todas las fechas donde hay una operación de venta. Para hacerlo, utilizamos la siguiente instrucción SQL: SELECT Txn_Date FROM Store_Information UNION SELECT Txn_Date FROM Internet_Sales; Resultado:
  • 2. Txn_Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 Por favor note que si ingresamos "SELECT DISTINCT Txn_Date" para cada o ambas instrucciones SQL, obtendremos el mismo conjunto de resultados. SQL >SQL Avanzado >Union All El propósito del Comando SQL UNION ALL es también combinar los resultados de dos consultas juntas. La diferencia entre UNION ALL y UNION es que, mientras UNION sólo selecciona valores distintos, UNION ALL selecciona todos los valores. La sintaxis para UNION ALL es la siguiente: [Instrucción SQL 1] UNION ALL [Instrucción SQL 2]; Utilicemos el mismo ejemplo de la sección anterior para ilustrar la diferencia. Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information Store_Name Sales Txn_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 Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar las fechas en donde se realizó una operación de venta en un negocio como así también las fechas donde hay una venta a través de Internet. Para hacerlo, utilizamos la siguiente instrucción SQL: SELECT Txn_Date FROM Store_Information UNION ALL SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date
  • 3. 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999 07-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 SQL >SQL Avanzado >Intersect Parecido al comando UNION, INTERSECT también opera en dos instrucciones SQL. La diferencia es que, mientras UNION actúa fundamentalmente como un operador OR (O) (el valor se selecciona si aparece en la primera o la segunda instrucción), el comando INTERSECT actúa como un operador AND (Y) (el valor se selecciona si aparece en ambas instrucciones). La sintaxis es la siguiente: [Instrucción SQL 1] INTERSECT [Instrucción SQL 2]; Digamos que tenemos las siguientes dos tablas: Tabla Store_Information Store_Name Sales Txn_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 Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar todas las fechas donde hay ventas tanto en el negocio como en Internet. Para hacerlo, utilizamos la siguiente instrucción SQL: SELECT Txn_Date FROM Store_Information INTERSECT SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date 07-Jan-1999
  • 4. Por favor note que el comando INTERSECT sólo arrojará valores distintivos. SQL >SQL Avanzado >Minus MINUS opera en dos instrucciones SQL. Toma todos los resultados de la primera instrucción SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instrucción SQL para obtener una respuesta final. Si la segunda instrucción SQL incluye resultados que no están presentes en la primera instrucción SQL, dichos resultados se ignoran. La sintaxis es la siguiente: [Instrucción SQL 1] MINUS [Instrucción SQL 2]; Continuemos con el mismo ejemplo: Tabla Store_Information Store_Name Sales Txn_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 Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar todas las fechas donde hay ventas en el negocio, pero no aquellas realizadas por Internet. Para hacerlo, utilizamos la siguiente instrucción SQL: SELECT Txn_Date FROM Store_Information MINUS SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date 05-Jan-1999 08-Jan-1999 '05-Jan-1999', '07-Jan-1999',et '08-Jan-1999' son los valores distintivos arrojados desde SELECT Txn_Date FROM Store_Information. También se arroja '07-Jan-1999' de la segunda instrucción SQL, SELECT Txn_Date FROM Internet_Sales, de este modo se lo excluye del conjunto final de resultados. Por favor note que el comando MINUS sólo arrojará valores distintos.
  • 5. Algunas bases de datos pueden utilizar EXCEPT en vez de MINUS. Por favor verifique la documentación para su base de datos específica para el uso apropiado. SQL >SQL Avanzado >Subconsulta Es posible incorporar una instrucción SQL dentro de otra. Cuando esto se hace en las instrucciones WHERE o HAVING, tenemos una construcción de subconsulta. La sintaxis es la siguiente: SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE "nombre2_columna" [Operador de Comparación] (SELECT "nombre3_columna" FROM "nombre2_tabla" WHERE "Condición"); [Operador de Comparación] podrían ser operadores de igualdad tales como =, >, <, >=, <=. También puede ser un operador textual como "LIKE". La parte en rojo se considera como la "consulta interna", mientras que la parte en verde se considera como la "consulta externa". Utilisons le même exemple que celui que nous avons utilisé pour illustrer les jointures SQL : Table Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Table Geography Region_Name Store_Name East Boston East New York West Los Angeles West San Diego et en utilisant une sous-requête pour trouver les ventes de tous les magasins dans la région West (Ouest), il faudra utiliser l’instruction SQL suivante : SELECT SUM(Sales) FROM Store_Information WHERE Store_Name IN (SELECT Store_Name FROM Geography WHERE Region_Name = 'West'); Resultado: SUM(Sales) 2050
  • 6. Dans cet exemple, au lieu de joindre directement les deux tables et d’ajouter seulement le montant des ventes des magasins de la région West (Ouest), nous allons d’abord utiliser la sous-requête pour trouver les magasins situés dans la région West (Ouest), puis additionner le montant des ventes de ces magasins. Dans l’exemple ci-dessus, la requête interne est d’abord exécutée, puis le résultat est envoyé à la requête externe. Ce type de sous-requête est appelé sous-requête simple. Si la requête interne dépend de la requête externe, nous aurons une sous-requête corrélée. Vous trouverez ci-dessous un exemple de de sous-requête corrélée : 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); Notez la clause WHERE dans la requête interne, où la condition nécessite une table de la requête externe SQL >SQL Avanzado >Exists En la sección anterior, utilizamos IN para enlazar la consulta interna y la consulta externa en una instrucción de subconsulta. IN no es la única forma de hacerlo – uno puede utilizar muchos operadores tales como >, <, o =. EXISTS es un operador especial que describiremos en esta sección. EXISTS simplemente verifica si la consulta interna arroja alguna fila. Si lo hace, entonces la consulta externa procede. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de la instrucción SQL no arroja nada. La sintaxis para EXISTS es SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE EXISTS (SELECT * FROM "nombre2_tabla" WHERE "Condición"); Por favor note que en vez de *, puede seleccionar una o más columnas en la consulta interna. El efecto será idéntico. Utilizamos las mismas tablas de ejemplos: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Table Geography Region_Name Store_Name East Boston East New York West Los Angeles
  • 7. West San Diego colocaríamos la siguiente consulta SQL: SELECT SUM(Sales) FROM Store_Information WHERE EXISTS (SELECT * FROM Geography WHERE region_name = 'West'); Obtendremos el siguiente resultado: SUM(Sales) 2750 Al principio, esto puede parecer confuso, debido a que la subsequencia incluye la condición [Region_Name = 'West'], aún así la consulta sumó los negocios para todas las regiones. Si observamos de cerca, encontramos que debido a que la subconsulta arroja más de 0 filas, la condición EXISTS es verdadera, y la condición colocada dentro de la consulta interna no influencia la forma en que se ejecuta la consulta externa. SQL >SQL Avanzado >Case CASE se utiliza para brindar un tipo de lógica "si-entonces-otro" para SQL. Su sintaxis es: SELECT CASE ("nombre_columna") WHEN "condición1" THEN "resultado1" WHEN "condición2" THEN "resultado2" ... [ELSE "resultadoN"] END FROM "nombre_tabla"; "condición" puede ser un valor estático o una expresión. La cláusula ELSE es opcional. En nuestra Tabla Store_Information de ejemplo, Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 si deseamos multiplicar las sumas de ventas de 'Los Angeles' por 2 y las sumas de ventas de 'San Diego' por 1,5, ingresamos, SELECT Store_Name, CASE Store_Name WHEN 'Los Angeles' THEN Sales * 2 WHEN 'San Diego' THEN Sales * 1.5 ELSE Sales END "Nuevas Ventas", Txn_Date FROM Store_Information;
  • 8. "Nuevas Ventas" es el nombre que se le otorga a la columna con la instrucción CASE. Resultado: Store_name Nuevas Ventas Txn_Date Los Angeles 3000 05-Jan-1999 San Diego 375 07-Jan-1999 San Francisco 300 08-Jan-1999 Boston 700 08-Jan-1999