Vous êtes sur la page 1sur 44

CONSULTAS A MULTIPLES TABLAS USO DEL JOIN

BASE DE DATOS

02 DE ABRIL DE 2013

Objetivos
Comprender la teora fundamental que existe tras la combinacin de tablas. Familiarizarse con la sintaxis de las sentencias de combinacin de tablas usando la clusula JOIN. Observar las diferencias entre las distintas formas de utilizacin del JOIN.

Combinacin de tablas
La combinacin de tablas es una operacin que se realiza con bases de datos relacionales con el propsito de obtener informacin de columnas de ms de una tabla, con esto se obtienen registros que son el resultado de la combinacin de los campos de dos o ms tablas. Esta operacin es conocida tambin como unin o vinculacin de tablas. La combinacin de campos de tablas distintas slo es posible cuando se han definido campos relacionados entre tablas. Esto es existe un campo clave primaria en una tabla que aparece como clave fornea en la otra tabla.

Sentencia SQL para la unin de tablas


La sentencia SQL utilizada para recuperar informacin de varias tablas en una misma consulta es conocida como INNER JOIN. Realmente lo que debe hacerse es construir una sentencia SELECT que incluya una clusula INNER JOIN donde debe especificarse la tabla de unin y otra clusula ON en la que se especifique cul es el campo de unin o de combinacin a partir del cual se generarn los resultados de la consulta.

Sintaxis de la sentencia SELECT con INNER JOIN


La sintaxis es la siguiente: SELECT lista_de_campos FROM nombre_tabla1 INNER JOIN nombre_tabla2 ON campo_de_union_tabla1 = campo_de_union_tabla2; Donde nombre_tabla1, nombre_tabla2 son los nombres de las tablas que se van a combinar y de donde se van a extraer los campos requeridos por la consulta. campo_de_union_tabla1, campo_de_union_tabla2 son los campos respectivos de las tablas 1 y 2, que definen la relacin entre las tablas. En una de las tablas (tabla padre) el campo de unin debe ser llave o clave primeria, y en la otra tabla (tabla hija) el campo debe ser llave o clave fornea y debe ser del mismo tipo de dato y del mismo ancho.

Explicacin grfica de un INNER JOIN

Para obtener los registros coincidentes en ambas tablas habra que realizar:

Explicacin grfica del INNER JOIN


Se obtiene la siguiente combinacin de registros:

Grficamente el INNER JOIN

Si observa la grfica el conjunto de registros resultantes vienen a ser equivalentes al resultado de la interseccin de conjuntos (A B). Esto es todos los registros de la tabla A que tienen uno o ms registros coincidentes en la tabla B.

Ejemplo
use Northwind go select LastName, Employees.employeeid,orderdate from Orders inner join Employees on orders.EmployeeID=Employees.EmployeeID order by employeeid

Subdivisin de la combinacin externa


La combinacin externa con OUTER JOIN se divide en combinacin completa (FULL OUTER JOIN o OUTER JOIN), combinacin de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN) y combinacin de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN).

Ejemplo con combinacin completa

Ejemplo
use Northwind go select LastName, Employees.employeeid,orderdate from Employees full outer join orders on orders.EmployeeID=Employees.EmployeeID order by employeeid

Ejemplo con combinacin izquierda

Ejemplo
use Northwind go select LastName, Employees.employeeid,orderdate from Employees left join orders on orders.EmployeeID=Employees.EmployeeID order by employeeid

Ejemplo con combinacin derecha

Ejemplo
use Northwind go select LastName, Employees.employeeid,orderdate from Orders right join Employees on orders.EmployeeID=Employees.EmployeeID order by employeeid

Uso de alias
select titulo,a.nombre,e.nombre from autores as a join libros as l on a.codigoautor=a.codigo join editoriales as e on codigoeditorial=e.codigo;

cross join
retorna todos los registros de todas las tablas implicadas en la unin, devuelve el producto cartesiano. No es muy utilizado. Caso Un pequeo restaurante tiene almacenados los nombres y precios de sus comidas en una tabla llamada "comidas" y en una tabla denominada "postres" los mismos datos de sus postres.

cross join
El restaurante quiere combinar los registros de ambas tablas para mostrar los distintos menes que ofrece. Podemos usar "cross join": select c * from comidas as c cross join postres as p; Podemos obtener la combinacin de platos principales con postres empleando un "cross join" con una sola tabla: select c1.nombre,c1.precio,c2.nombre,c2.precio from comidas as c1 cross join postres as c2 where c1.rubro='plato principal' and c2.rubro='postre';
Fuente: http://www.mysqlya.com.ar/temarios/descripcion.php?cod=60&punto=66

Ejemplo
use Northwind go select LastName, Employees.employeeid,orderdate from Employees cross join orders where orders.EmployeeID=Employees.EmployeeID order by employeeid

UNION
La clusula UNION permite unir dos o ms conjuntos de resultados en uno tras otro como si se tratase de una nica tabla. De este modo podemos obtener los registros de mas de una tabla "unidos".
Para utilizar la clausula UNION debemos cumplir una serie de normas. Las consultas a unir deben tener el mismo nmero campos, y adems los campos deben ser del mismo tipo. Slo puede haber una nica clausula ORDER BY al final de la sentencia SELECT

Debe especificar los nombres de las columnas en la primera instruccin SELECT. Por lo tanto, si desea definir nuevos encabezados de columnas en el conjunto de resultados, deber crear los alias de columnas en la primera instruccin SELECT.

Ejemplo
use Northwind go select (FirstName + ' ' + lastname) as [Nombre completo] from Employees union select companyname from Customer.Customers

CONSULTAS A MULTIPLES TABLAS USO DE SUBCONSULTAS

OBJETIVO
Al finalizar esta sesin el estudiante ser capaz de : Definir que es una subconsulta Crear subconsultas

Qu es una Subconsulta?

Una subconsulta es una consulta T-SQL normal anidada dentro de otra consulta, se crean utilizando parntesis en una instruccin SELECT que sirve como base para cualquier parte de los datos o de la condicin de otra consulta.

Qu es una Subconsulta? Normalmente las subconsultas se utilizan para satisfacer una o un par de las siguientes: necesidades: Desglosar una consulta en una serie de pasos lgicos. Proporcionar un listado que va a ser el destino de una clusula WHERE con [IN | EXISTS |ANY | ALL]. Proporcionar una bsqueda dirigida por cada registro individual de una consulta principal.

Qu es una Subconsulta?
Una subconsulta puede devolver: Una sola columna o un solo valor en cualquier lugar en donde pueda utilizarse una expresin de un slo valor y puede compararse usando los siguientes operadores: =,<,>,<=,>= ,<>,!> y !<. Una sola columna o muchos valores que se pueden utilizar con el operador de comparacin de listas IN en la clusula WHERE. Muchas filas que pueden utilizarse para comprobar la existencia, usando la palabra EXISTS en la clusula WHERE.

Qu es una Subconsulta? En el proceso de trabajo con subconsultas, necesariamente manejaremos dos tipos de consultas: consultas internas y consultas externas. Las consultas internas no es ms que las subconsultas propiamente dichas y la consultas externa es aquella que hace uso de los resultados devueltos por la consulta interna o subconsulta.

Crear una subconsulta anidada


Una subconsulta anidada es la que slo tiene una Direccin: devolver un solo valor para su uso en la consulta externa o una lista de valores a utilizar con el operador IN. Si deseamos utilizar un operador = explicito, vamos a utilizar una consulta que devuelve un solo valor, lo que significa una columna a partir de una fila. Si esperamos la devolucin de una lista, tendremos que utilizar el operador IN con la consulta externa.

Crear una subconsulta anidada


En su sentido ms amplio, la sintaxis de nuestra consulta seguir una de estas dos plantillas de sintaxis: SELECT <lista de seleccin> FROM <alguna tabla> WHERE <algunaColumna> = ( SELECT <una sola columna> FROM <alguna Tabla> WHERE <condicin cuyo resultado se devuelve en una sola fila> )

Crear una subconsulta anidada O la siguiente: SELECT <lista de seleccn> FROM <Alguna Tabla> WHERE <Alguna Columna> IN ( SELECT <una sola columna> FROM <Alguna Tabla> [WHERE <condicin>] )

Crear una subconsulta anidada O la siguiente: SELECT <lista de seleccn> FROM <Alguna Tabla> WHERE <Alguna Columna> IN ( SELECT <una sola columna> FROM <Alguna Tabla> [WHERE <condicin>] )

Ejemplos select advance,title from titles where advance > any (select advance from publishers inner join titles on titles.pub_id=publishers.pub_id where pub_name='Algodata Infosystems' )

Ejemplos select advance,title from titles where advance > all (select MAX(advance) from publishers inner join titles on titles.pub_id=publishers.pub_id where pub_name='Algodata Infosystems' )

Ejemplos
use Northwind go select ProductID,ProductName,UnitsInStock,UnitPrice from Products where ProductID in (select ProductID from [Order Details] where Quantity >=100 ) order by ProductName

Ejemplos use Northwind Go select CustomerID,CompanyName from Customers C where exists (select * from dbo.Orders o where O.CustomerID=C.CustomerID )

Ejemplos cuando se presenta una subconsulta con la palabra clave EXISTS, funciona como una prueba de existencia. La clusula WHERE de la consulta externa comprueba la existencia de las filas devueltas por la subconsulta. La subconsulta en realidad no produce ningn dato, devuelve el valor TRUE o FALSE.

Subconsultas en las instrucciones update y delete

Rendimiento y Resultados En muchos casos puede usarse una operacin de combinacin en lugar de una consulta, no obstante algunas instancias pueden procesarse solo con una subconsulta. En algunos casos una operacin de combinacin puede producir un mejor rendimiento que una subconsulta, pero por lo general se observa muy poca diferencia en el rendimiento. Sin embargo, el uso de grandes anidamientos de subconsultas puede afectar seriamente el rendimiento.

Rendimiento y Resultados

Rendimiento y Resultados

Rendimiento y Resultados

Una subconsulta puede contener otra subconsulta, y esta subconsulta puede, a su vez, contener otra subconsulta, ... y as sucesivamente. Los recursos del sistema(como la memoria disponible) limitan el nmero de subconsultas que pueden procesarce. Se puede anidar subconsultas hasta 32 niveles, pero esto como le mencion, depende de los recursos disponibles del sistema.

Rendimiento y Resultados

Rendimiento y Resultados

Vous aimerez peut-être aussi