0% encontró este documento útil (0 votos)
7 vistas58 páginas

Consultas SQL Avanzadas y Técnicas

El documento aborda conceptos avanzados de SQL, incluyendo consultas complejas, operadores, y funciones agregadas. Se discuten temas como subconsultas, uniones de tablas, y el manejo de valores NULL. Además, se explican cláusulas como GROUP BY y HAVING, así como el uso de operadores lógicos y de comparación en consultas SQL.

Cargado por

Edurne Ilundain
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas58 páginas

Consultas SQL Avanzadas y Técnicas

El documento aborda conceptos avanzados de SQL, incluyendo consultas complejas, operadores, y funciones agregadas. Se discuten temas como subconsultas, uniones de tablas, y el manejo de valores NULL. Además, se explican cláusulas como GROUP BY y HAVING, así como el uso de operadores lógicos y de comparación en consultas SQL.

Cargado por

Edurne Ilundain
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

BASES DE DATOS

SQL Avanzado

SQL avanzado
BASES DE DATOS

Contenido

SQL básico: revisión

SQL avanzado
• Preguntas anidadas
• Operadores: IN, ANY, ALL, EXISTS, UNIQUE
• Cláusula HAVING
• OUTER JOIN

Elmasri and Navathe 07


Capítulo 8: Capítulo 8

SQL avanzado
BASES DE DATOS

COMPETENCIAS

Especificar consultas complejas que incluyen


subconsultas sobre BD
utilizando el lenguaje estándar SQL

SQL avanzado
BASES DE DATOS

Estructura general de una consulta

SELECT ( <atributos> | * )
FROM <tablas>
[WHERE <condición>]

 Para eliminar tuplas duplicadas

SELECT DISTINCT ( <atributos> | * )

SQL avanzado
BASES DE DATOS

Concatenación de tablas

 INNER JOIN
 Hace una concatenación de las tablas basándose en la comparación de
los atributos de las dos tablas

FROM <tabla1> INNER JOIN <tabla2>


ON <[Link] operador [Link]>

 NATURAL JOIN
 El operador de comparación es = y se aplica a todos los atributos del
mismo nombre en las tablas. Elimina columnas repetidas en el
resultado

FROM <tabla1> NATURAL JOIN <tabla2>

SQL avanzado
BASES DE DATOS

RENOMBRAR

 Cambiar temporalmente los nombres de tablas o atributos

 Se evita la ambigüedad.

FROM <tabla> T
FROM <tabla> AS T
FROM <tabla> AS T(atrib1, ... , atribn)

SELECT <atributo> AS Mi_atributo


SELECT <expresión> AS Mi_atributo

SQL avanzado
BASES DE DATOS

UNION, EXCEPT, INTERSECT

 Relación unión, diferencia e intersección


 Relaciones compatibles con la unión:
Mismo número de atributos, mismo dominio y mismo orden
 Conjuntos  sin repeticiones

<consulta1>
UNION / EXCEPT / INTERSECT
<consulta2>

 UNION ALL, EXCEPT ALL, INTERSECT ALL


 También se incluyen las repeticiones

SQL avanzado
BASES DE DATOS

Predicados y operadores (I)

 Operador IN
 Verdadero si el valor del atributo está incluido en la lista

WHERE <atributo> IN (valor_1, ... , valor_n)

 Predicado IS NULL
 Verdadero si el valor del atributo es null

WHERE <atributo> IS NULL

 Operador BETWEEN
 Verdadero si el valor del atributo se encuentra entre los dos valores
(incluidos ambos)
WHERE <atributo> BETWEEN valor_1 AND valor_2

SQL avanzado
BASES DE DATOS

Predicados y operadores (II)

 Operadores AND, OR, NOT


 Operador LIKE
 Es verdadero si el valor del atributo coincide con el patrón
WHERE <atributo> LIKE patrón

patrón = secuencia de caracteres


_ representa cualquier carácter
% representa cualquier cadena de caracteres

 Las cláusulas SELECT y WHERE pueden incluir operadores


 Operadores aritméticos: + - * /
 Operador de concatenación: 
SELECT atrib1*2
WHERE atrib1*2 IN (valor1, valor2, valor3)
SQL avanzado
BASES DE DATOS

Clásula ORDER BY

 Ordenar las tuplas resultantes por atributo


 Se puede colocar el nombre del atributo o el orden relativo

ORDER BY atributo1 ASC, atributo2 DESC

ORDER BY 1 ASC

SQL avanzado
BASES DE DATOS

Funciones agregadas

 COUNT
 Para contar el número de tuplas

SELECT COUNT (*)


SELECT COUNT (<atributo>)
SELECT COUNT (DISTINCT <atributo>)

 SUM, MAX, MIN, AVG


 Para aplicar a un conjunto de valores numéricos

SELECT SUM (<atributo>)


SELECT SUM (<expresión>)

SQL avanzado
BASES DE DATOS

Cláusula GROUP BY

 Para agrupar las tuplas por atributo


 Para aplicar funciones agregadas a grupos definidos por un
atributo
 No ordena las tuplas. Para ello  ORDER BY

GROUP BY atributo1, atributo2

SELECT atrib1, atrib2, … SELECT atrib1, atrib2, COUNT(*)


FROM ... FROM ...
WHERE ... WHERE ...
GROUP BY atrib1, atrib2 GROUP BY atrib1, atrib2
HAVING ...

SQL avanzado
BASES DE DATOS

Valor NULL

 null no puede usarse como una constante (nota = null)


 Para buscar un valor null: IS [NOT] NULL
 Sumar, multiplicar, etc. con null devuelve null
 Una comparación con el valor null da desconocido
 La cláusula WHERE debe ser verdadera / falsa
 Las funciones agregadas no consideran valores null
 Al aplicar la función de agregado a un conjunto vacío:
 COUNT () = 0
 SUMA (), AVG (), MAX (), MIN () = null
 Al hacer GROUP BY u ORDER BY null es como cualquier
otro valor

SQL avanzado
BASES DE DATOS

Tabla de conexiones lógicas con el valor null

A B and or
A not
True True True True True False
True False False True False True
False False False False Null Null
True Null Null True
False Null Null Null
Null Null Null Null

SQL avanzado
BASES DE DATOS

Valor Null. Ejemplos (I)


VENTAS
SELECT vendedor
cod vendedor venta cuota FROM ventas
1 Jon 1000 1000 WHERE venta>cuota

2 Miren 1500 1000


3 Josu 500 null
vendedor vendedor
4 Ane 1000 1200
Miren Jon
5 Aitor 1100 1000
Aitor Ane
6 Leire 2000 null

vendedor X
SELECT vendedor
Jon 1500 FROM ventas
WHERE venta<=cuota
Miren 1500
Josu null
Ane 1700 SELECT vendedor, cuota+500 as X
FROM ventas
Aitor 1500
Leire null
SQL avanzado
BASES DE DATOS

Valor null. Ejemplos(II)


SELECT SUM(venta) AS S1, SUM(cuota) AS S2,
(SUM(venta) - SUM (cuota)) AS S3,
SUM (venta-cuota) AS S4
FROM ventas

S1 S2 S3 S4
K1 K2 K3
7100 4200 2900 400
VENTAS null 0 2
cod vendedor venta cuota
1 Jon 1000 1000
SELECT SUM (cuota) AS K1,
2 Miren 1500 1000 count(cuota) AS K2,
3 Josu 500 null count(*) AS K3
FROM ventas
4 Ane 1000 1200 WHERE venta=500
5 Aitor 1100 1000 OR venta= 2000
6 Leire 2000 null
SQL avanzado
BASES DE DATOS

Valor Null. Ejemplos (III)

SELECT cuota, COUNT(*) AS K1


FROM ventas
GROUP BY cuota
cuota K1 venta S K1 K2
1000 3 1000 2200 2 2
null 2 1500 1000 1 1
VENTAS 1200 1 500 null 0 1
cod vendedor venta cuota 1100 1000 1 1
1 Jon 1000 1000 2000 null 0 1
2 Miren 1500 1000
3 Josu 500 null
SELECT venta, SUM(cuota) as S,
4 Ane 1000 1200 count(cuota) as K1,
5 Aitor 1100 1000 count(*) as K2
FROM ventas
6 Leire 2000 null GROUP BY venta
SQL avanzado
BASES DE DATOS

Consultas anidadas: IN (NOT IN)

 Verdadero si el valor de la izquierda está en la tabla de la


derecha.
 WHERE <expresión> IN <consulta>
• WHERE edad IN (SELECT Edad FROM Empleado)

 La consulta anidada se evalúa una vez para cada una de las


tuplas de la consulta que la contiene

SQL avanzado
BASES DE DATOS
19
Consultas SQL
(BD Empresa)
 Obtener el número de los proyectos en los que intervine Luis como
trabajador o como director del departamento que lo controla.

SELECT DISTINCT NumProyecto


FROM PROYECTO
WHERE NumProyecto IN
SELECT NumProyecto
FROM PERSONAL, DEPARTAMENTO, PROYECTO
WHERE NumDptoProyecto=NumeroDpto AND DniDire=Dni AND Nombre='Luis'
OR
(NumProyecto IN
SELECT DISTINCT NumProyecto
FROM TRABAJA_EN, PERSONAL
WHERE DniP=Dni AND Nombre='Luis')
SQL avanzado
BASES DE DATOS

Consultas anidadas

En la condición de una consulta se puede incluir otra consulta.


Si se refiere a una misma tabla, se utilizan renombramientos: AS

Tabla1(A, B, C, D) SELECT A, B La consulta


Tabla2(E, F, A) FROM Tabla1 interna puede
usar los atributos
WHERE C IN (SELECT E
de la externa
FROM Tabla2
WHERE F < B)
SELECT A, B SELECT A, B
FROM Tabla1
WHERE C IN (SELECT E
FROM Tabla1 AS Z
WHERE C IN (SELECT E
FROM Tabla2
FROM Tabla1
WHERE F < A)
Atributo
de la
Atributo
de la
WHERE F < Z.A)
Tabla2 Tabla1
SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Tabla2 G E F A
1 Aaa 2 2
Tabla1 (Z) 2 Aeb 3 4
A B C D 3 Aeb 8 2
1 Bb 5 Aba 4 Aeb 5 3
2 Ab 3 Aaa 5 Aba 8 1
3 Cb 4 Aaa Ø 1 IN Ø = FALSE
4 Ec 2 Aeb
A B C

SELECT A,B,C SELECT A,B,C


FROM Tabla1 AS Z FROM Tabla1 AS Z
WHERE A IN (SELECT A WHERE 1 IN (SELECT A
FROM Tabla2 FROM Tabla2
WHERE F<6 and E=Z.D) WHERE F<6 and E='Aba')
SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Tabla1 (Z) Tabla2
A B C D
G E F A
1 Bb 5 Aba
1 Aaa 2 2
2 Ab 3 Aaa
2 Aeb 3 4
3 Cb 4 Aaa
3 Aeb 8 2
4 Ec 2 Aeb
4 Aeb 5 3
SELECT A,B,C
FROM Tabla1 AS Z 5 Aba 8 1
WHERE A IN (SELECT A
FROM Tabla2 2 IN {2} = TRUE
WHERE F<6 and E=Z.D)
SELECT A,B,C A B C
FROM Tabla1 AS Z 2 Ab 3
WHERE 2 IN (SELECT A
FROM Tabla2
A B C
WHERE F<6 and E='Aaa')

SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Tabla1 (Z) Tabla2
A B C D G E F A
1 Bb 5 Aba 1 Aaa 2 2
2 Ab 3 Aaa 2 Aeb 3 4
3 Cb 4 Aaa 3 Aeb 8 2
4 Ec 2 Aeb 4 Aeb 5 3
SELECT A,B,C
5 Aba 8 1
FROM Tabla1 AS Z
WHERE A IN (SELECT A 3 IN {2}= FALSE
FROM Tabla2
WHERE F<6 and E=Z.D) A B C
SELECT A,B,C
FROM Tabla1 AS Z
A B C
WHERE 3 IN (SELECT A
FROM Tabla2 2 Ab 3
WHERE F<6 and E='Aaa')
SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Tabla1 (Z) Tabla2
A B C D G E F A
1 Bb 5 Aba 1 Aaa 2 2
2 Ab 3 Aaa 2 Aeb 3 4
3 Cb 4 Aaa 3 Aeb 8 2
4 Ec 2 Aeb 4 Aeb 5 3
SELECT A,B,C 5 Aba 8 1
FROM Tabla1 AS Z
WHERE A IN (SELECT A
4 IN {4, 3}= TRUE
FROM Tabla2 A B C
WHERE F<6 and E=Z.D)
4 Ec 2
SELECT A,B,C
FROM Tabla1 AS Z A B C
WHERE 4 IN (SELECT A
A
2 B
Ab C
3
FROM Tabla2
WHERE F<6 and E='Aeb') 24 Ab
Ec 32
SQL avanzado
BASES DE DATOS

Operador IN

 Verdadero, si el valor del atributo está en el resultado


de la subconsulta
WHERE <atributo> IN <conuslta>

…WHERE edad IN (SELECT edad FROM PERSONAL )


 Admite más de un valor
 Atributos compatibles con la unión en ambos lados
• Igual número de atributos


 WHERE (a, b)
Mismo dominio en ambos lados
IN (SELECT d FROM ...

int char int int



Mismo orden
WHERE (a, b) IN (SELECT c, d FROM ...
int char char int
 WHERE (a, b) IN (SELECT c, d FROM ...

SQL avanzado
BASES DE DATOS

Operador EXISTS

 Verdadero si la subconsulta obtiene tuplas


WHERE EXISTS <consulta>

 Verdadero, si no hay tuplas en la subconsulta

WHERE NOT EXISTS <consulta>

 A veces es equivalente al operador IN

SELECT A, B, C SELECT A, B, C
FROM Tabla1 FROM Tabla1 AS Z
WHERE A in (SELECT A WHERE exists (SELECT *
FROM Tabla2) FROM Tabla2
Tabla1(A, B, C, D) WHERE A=Z.A)
Tabla2(E, F, A)
SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Dni Código Nota Calificaciones
1 7984 5 SELECT Nombre
1 7450 4.5 FROM Estudiante AS A
WHERE EXISTS
1 7540 8.5 (SELECT 1
2 7984 6 FROM Calificaciones
WHERE nota>=7 AND dni=[Link])
2 4544 3
3 7984 7.5 SELECT Nombre
3 4544 9 FROM Estudiante AS A Nombre
WHERE EXISTS Jon
3 7540 8 (SELECT 1
Estudiante FROM Calificaciones
WHERE nota>=7 AND dni=1)
Dni Nombre
1 Jon Expr
2 Ane 1
EXISTS = TRUE
3 Leire
SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Dni Código Nota Calificaciones
1 7984 5 Nombre
SELECT Nombre Jon
1 7450 4.5 FROM Estudiante AS A
1 7540 8.5 WHERE EXISTS

2 7984 6
(SELECT 1
FROM Calificaciones Ø
WHERE nota>=7 AND dni=[Link])
2 4544 3
3 7984 7.5 SELECT Nombre
FROM Alumno AS A Nombre
3 4544 9 WHERE EXISTS
3 7540 8 (SELECT 1
FROM Calificaciones
Dni Nombre WHERE nota>=7 AND dni=2)

1 Jon Estudiante
2 Ane
Expr EXISTS = FALSE
3 Leire
SQL avanzado
BASES DE DATOS

Procesamiento de consultas anidadas


Dni Código Nota Calificaciones
1 7984 5 SELECT Nombre Nombre
1 7450 4.5 FROM Estudiante AS A Jon
Nombre
WHERE EXISTS
1 7540 8.5 (SELECT 1 Jon
FROM Calificaciones Leire
2 7984 6 WHERE nota>=7 AND dni=[Link])
2 4544 3
SELECT Nombre
3 7984 7.5 FROM Estudiante AS A
WHERE EXISTS Nombre
3 4544 9 (SELECT 1
FROM Calificaciones Leire
3 7540 8
WHERE nota>=7 AND dni=3)
Estudiante
Dni Nombre Expr
1 Jon 1
1
2 Ane EXISTS = TRUE
3 Leire 1
SQL avanzado
BASES DE DATOS
34
Consultas SQL
(BD Empresa)
 Obtener el nombre y apellido1 del personal que no tiene dependientes.

SELECT Nombre, Apellido1


FROM PERSONAL
WHERE NOT EXISTS
(SELECT *
FROM DEPENDIENTE
WHERE Dni=DniP)

SQL avanzado
BASES DE DATOS

Operadores ANY y ALL

 <expr> >ANY (<subconsulta>)


 Verdadero si el valor de la izquierda es mayor que alguno de los
de la subconsulta de la derecha.
 También se usa la palabra SOME
WHERE <atributo> > ANY <consulta>

 <expr> >ALL (<subconsulta>)


 Verdadero si el valor de la izquierda es mayor que todos los de
la subconsulta de la derecha.
WHERE <atributo> < ALL <consulta>

 Extensibles a otros comparadores


 =, <, <=, >=, <>

SQL avanzado
BASES DE DATOS

Operadores ANY y ALL


ALL vs ANY (SOME)
PERSONAL
Dni Nombre … Salario SELECT dni
1 Jon … 100 FROM personal
2 Miren … 150 WHERE salario xxx
3 Josu … 175 (SELECT salario
4 Ane … 200 FROM personal)
5 Aitor … 160

xxx:
< ALL  
<= ALL  1
< ANY  1,2,3,5
<= ANY  1,2,3,4,5

SQL avanzado
BASES DE DATOS

Operadores ANY y ALL


ALL vs ANY (SOME)
PERSONAL
Dni Nombre … Salario Dni
1 Jon … 100
2 Miren … 150
3 Josu … 175
4 Ane … 200
5 Aitor … 160

SELECT Dni
FROM Personal
WHERE Salario <ALL (SELECT Salario
FROM Personal)

SQL avanzado
BASES DE DATOS

ALL vs ANY (SOME)

PERSONAL
Dni Nombre … Sueldo Dni
1 Jon … 100
2 Miren … 150 1
3 Josu … 175
4 Ane … 200
5 Aitor … 160

SELECT Dni
FROM Personal
WHERE Salario <=ALL(SELECT Salario
FROM Personal)

SQL avanzado
BASES DE DATOS

ALL vs ANY (SOME)

Empleado
Dni
Dni Nombre … Sueldo
1 Jon … 100
1
2 Miren … 150
3 Josu … 175 2
4 Ane … 200
5 Aitor … 160 3

SELECT Dni 5
FROM Personal
WHERE Salario <ANY
(SELECT Salario
FROM Personal)
SQL avanzado
BASES DE DATOS

ALL vs ANY (SOME)

Dni
PERSONAL
1
Dni Nombre … Sueldo
1 Jon … 100 2
2 Miren … 150
3 Josu … 175 3
4 Ane … 200
5 Aitor … 160
4

SELECT Dni 5
FROM Personal
WHERE Salario <=ANY (SELECT Salario
FROM Personal)

SQL avanzado
BASES DE DATOS

Operador UNIQUE

 Verdadero si la subconsulta no contiene tuplas repetidas

WHERE UNIQUE <consulta>

© Arantza Irastorza. LSI SQL avanzado


BASES DE DATOS

Tabla1 Tabla2
A B C D G E F A
1 Bb 5 Aba 1 Aaa 2 2
2 Ab 3 Aaa 2 Aeb 3 4
3 Cb 4 Aaa 3 Aeb 8 2
4 Ec 2 Aeb 4 Aeb 5 3
SELECT A,B,C 5 Aba 8 1
FROM Tabla1 AS Z
6 Aaa 2 5
WHERE UNIQUE ( SELECT A
FROM Tabla2
WHERE F=Z.C) UNIQUE = TRUE
SELECT A,B,C
FROM Tabla1 AS Z
A B C
WHERE UNIQUE ( SELECT A 1 Bb 5
FROM Tabla2
WHERE F=5)
SQL avanzado
BASES DE DATOS

Tabla2
Tabla1
G E F A
A B C D
1 Aaa 2 2
1 Bb 5 Aba
2 Aeb 3 4
2 Ab 3 Aaa
3 Aeb 8 2
3 Cb 4 Aaa
4 Aeb 5 3
4 Ec 2 Aeb
5 Aba 8 1
SELECT A,B,C
FROM Tabla1 AS Z
6 Aaa 2 5
WHERE UNIQUE ( SELECT A UNIQUE = TRUE
FROM Tabla2
WHERE F=Z.C) A B C

SELECT A,B,C
3 Ab 3
FROM Tabla1 AS Z A B C
WHERE UNIQUE ( SELECT A
FROM Tabla2
1
A Bb
B 5
C
WHERE F=3) 2
1 Ab
Bb 3
5
SQL avanzado
BASES DE DATOS

Tabla1
Tabla2 G E F A
A B C D
1 Aaa 2 2
1 Bb 5 Aba
2 Aeb 3 4
2 Ab 3 Aaa
3 Aeb 8 2
3 Cb 4 Aaa
4 Aeb 5 3
4 Ec 2 Aeb
5 Aba 8 1
SELECT A,B,C
6 Aaa 2 5
FROM Tabla1 AS Z
WHERE UNIQUE ( SELECT A Ø UNIQUE = TRUE
FROM Tabla2
A B C
WHERE F=Z.C)
3 Cb 4
SELECT A,B,C A B C
FROM Tabla1 AS Z 1
A Bb
B 5C
WHERE UNIQUE ( SELECT A
21 Ab
Bb 35
FROM Tabla2
WHERE F=4) 32 Cb
Ab 43
SQL avanzado
BASES DE DATOS

Tabla1 Tabla2
A B C D G E F A
1 Bb 5 Aba 1 Aaa 2 2
2 Ab 3 Aaa 2 Aeb 3 4
3 Cb 4 Aaa 3 Aeb 8 2
4 Ec 2 Aeb 4 Aeb 5 3

SELECT A,B,C
5 Aba 8 1
FROM Tabla1 AS Z 6 Aaa 2 5
WHERE UNIQUE ( SELECT A UNIQUE = TRUE
FROM Tabla2
WHERE F=Z.C)
A B C

SELECT A,B,C A B C
FROM Tabla1 AS Z 1 Bb 5
WHERE UNIQUE ( SELECT A
FROM Tabla2
2 Ab 3
WHERE F=2) 3 Cb 4
SQL avanzado
BASES DE DATOS

Cláusula HAVING

 Define la condición que debe cumplir un grupo de tuplas


 Requisito expresado por funciones agregadas
 Los grupos que cumplan los requisitos estarán presentes en
el resultado
 Junto con la cláusula GROUP BY

GROUP BY atrib1, …, atribn


HAVING <condición>

SQL avanzado
BASES DE DATOS

Procesamiento de consultas con


HAVING
SELECT D, count(*) AS Cant
Tabla1 FROM Tabla1
WHERE B > 6
A B C D GROUP BY D
1 5 5 Aba HAVING COUNT(*)>1
2 4 3 Aaa
 Cláusula WHERE
3 8 4 Aba
4 9 2 Aeb
5 9 1 Aba
6 2 2 Bbb
7 8 3 Aaa
8 4 1 Bbb
9 8 3 Aeb
10 7 1 Aba
SQL avanzado
Procesamiento de consultas con
BASES DE DATOS

Tabla1
A B C D HAVING
3 8 4 Aba SELECT D, count(*) AS Cant
4 9 2 Aeb FROM Tabla1
5 9 1 Aba WHERE B > 6
GROUP BY D
7 8 3 Aaa
HAVING COUNT(*)>1
9 8 3 Aeb
10 7 1 Aba
 Cláusula WHERE
 Cláusula GROUP BY
A B C D
3 8 4 Aba
5 9 1 Aba G1
10 7 1 Aba
4 9 2 Aeb
G2
9 8 3 Aeb
7 8 3 Aaa G3
SQL avanzado
BASES DE DATOS

Procesamiento de consultas con


HAVING
SELECT D, count(*) AS Cant
FROM Tabla1
WHERE B > 6
A B C D Cant GROUP BY D
3 8 4 Aba 3 HAVING COUNT(*)>1
5 9 1 Aba
10 7 1 Aba  Cláusula WHERE
4 9 2 Aeb 2  Cláusula GROUP BY
9 8 3 Aeb  Función agregada Count
7 8 3 Aaa 1

SQL avanzado
BASES DE DATOS

Procesamiento de consultas con


HAVING
SELECT D, count(*) AS Cant
FROM Tabla1
WHERE B > 6
GROUP BY D
HAVING COUNT(*)>1
A B C D Cant
3 8 4 Aba 3  Cláusula WHERE
5 9 1 Aba
 Cláusula GROUP BY
10 7 1 Aba
 Función agregada Count
4 9 2 Aeb 2
 Cláusula HAVING
9 8 3 Aeb
7 8 3 Aaa 1

© Arantza Irastorza. LSI SQL avanzado


BASES DE DATOS

Procesamiento de consultas con


HAVING
SELECT D, count(*) AS Cant
A B C D Count FROM Tabla1
3 8 4 Aba 3 WHERE B > 6
GROUP BY D
5 9 1 Aba
HAVING COUNT(*)>1
10 7 1 Aba
4 9 2 Aeb 2  Cláusula WHERE
9 8 3 Aeb
 Cláusula GROUP BY
 Función agregada Count
D Cant  Cláusula HAVING
Aba 3  Proyección y resultado
Aeb 2

SQL avanzado
BASES DE DATOS

Combinaciones OUTER JOIN

 FROM <tabla1> LEFT OUTER JOIN <tabla2>


 Se toman todas las tuplas de la izquierda, incluso las que no
tienen tuplas con las que combinarse.
• Si no hay combinación posible, aparece NULL en su lugar.

 FROM <tabla1> RIGHT OUTER JOIN <tabla2>


 Lo mismo con las de la derecha

 FROM <tabla1> FULL OUTER JOIN <tabla2>


 Lo mismo con las de la izquierda y derecha

SQL avanzado
BASES DE DATOS

Combinaciones OUTER JOIN

T1 T2 T3
A B C D A E F
1 Abc A Aa 2 1 Dj
2 Aab B Ab 3 3 Mn
3 Acb C Ba 3 5 Nd
4 Ccb D Bb Null 6 Dm
E cc 5 A B C
SELECT A, B, C 2 Aab A
FROM T1 INNER JOIN T2 ON T1.A=T2.A;
3 Acb B
3 Acb C
SQL avanzado
BASES DE DATOS

Combinaciones OUTER JOIN


T1 T2 T3
A B C D A E F
1 Abc A Aa 2 1 Dj
2 Aab B Ab 3 3 Mn
3 Acb C Ba 3 5 Nd
4 Ccb D Bb Null 6 Dm
E cc 5 A B C
1 Abc null
2 Aab A
SELECT A, B, C
FROM T1 LEFT OUTER JOIN T2 3 Acb B
ON T1.A=T2.A; 3 Acb C
4 Ccb null
SQL avanzado
BASES DE DATOS

Combinaciones OUTER JOIN


T2 T3
T1
C D A E F
A B
A Aa 2 1 Dj
1 Abc
B Ab 3 3 Mn
2 Aab
C Ba 3 5 Nd
3 Acb
D Bb Null 6 Dm
4 Ccb
E cc 5 A B C
2 Aab A
SELECT A, B, C
FROM T1 RIGHT OUTER JOIN 3 Acb B
T2 ON T1.A=T2.A; 3 Acb C
Null Null D
5 Null E
SQL avanzado
BASES DE DATOS

Combinaciones OUTER JOIN


T1 C D A
T2 E F T3
A B A Aa 2
1 Dj
1 Abc B Ab 3
3 Mn
2 Aab C Ba 3
5 Nd
3 Acb D Bb Null
6 Dm
4 Ccb E cc 5
A B E F
1 Abc 1 Dj
2 Aab Null Null
SELECT *
3 Acb 3 Mn
FROM T1 FULL OUTER JOIN T3
ON T1.A=T3.E; 4 Ccb Null Null
Null Null 5 Nd
Null Null 6 Dm

SQL avanzado
BASES DE DATOS

Otras notaciones outer join

 SELECT * FROM T1 LEFT OUTER JOIN T2 ON B = H

Oracle: SELECT * FROM T1, T2 WHERE B = (+) H

SQL Server: SELECT * FROM T1, T2 WHERE B *= H

 SELECT * FROM T1 RIGHT OUTER JOIN T2 ON B = H

Oracle: SELECT * FROM T1, T2 WHERE B (+) = H

SQL Server: SELECT * FROM T1, T2 WHERE B =* H

 SELECT * FROM T1 FULL OUTER JOIN T2 ON B = H

Oracle: no está implementado

SQL Server: SELECT * FROM T1, T2 WHERE B *=* H

SQL avanzado
BASES DE DATOS

Compatibilidad de UNION

 Necesaria para ciertas operaciones.


 Dos tablas son compatibles si tienen:
 El mismo número de columnas
 El mismo dominio en las columnas
 Las columnas en el mismo orden

SQL avanzado
BASES DE DATOS

Compatibilidad de Unión
A C
Numero Nombre Numero Nombre
1 ‘Cooper Industries’ 4 ‘Flowtech Industries’
2 ‘Emblazon Corporation’ 8 ‘Zantech Inc.’
3 ‘Ditech Corporation’
4 ‘Flowtech Industries’ D
5 ‘Gentech Industries’ Numero Nombre
B
‘4' ‘Flowtech Industries’
Número Nombre Ciudad
‘8' ‘Zantech Inc.’
1 Cooper Industries LAX
2 Emblazon Corporation NYC E
3 Ditech Corporation BCN Edad Nombre
4 Flowtech Industries EAS 4 ‘Svendson, Tove’
5 Gentech Industries MAD 8 ‘Svendson, Stephen’

[Link] SQL avanzado


BASES DE DATOS

UNION

 UNION DISTINCT
 También UNION UNIQUE o sólo UNION
 Unión de dos tablas [conjuntos]
• Las tablas deben ser compatibles para unión
 Elimina tuplas repetidas

 UNION ALL
 No elimina tuplas repetidas

 OUTER UNION (union join)


 Une dos tablas parcialmente compatibles (por orden de columnas)

 OUTER UNION CORRESPONDING


 No se fija en la posición, sino en el nombre de las columnas

SQL avanzado
BASES DE DATOS

UNION [distinct | unique]

Personal_Noruega Personal_USA
P_ID P_Name P_ID P_Name
1 Hansen, Ola 1 Turner, Sally
2 Svendson, Tove 2 Kent, Clark
3 Svendson, Stephen 3 Svendson, Stephen
4 Pettersen, Kari 4 Scott, Stephen
P_Name
SELECT P_Name Hansen, Ola
FROM Personal_Noruega Svendson, Tove
UNION Svendson, Stephen
SELECT P_Name Pettersen, Kari
FROM Personal_USA Turner, Sally
Kent, Clark
Scott, Stephen
SQL avanzado
BASES DE DATOS

UNION ALL

Personal_Noruega Personal_USA
P_ID P_Name P_ID P_Name
1 Hansen, Ola 1 Turner, Sally
2 Svendson, Tove 2 Kent, Clark
3 Svendson, Stephen 3 Svendson, Stephen
4 Pettersen, Kari 4 Scott, Stephen
P_Name
Hansen, Ola
SELECT P_Name
Svendson, Tove
FROM Personal_Noruega Svendson, Stephen
UNION ALL Pettersen, Kari
SELECT P_Name Turner, Sally
FROM Personal_USA Kent, Clark
Svendson, Stephen
Scott, Stephen
SQL avanzado

También podría gustarte