Professional Documents
Culture Documents
26
Operador *
Podemos usar * para especicar en forma abreviada todos los atributos. Por ejemplo: select * from empleado where departamento_codigo = A01 select * from empleado e, departamento d where e.departamento_codigo = d.codigo
27
Problemas de *
En DBMS comerciales el uso de * empeora el desempeo. n El DBMS debe primero consultar acerca del esquema de cada tabla relacionada. Es dif en aplicaciones manejar los atributos realmente cil requeridos. Cambios en los esquemas resultan en problemas de aplicacin. o
28
29
Insercin o
Al igual que una insercin con valores estticos o a insert into tabla1(atributo1, atributo2) values (valor1, valor2) se pueden especicar los datos a insertar a partir de una consulta insert into tabla1(atributo1, atributo2) select atributo3, atributo4 from tabla2 Signica que el resultado del select interno sobre la tabla tabla2 se almacena en la tabla tabla1. El select interno puede referenciar a cualquier nmero de tablas, u es una consulta cualquiera que produzca un resultado compatible con los de la tabla que recibe los datos.
30
Actualizacin o
Hasta ahora hemos visto actualizaaciones que usan la sintaxis
update tabla1 set atributo1 = <valor sobre tabla1>, atributo2 = <valor sobre tabla1> where <condicin sobre tabla1> o
Las extensiones de SQLServer permiten realizar actualizaciones basadas en informacin de otras tablas: o
update tabla1 set atributo1 = <valor sobre tabla1 y tabla2>, atributo2 = <valor sobre tabla1 y tabla2> from tabla2 where <condicin sobre tabla1 y tabla2> o
La unica tabla afectada es la tabla inicial, tabla1 en este caso. Cualquier nmero de tablas puede aparecer en la clusula from. u a
31
Eliminacin o
Hasta ahora hemos visto eliminaciones que usan la sintaxis delete from tabla1 where <condicin sobre tabla1> o Las extensiones de SQLServer permiten realizar eliminaciones basadas en informacin de otras tablas: o delete tabla1 from tabla2 where <condicin sobre tabla1 y tabla2> o Note que no se usa la clusula from al inicio, si no para especicar a la tabla de donde se obtendr informacin adicional. a o La unica tabla afectada es la tabla inicial, tabla1 en este caso. Cualquier nmero de tablas puede aparecer en la clusula from. u a
32
Operaciones de Conjuntos
Aadimos al esquema las relaciones: n PROYECTO(Codigo, Nombre, Departamento Codigo) ASIGNACION(Proyecto Codigo, Empleado Rut) Cmo podemos obtener el nombre y cdigo de todos los o o proyectos vinculados con un empleado ya sea porque est asignado a al proyecto o porque el proyecto depende de algn departamento u que l dirige? e
33
34
35
36
Consultas Anidadas
Las consultas anidadas son consultas dentro de consultas. Generalmente se usan para hacer condiciones ms complejas que a tienen que ver con la respuesta a otra consulta. Una consulta puede tener varios niveles de anidacin. o Las construcciones usadas son any, all. exist, not exist in, not in Tambin se pueden usar consultas que producen un unico e resultado como reemplazos de valores constantes en la condicin o where de otra consulta.
37
ANY ALL
any y all se usan en comparaciones. Ej: los empleados que ganan ms que todos los empleados del a departamento de Informtica: a select nombre from empleado where salario > all( select salario from departamento as d, empleado as e where e.departamento_codigo = d.codigo and d.nombre = Informtica) a any se puede usar de una manera similar para especicar cualquier en vez de todos.
38
EXISTS
exists se usa para vericar la existencia de alguna tupla, retorna false slo cuando la consulta no produce resultado. o Ej: los empleados que son supervisores de algn otro empleado: u select nombre from empleado as e1 where exists( select nombre from empleado as e2 where e2.supervisor = e1.rut) En este caso la subconsulta hace referencia a uno de los atributos de la consulta principal. not exists niega el resultado de exists.
39
IN
La siguiente es una consulta anidada para producir una interseccin usando in: o
select p.nombre from empleado as e, proyecto as p, asignacion as a, departamento as d where a.empleado_rut = e.rut and d.codigo = e.departamento_codigo and a.proyecto_codigo = p.codigo and d.nombre = Marketing and p.nombre in ( select p.nombre from empleado as e, proyecto as p, asignacion as a, departamento as d where a.empleado_rut = e.rut and d.codigo = e.departamento_codigo and a.proyecto_codigo = p.codigo and d.nombre = Informtica) a
40
41
Matching de Strings
Muchas veces se necesita slo un match parcial con strings. o Por ejemplo, todos los nombres que comiencen con A. Se usa la construccin like o not like. o select * from empleado where nombre like R% Se pueden usar expresiones similares a expresiones regulares %: cualquier string de 0 o ms caracteres. a _: cualquier caracter. []: un caracter dentro de un conjunto ([A-B]) [^] un caracteres que no sea de un conjunto ([^0-1]) like es case insensitive.
42
43
44
45
JOINs Anidados
Es posible anidar el join entre varias tablas Resultan en mayor orden que hacer muchas condiciones de igualdad en el where. Ms fciles de leer, porque forzadamente deben estar ms a a a ordenados. Ej:...
46
47
Vistas
Las vistas son tablas virtuales no existen realmente en la BD. Las vistas pueden usarse tal como una tabla cualquiera, pero con cuidado en las modicaciones. Para crear vistas se usa create view (drop view para eliminarlas). Una vista est siempre actualizada. a Vistas hacen posible el obtener independencia lgica de los datos. o Usuarios y programas no son afectados por cambios en la estructura lgica de la BD. o Ejemplos:...