Documente Academic
Documente Profesional
Documente Cultură
75
SUBCONSULTAS
Una subconsulta es una sentencia SELECT que aparece
dentro de otra sentencia SELECT que llamaremos consulta
principal.
La subconsulta (consulta interna o consulta anidada) se ejecuta
antes de la consulta principal. Esto no aplica en subconsultas
correlacionadas
76
SUBCONSULTAS (1 FILA)
Consulta Principal:
77
SUBCONSULTAS (1 FILA)
Subconsulta en el WHERE:
78
SUBCONSULTAS (+ 1 FILA)
Consulta Principal:
Mostrar los empleados que ganan ms que todos los VENDEDOR.
SELECT apellido, salario FROM emple WHERE salario > ALL
Subconsulta:
Cules son los salarios de los vendedores?
SELECT salario FROM emple WHERE oficio= VENDEDOR'
79
SUBCONSULTAS (+ 1 FILA)
Subconsulta en el WHERE:
80
SUBCONSULTAS (+ 1 FILA)
ANY
Compara el valor con cada valor retornado por la
subconsulta hasta encontrar que se cumpla la condicin
81
SUBCONSULTAS (+ 1 FILA)
< ANY significa < (SELECT MAX )
> ANY significa > (SELECT MIN )
= ANY significa lo mismo que IN
< ALL
> ALL
82
SUBCONSULTAS
RECOMENDACIONES:
Encerrar las subconsultas entre parntesis.
Ubicar las subconsultas en el lado derecho de la
condicin de comparacin.
Las subconsultas no necesitan una clusula ORDER BY a
menos de que se realice una consulta de anlisis TOP-N
(los primeros N).
Use operadores de fila simple cuando tiene certeza de
que se retorna un solo valor, y use operadores de
mltiples filas cuando la subconsulta retorna ms de una
fila.
SUBCONSULTAS
Subconsultas de fila simple
Consulta Principal:
Subconsulta:
EJERCICIO
85
Funciones de agregacin:
86
EJERCICIO
87
JOINS
Se realiza el producto cartesiano de las 2 tablas.
Empleados: 14 registros
Departamentos: 4 registros
88
JOINS INNER
SELECT * FROM TablaA INNER JOIN TablaB
ON TablaA.campo = TablaB.campo
Un
inner
nicamente
join
el
produce
conjunto
de
89
Nombre
Edad Depto
Jorge Campos
33
1
Enrique Muoz
25
1
Esteban Paz
21
1
Jorge Arias
30
2
Juan Martnez
19
2
Anselmo Rodas
28
6
Departamento
Depto
1
2
3
4
Descripcin
Administracin
Produccin
Ventas
Finanzas
90
JOINS
Mediante la clusula INNER JOIN combinada
con ON
SELECT * FROM empleado
INNER JOIN departamento
ON empleado.depto =
departamento.depto
91
JOINS
Otra forma es comparando los atributos
que realizan el join en la clusula WHERE
SELECT * FROM empleado, departamento
WHERE empleado.depto = departamento.depto
92
Renombramiento con AS
Se puede emplear la clusula AS para generar
alias en las diferentes tablas.
SELECT *
FROM empleado AS e, departamento AS d
WHERE e.depto = d.depto
Nota: El SQL estndar exige siempre el uso de
AS, aunque algunos SGBD como Oracle y
Access lo suprimen
Curso Bases de Datos
93
TablaA.nombre = TablaB.nombre
Full outer join produce el
conjunto de todos los recursos
de la Tabla A y de la Tabla B,
ambos
disponibles.
coincidencias,
lados
Si
el
si
no
lado
estn
hay
que
Curso Bases de Datos
94
10
Left
outer
reproduce
join
95
obtener
los
pero
no
la
registros
realizaremos
el
Tabla
mismo
B,
left
96
11
indeseados
de
97
JOINS RIGHT
Lo
mismo
pero
cambiamos
98
12
EJERCICIO
99
Anidamiento de consultas
Con IN, y con otros operadores como
EXISTS, se pueden anidar consultas
Ej: Presentar el ttulo de las pelculas que
nunca se han prestado:
SELECT DISTINCT pel.titulo FROM pelicula AS pel
WHERE pel.titulo NOT IN (
SELECT pel.titulo
FROM pelicula AS pel, prestamo AS pr, copia AS co
WHERE pr.codcopia=co.codcopia AND
co.codpeli=pel.codpeli
)
Curso Bases de Datos
100
13
Otra manera
101
Ejemplo
Calcular el nmero de veces que se ha prestado la
pelcula ms prestada.
SELECT MAX(cuenta) AS numero_veces
FROM
102
14
103
15