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”