condicion con subconsulta

Anuncio
MANIPULACION
DE DATOS
EN SQL
CONDICION JOIN
SELECT columnas FROM tabla-1, tabla-2
WHERE condición;
EJEMPLO 1:
SELECT depto.*, profesor.* FROM depto, profesor
WHERE depto.clave = profesor.clave;
Equilvalente a:
depto.*, profesor.*
(depto ⋈ profesor)
CONDICION JOIN
EJEMPLO 2:
SELECT empleado.*, proyecto.*
FROM
empleado e,
asignado_a a,
proyecto p,
WHERE
e.num_emp = a.num_emp
AND
a.num_proy = p.num_proy
CONDICION CON SUBCONSULTA
Los estatutos SELECT que están dentro de una
cláusula
WHERE
son
llamados
SUBCONSULTAS (subqueries).
Una subconsulta puede regresar un solo valor,
ningún valor o un conjunto de valores, pero
debe tener sólo una columna en la lista de
columnas a “obtener”.
CONDICION CON SUBCONSULTA
FORMATO:
• WHERE expresión operador_relacional
{ALL | ANY} (estatuto_SELECT)
• WHERE expresión [NOT] IN
(estatuto_SELECT)
• WHERE [NOT] EXISTS (estatuto_SELECT)
CONDICIÓN CON SUBCONSULTA
EJEMPLO:
Obtener el # de empleado y nombre, de los empelados
trabajando en el proyecto COMP353.
•Parafraseo: “ Obtener num_emp y nombre de
empleado, donde (where) num_emp es igual a alguno
(=ANY) de los num_emp’s asignados al num_proy
COMP353”.
SELECT * FROM empleado
WHERE num_emp = ANY (SELECT num_emp
FROM asignado_a
WHERE num_proy = ‘COMP353’);
CONDICIÓN CON SUBCONSULTA
• Subconsulta con ANY indica que la subconsulta
puede regresar cero, uno o más valores y que la
condición de búsqueda es verdadera si la
comparación es verdadera para al menos uno de los
valores obtenidos. Si la subconsulta no regresa
valor, la condición de búsqueda es falsa.
• Con el operador IN se pregunta si la expresión
está entre los valores que regresa el estatuto
SELECT. Es equivalente a = ANY.
CONDICION CON SUBCONSULTA
Así pues:
SELECT * FROM empleado
WHERE num_emp IN (SELECT num_emp
FROM asignado_a
WHERE num_proy = ‘COMP353’);
Este caso, es equivalente a un Join en un solo SELECT:
SELECT * FROM empelado, asignado_a
WHERE empleado.num_emp = asignado_a.num_emp
AND asignado_a.num_proy = ‘COMP353’;
CONDICIÓN CON SUBCONSULTA
EJEMPLO:
•Nombres de los alumnos que hayan aprobado todas sus materias
SELECT nombre FROM Estudiante E
WHERE
6 <= ALL (SELECT calif FROM Inscrito_En I
WHERE E.id_Alumno = I.id_Alumno);
CONDICIÓN CON SUBCONSULTA
• Subconsulta con ALL:
Indica que la subconsulta puede regresar cero, uno
o más valores y que la condición de búsqueda es
verdadera si la comparación es verdadera para cada
uno de los valores obtenidos. Si la subconsulta no
regresa valor, la condición de búsqueda es falsa.
CONDICIÓN CON SUBCONSULTA
EJEMPLO:
• Nombres de los alumnos que hayan cursado alguna
materia:
SELECT nombre FROM Estudiante E
WHERE
EXISTS
(SELECT * FROM Inscrito_En I
WHERE
E.id_Alumno = I.id_Alumno);
CONDICION CON SUBCONSULTA
• La subconsulta con EXISTS pregunta si
algún renglón (o tuple) es regresado por el
siguiente
estatuto
SELECT
(el
SELECT
anidado). Y la condición de búsqueda es
verdadera si la subconsulta regresa uno o
más renglones.
EQUIVALENCIAS ENTRE
SQL
Y
ÁLGEBRA RELACIONAL
EQUIVALENCIAS ENTRE SQL Y ALGEBRA
RELACIONAL
• AUB
SELECT todas-las-columnas-de-A FROM A
UNION
SELECT todas-las-columnas-de-B FROM B ;
• A-B
SELECT todas-las-columnas-de-A FROM A
WHERE NOT EXISTS
(SELECT * FROM B
WHERE todas-las-columnas-de-A
= todas-las-columnas-de-B);
• AXB
SELECT todas-las-columnas-de-A,
todas-las-columnas-de-B FROM A,B
EQUIVALENCIAS (Continuación)
condición
(A)
SELECT todas-las-columnas-de-A FROM A
WHERE condición
columnas
(A)
SELECT UNIQUE columnas FROM A
A⋈B
SELECT columnas-de-A, columnas-de-B
FROM A,B
WHERE A.col_de_A = B.col_de_B
EQUIVALENCIAS (Continuación)
A∩B
SELECT todas-las-columnas-de-A
FROM A,B
WHERE todas-las-columnas-de-A
= todas-las-columnas-de-B);
Ó
SELECT todas-las-columnas-de-A FROM A
WHERE EXISTS
(SELECT * FROM B
WHERE todas-las-columnas-de-A
= todas-las-columnas-de-B);
DIVISION EN SQL
ESTUDIANTE (id_Alu, NomDep)
DEPORTE (NomDep)
“Estudiantes que practiquen todos lo deportes”
ESTUDIANTE DEPORTE
• SELECT *
FROM Estudiante E
WHERE
(SELECT NomDep FROM Estudiante E1
WHERE E.id_Alu = E1.id_Alu)
= ALL
(SELECT NomDep FROM Deporte);
AGREGADOS EN SQL
• SELECT sum(salario)
FROM EMPLEADO
suma de todos los salarios
• SELECT avg(salario)
FROM EMPLEADO
GROUP BY #depto
salario promedio por departamento
• También existen:
max - máximo
min - mínimo
cnt - conteo
NIVELES DE ABSTRACCION DE DATOS
Apli. 1
Nivel externo:
definido por usuarios
programadores de
aplicaciones en
conjunto con el ABD
Nivel conceptual:
Definido por el ABD
Nivel interno: definido
por el ABD
(optimización)
Apli. 2
Apli. 3
Apli. 4
…
Vista
A
Vista
B
…
Vista conceptual
Vista interna
Apli.
M
Vista
N
CREATE VIEW
• Define una tabla “virtual” seleccionada de los
renglones y columnas de tablas y vistas existentes.
• Conceptualmente, la vista no se ejecuta en el
momento de definirse.
• Se ejecuta hasta el momento en que es utilizada.
EJEMPLO: CREATE VIEW
CREATE TABLE Cliente
(
num_cliente serial(101),
nombre
char(15),
apellido
char(15)
ciudad
char(20)
);
CREATE VIEW Cliente_Regio
AS SELECT * FROM Cliente
WHERE ciudad = ‘Aguascalientes’ ;
EJEMPLO: UTILIZACIÓN DE UNA VISTA
SELECT *
FROM Cliente_Regio
WHERE apellido = “Padilla” ;
En este momento se evalúa la vista
“Cliente_Regio”
Descargar