You are on page 1of 22

Bases de Datos SQL

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

Bases de Datos SQL

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

Bases de Datos SQL

28

SQL insercin, actualizacin, eliminacin o o o


Hasta ahora hemos visto slo inserciones estticas. o a Hemos visto actualizaciones y eliminaciones que usan informacin o slo de la misma tabla. o Se pueden hacer operaciones ms complejas usando subconsultas. a SQLServer soporta extensiones adicionales a las subconsultas que pueden facilitar mucho las cosas (o complicarlas a veces).

Bases de Datos SQL

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.

Bases de Datos SQL

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

Bases de Datos SQL

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

Bases de Datos SQL

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

Bases de Datos SQL

33

Operaciones de Conjuntos (cont.)


Todos los proyectos a los que Rojas est asignado a select p.codigo, p.nombre from empleado as e, proyecto as p, asignacion as a where a.empleado_rut = e.rut and a.proyecto_codigo = p.codigo and e.nombre = Rojas

Bases de Datos SQL

34

Operaciones de Conjuntos (cont.)


Todos los proyectos de algn departamento que Rojas supervisa. u select p.codigo, p.nombre from empleado as e, supervisa_departamento as sd, proyecto as p where sd.empleado_rut = e.rut and sd.departamento_codigo = p.departamento_codigo and e.nombre = Rojas

Bases de Datos SQL

35

Operaciones de Conjuntos (cont.)


Finalmente la respuesta a la inicial pregunta es la unin de las dos o consultas anteriores. Usamos el comando union que representa la unin de conjuntos. o union elimina las tuplas repetidas. El estndar de SQL permite usar tambin las operaciones a e intersect para interseccin y except para diferencia, sin o embargo SQLServer no las soporta. Para otras operaciones de conjuntos como encontrar la interseccin o la diferencia entre dos resultados, podemos usar o tambin la construccin in y not in en consultas anidadas. e o

Bases de Datos SQL

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.

Bases de Datos SQL

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.

Bases de Datos SQL

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.

Bases de Datos SQL

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

Bases de Datos SQL

40

Comparacin con NULL o


La comparacin con null no puede hacerse usando =, < o >. o Se usa la construccin is o is not. o select nombre from empleado where supervisor is null select nombre from empleado where supervisor is not null

Bases de Datos SQL

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.

Bases de Datos SQL

42

JOINs Expl citos


Hasta ahora para hacer reunin de datos de distintas tablas hemos o especicado la igualdad de atributos en el where de la consulta. Es posible hacer joins expl citos entre tablas usando la construccin join. o join es mucho ms verstil que la simple igualdad. a a Si queremos obtener un resultado en que la primera columna liste a todos los empleados y la segunda columa al supervisor de este, la siguiente consulta no cumple nuestras expectativas: select e1.nombre as empleado, e2.nombre as supervisor from empleado as e1, empleado as e2 where e1.supervisor = e2.rut

Bases de Datos SQL

43

JOIN Interno (inner)


El siguiente es un ejemplo de consulta con join expl cito. select empleado.nombre, departamento.nombre from empleado join departamento on departamento_codigo = departamento.codigo El anterior join es tambin llamado join interno. e Busca a todas las tuplas de la primera tabla que sean iguales a la tuplas de la segunda tabla en el atributo especicado.

Bases de Datos SQL

44

JOIN Externo (outer)


Existen tambin joins externos. e Nos permiten reunir tablas en las que ciertas tuplas de una de las tablas no tienen valores iguales a tuplas en la otra tabla. Se especica cual de las tablas se relaja: left, right o full. select e1.nombre as empleado, e2.nombre as supervisor from empleado as e1 left outer join empleado as e2 on e1.supervisor = e2.rut left outer especica que se debe relajar la tabla de la izquierda. El resultado incluye tuplas de la tabla de la izquierda que no tienen valores iguales a los de la tabla de la derecha (cumple las expectativas).

Bases de Datos SQL

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:...

Bases de Datos SQL

46

JOINs Expl cito


El join expl cito es mucho ms verstil que la simple igualdad. a a Resulta en consultas ms ecientes. a Adicionalmente se impone un orden a la consulta, resultan consultas ms legibles. a Puede usarse no slo con igualdad, pueden hacerse joins de o desigualdades.

Bases de Datos SQL

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:...

You might also like