Sql consultas multitabla

Solo disponible en BuenasTareas
  • Páginas : 9 (2149 palabras )
  • Descarga(s) : 0
  • Publicado : 8 de enero de 2011
Leer documento completo
Vista previa del texto
1. DML. Las consultas multitabla 1.1 Introducción
Hasta ahora hemos visto consultas que obtienen los datos de una sola tabla, en este tema veremos cómo obtener datos de diferentes tablas en una sola instrucción SELECT. En esta parte ampliaremos la cláusula FROM y descubriremos nuevas palabras reservadas (UNION, EXCEPT e INTERSECT). Para obtener datos de varias tablas tenemos que combinar estastablas mediante alguna operación basada en el álgebra relacional. El álgebra relacional define una serie de operaciones cuyos operandos son tablas y cuyo resultado es también una tabla. Las operaciones de álgebra relacional implementadas en Transact-Sql son: la unión UNION la diferencia EXCEPT la intersección INTERSECT el producto cartesiano la composición interna INNER JOIN la composición externaLEFT JOIN, RIGHT JOIN Y OUTER JOIN En todo el tema cuando hablemos de tablas nos referiremos tanto a las tablas que físicamente están almacenadas en la base de datos como las tablas temporales y las resultantes de una consulta o vista.

1.2 La unión de tablas UNION
La unión de tablas consiste en coger dos tablas y obtener una tabla con las filas de las dos tablas, en el resultado aparecerán lasfilas de una tabla y, a continuación, las filas de la otra tabla. Para poder realizar la operación, las dos tablas tienen que tener el mismo esquema (mismo número de columnas y tipos compatibles). {|()} UNION [ALL] {|()} [UNION [ALL] {|()} [ ...n ] ] [ORDER BY {expression_columna|posicion_columna [ASC|DESC]} [ ,...n ]]

es la especificación de la consulta que nos devolverá la tabla a combinar.Puede ser cualquier especificación de consulta con la limitación de que no admite la cláusula ORDER BY, los alias de campo se pueden definir pero sólo tienen efecto cuando se indican en la primera consulta ya que el resultado toma los nombres de columna de esta. Ejemplo: Suponemos que tenemos una tabla Valencia con las nuevas oficinas de Valencia y otra tabla Madrid con las nuevas oficinas deMadrid y queremos obtener una tabla con las nuevas oficinas de las dos ciudades: (SELECT oficina as OFI, ciudad FROM Valencia) FROM (SELECT oficina, ciudad FROM Madrid); El resultado sería: OFI 11 28 23 ciudad Valencia Valencia Madrid

1

El resultado coge los nombres de columna de la primera consulta y aparecen primero las filas de la primera consulta y después las de la segunda. Si queremosque el resultado aparezca ordenado podemos incluir la cláusula ORDER BY, pero después de la última especificación de consulta, y expresion_columna será cualquier columna válida de la primera consulta. (SELECT oficina as OFI, ciudad FROM Valencia) FROM (SELECT oficina, ciudad FROM Madrid) ORDER BY ofi; OFI 11 23 28 ciudad Valencia Madrid Valencia

Ahora las filas aparecen ordenadas por el número deoficina y hemos utilizado el nombre de columna de la primera consulta. Cuando aparezcan en el resultado varias filas iguales, el sistema por defecto elimina las repeticiones. Si se especifica ALL, el sistema devuelve todas las filas resultante de la unión incluidas las repetidas El empleo de ALL también hace que la consulta se ejecute más rápidamente ya que el sistema no tiene que eliminar lasrepeticiones. Se pueden combinar varias tablas con el operador UNION. Por ejemplo supongamos que tenemos otra tabla Pamplona con las oficinas nuevas de Pamplona: (SELECT oficina AS OFI, ciudad FROM Valencia) union (SELECT oficina, ciudad FROM Madrid) UNION (SELECT oficina, ciudad FROM Pamplona); Combinamos las tres tablas.

1.3 La diferencia EXCEPT

Aparecen en la tabla resultante las filas dela primera consulta que no aparecen en la segunda. Las condiciones son las mismas que las de la unión. {|()} EXCEPT {|()} EXCEPT {|()} [ ...n ] ] [ORDER BY {expression_columna|posicion_columna [ASC|DESC]} [ ,...n ]] Por ejemplo tenemos las tablas T1 y T2 T1: Cod T2: Codigo 1 2 2 3 4 4 5 5 6

2

SELECT cod FROM T1 EXCEPT SELECT cod FROM T2; Devuelve: Cod 1 6

1.4 La intersección INTERSECT...
tracking img