SlideShare una empresa de Scribd logo
1 de 7
Consultas Multitabla
Son consultas que obtienen los datos de diferentes tablas, para obtener datos de varias tablas tenemos que combinar estas tablas
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 son:
1. la unión de tablas
2. la composición de tablas
Representación Gráfica
1. 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 las filas
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) y
la tabla resultante hereda los encabezados de la primera tabla.
Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos una lista con todos los libros que tenemos.
En este caso las dos tablas tienen las mismas columnas, lo único que varía son las filas, además queremos obtener una lista de libros
(las columnas de una de las tablas) con las filas que están tanto en libros nuevos como las que están en libros antiguos, en este caso
utilizaremos este tipo de operación.
Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o tablas lógicas (resultados de una consulta),
esto nos permite utilizar la operación con más frecuencia ya que pocas veces tenemos en una base de datos tablas idénticas en cuanto
a columnas. El resultado es siempre una tabla lógica.
No es común que dos tablas base sean compatibles de unirse, generalmente son vistas las que pueden unirse
El operador que permite realizar esta operación es el operador UNION.
La sintaxis es la siguiente:
{< consulta >|(< consulta >)}
UNION [ALL]
{< consulta >|(< consulta >)}
[{UNION [ALL] {< consulta >|(< consulta >)}}[ ...n ] ]
[ORDER BY {expression_columna|posicion_columna [ASC|DESC]}
[ ,...n ]]
< consulta > representa 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.
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 las repeticiones.
Se pueden combinar varias tablas con el operador UNION. Por ejemplo supongamos que tenemos otra tabla Pamplona con las oficinas
nuevas de Pamplona:
ejemplo:
Obtener todos los productos cuyo precio exceda de 20 € o que se haya vendido más de 300 euros del producto en algún pedido.
SELECT id_fab, id_producto
FROM productos
WHERE precio > 20
UNION
SELECT fab, producto
FROM pedidos
WHERE importe > 300
2. La composición de tablas: La composición de tablas consiste en obtener a partir de dos tablas cualesquiera una nueva tabla
fusionando las filas de una con las filas de la otra, concatenando los esquemas de ambas tablas. Consiste en formar parejas de filas.
Consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla
unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de
la segunda tabla.
La sentencia SELECT permite realizar esta composición, incluyendo dos o más tablas en la cláusula FROM.
El ejemplo anterior quedaría de la siguiente forma con la composición
Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el pedido, pues los datos del pedido los
tenemos en la tabla de pedidos pero el nombre del representante está en la tabla de empleados y además queremos que aparezcan en
la misma línea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a continuación, hemos seleccionado
las filas que nos interesan.
Existen distintos tipos de composición, aprenderemos a utilizarlos todos y a elegir el tipo más apropiado a cada caso.
Los tipos de composición de tablas son:
• La diferencia EXCEPTO (EXCEPT)
• La intersección INTERSECTO (INTERSECT)
• El producto cartesiano CROSS JOIN
• La composición interna INNER JOIN
• La composición externa LEFT JOIN, RIGHT JOIN Y FULL JOIN
2.1 La diferencia EXCEPTO: Para la diferencia Relacional
Aparecen en la tabla resultante las filas de la primera consulta que no aparecen en la segunda.
Las condiciones son las mismas que las de la unión.
{<consulta>|(<consulta>)}
EXCEPTO
{<consulta>|(<consulta>)}
[{EXCEPT {<consulta>|(<consulta>)}}[ ...n ] ]
[ORDER BY {expression_columna|posicion_columna [ASC|DESC]}
[ ,...n ]]
Ejemplo:
Listar los productos que no aparezcan en ningún pedido.
SELECT id_fab, id_producto
FROM productos
EXCEPTO
SELECT DISTINCT fab, producto
FROM pedidos;
Resultado:
Id_fab Id_producto
aci 41001
bic 41089
bic 41672
imm 775c
imm 887h
imm 887p
imm 887x
qsa xk48
qsa xk48a
Listar las oficinas (sólo su código) que no tienen empleados, utilizando EXCEPTO
SELECT oficina
FROM oficinas
EXCEPTO
SELECT oficina
FROM empleados;
Resultado:
oficina
23
24
25
26
27
28
29
30
31
2.2 La intersección INTERSECTO
Tiene una sintaxis parecida a las anteriores pero en el resultado de la intersección aparecen las filas que están simultáneamente en las
dos consultas.
Las condiciones son las mismas que las de la unión.
{ <consulta>|(<consulta>)}
INTERSECTO
{<especificacion_consulta>|(<especificacion_consulta>)}
[{INTERSECTO {<consulta>|(<consulta>)}} [ ...n ] ]
[ORDER BY {expression_columna|posicion_columna [ASC|DESC]}
[ ,...n ]]
Ejemplo: Obtener todos los productos y que además se haya vendido en un pedido de ese producto.
SELECT id_fab, id_producto
FROM productos
INTERSECTO
SELECT fab, producto FROM pedidos
2.3. El producto cartesiano CROSS JOIN
El producto cartesiano obtiene todas las posibles concatenaciones de filas de la primera tabla con filas de la segunda tabla.
Se indica escribiendo en la cláusula FROM los nombres de las tablas separados por una coma o utilizando el operador CROSS JOIN.
FROM {<tabla_origen>} [ ,...n ]
|<tabla_origen> CROSS JOIN <tabla_origen>
Tabla_origen puede ser un nombre de tabla o de vista o una tabla derivada (resultado de una SELECT), en este último caso la
SELECT tiene que aparecer entre paréntesis y la tabla derivada debe llevar asociado obligatoriamente un alias de tabla. También
puede ser una composición de tablas.
Se pueden utilizar hasta 256 orígenes de tabla en una instrucción, aunque el límite varía en función de la memoria disponible y de la
complejidad del resto de las expresiones de la consulta. También se puede especificar una variable table como un origen de tabla.
Ejemplo:
SELECT *
FROM Repventas, oficinas;
Si ejecutamos esta consulta veremos que las filas del resultado están formadas por las columnas de empleados y las columnas de
oficinas. En las filas aparece cada empleado combinado con la primera oficina, luego los mismos empleados combinados con la
segunda oficina y así hasta combinar todos los empleados con todas las oficinas.
Si ejecutamos:
SELECT *
FROM Repventas CROSS JOIN oficinas;
Obtenemos lo mismo.
Este tipo de operación no es la que se utiliza más a menudo, lo más frecuente sería combinar cada empleado con los datos de SU
oficina. Lo podríamos obtener añadiendo a la consulta un WHERE para filtrar los registros correctos:
SELECT *
FROM Repventas, oficinas
WHERE Repventas.oficina_Rep=oficinas.oficina;
Aquí nos ha aparecido la necesidad de cualificar los campos ya que el nombre oficina_Rep es un campo de RepVentas y de oficinas
por lo que si no lo cualificamos, el sistema nos da error.
Hemos utilizado en la lista de selección *, esto nos recupera todas las columnas de las dos tablas.
SELECT Repventas.*,ciudad, region
FROM Repventas, oficinas
WHERE Repventas.oficina.Rep=oficinas.oficina;
Recupera todas las columnas de RepVentas y las columnas ciudad y región de oficinas.
También podemos combinar una tabla consigo misma, pero en este caso hay que definir un alias de tabla, en al menos una, sino el
sistema da error ya que no puede nombrar los campos.
SELECT *
FROM oficinas, oficinas as ofi2;
No insistiremos más sobre el producto cartesiano porque no es la operación más utilizada, ya que normalmente cuando queramos
componer dos tablas lo haremos con una condición de selección basada en campos de combinación y para este caso es más eficiente
el JOIN que veremos a continuación.
1. Listar los empleados que tienen una cuota superior al objetivo de al menos una oficina. La oficina puede ser cualquiera no tiene por
que ser la del empleado.
SELECT num_emp, nombre, cuota, Repventas.oficina_Rep AS [Su oficina], oficinas.oficina, objetivo
FROM Repventas, oficinas
WHERE cuota > objetivo
Recuerda que se puede utilizar la coma para separar las tablas, ya que esto equivale a escribir CROSS JOIN.
2.4 La composición interna INNER JOIN: Devuelve filas de cualquiera de las dos tablas. Sólo si tiene una fila correspondiente en la
otra tabla. Y desecha las filas en las que no se cumple la condición de combinación indicado en la cláusula On
Es la operación que más emplearemos ya que lo más frecuente es querer juntar los registros de una tabla relacionada con los registros
correspondientes en la tabla de referencia (añadir a cada factura los datos de su cliente, añadir a cada línea de pedido los datos de su
producto, etc..,).
FROM
<tabla_origen> INNER JOIN <tabla_origen> ON <condicion_combi>
tabla_origen tiene el mismo significado que en el producto cartesiano.
condicion_combi es cualquier condición que permite seleccionar las parejas de filas que aparecen en el resultado. Normalmente será
una condición de igualdad.
SELECT *
FROM Repventas INNER JOIN oficinas
ON Repventas.oficina_Rep=oficinas.oficina;
Obtiene los representantes de Ventas combinados con los datos de su oficina.
SELECT *
FROM pedidos INNER JOIN productos
ON producto = id_producto AND fab = id_fab;
Obtiene los pedidos combinados con los productos correspondientes.
Normalmente la condición de combinación será una igualdad pero se puede utilizar cualquier operador de comparación (<>, >…).
Es fácil ver la utilidad de esta instrucción y de hecho se utilizará muy a menudo, pero hay algún caso que no resuelve. En las consultas
anteriores, no aparecen las filas que no tienen fila correspondiente en la otra tabla.
SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad
FROM Repventas INNER JOIN oficinas
ON Repventas.oficina_Rep =oficinas.oficina;
Num_emp Nombre oficina ciudad
101 Antonio Viguer 12 Alicante
102 Alvaro Jaumes 21 Badajoz
103 Juan Rovira 12 Alicante
104 José González 12 Alicante
105 Vicente Pantalla 13 Castellón
106 Luis Antonio 11 Valencia
107 Jorge Gutiérrez 22 A Coruña
108 Ana Bustamante 21 Badajoz
109 María Sunta 11 Valencia
No aparecen los Repventas que no tienen oficina, ni las oficinas que no tienen Repventas, porque para que salga la fila, debe de
existir una fila de la otra tabla que cumpla la condición.
Para resolver este problema debemos utilizar otro tipo de composición, la composición externa.
Combinar datos de dos tablas que tienen algún dato en común, con la finalidad de ampliar la información en una única tabla.
1. Listar los códigos y nombres de los representantes de ventas de las oficinas del Este con su oficina y ciudad.
Como la ciudad donde se encuentra la oficina no viene incluida en el listado de empleados, deberemos enlazar ambas tablas (oficinas
y empleados) , utilizando como enlace el código de la oficina, que sí que está en las dos.
SELECT num_emp, nombre, Repventas.oficina_Rep, ciudad
FROM oficinas INNER JOIN Repventas ON oficinas.oficina = Repventas.oficina_Rep
WHERE region ='Este';
Resultado:
Num_emp Nombre Oficina Ciudad
101 Antonio Viguer 12 Alicante
103 Juan Rovira 12 Alicante
104 José González 12 Alicante
105 Vicente Pantalla 13 Castellon
106 Luis Antonio 11 Valencia
Listar todos los pedidos mostrando su número, importe, nombre de cliente, y el límite de crédito del cliente correspondiente.
Como la tabla de pedidos no contiene el nombre del cliente, enlazaremos ambas tablas por el dato en común de referencia, su código.
SELECT num_pedido, importe, clientes.nombre AS Cliente, limitecredito
FROM pedidos INNER JOIN clientes ON clie=numclie;
Resultado:
Numpedido Importe Cliente Limitecredito
110036 22,50 Julian López 3500
110037 31,50 Carlos Tena 3500
112963 3,276 Jaime Llorens 5000
112968 39,78 Alvaro Rodríguez 6500
112975 21,00 Cristóbal García 500
112979 150,00 Cristina Bulini 2000
112983 7,02 Jaime Llorens 5000
112987 275,00 Jaime Llorens 5000
112989 14,58 Luis García Antón 6500
2.5 La Composición externa LEFT, RIGHT y FULL OUTER JOIN
La composición externa se escribe de manera similar al INNER JOIN indicando una condición de combinación pero en el resultado se
añaden filas que no cumplen la condición de combinación.
Sintaxis
FROM
<tabla_origen> {LEFT|RIGHT|FULL} [OUTER] JOIN <tabla_origen>
ON <condicion_combi>
La palabra OUTER es opcional y no añade ninguna función.
Las palabras LEFT, RIGHT y FULL indican la tabla de la cual se van a añadir las filas sin correspondencia.
SELECT num_emp,nombre,empleados.oficina, ciudad
FROM empleados LEFT JOIN oficinas
ON Repventas.oficina_Rep =oficinas.oficina;
numemp Nombre oficina Ciudad
101 Antonio Viguer 12 Alicante
102 Alvaro Jaumes 21 Badajoz
103 Juan Rovira 12 Alicante
104 José González 12 Alicante
105 Vicente Pantalla 13 Castellón
106 Luis Antonio 11 Valencia
107 Jorge Gutiérrez 22 A Coruña
108 Ana Bustamante 21 Badajoz
109 María Sunta 11 Valencia
110 Juan Victor NULL NULL
Ahora sí aparece el empleado 110 que no tiene oficina
Obtiene los empleados con su oficina y los empleados (tabla a la izquierda LEFT del JOIN) que no tienen oficina aparecerán también
en el resultado con los campos de la tabla oficinas rellenados a NULL.
SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad, oficinas.oficina
FROM Repventas RIGHT JOIN oficinas
ON Repventas.oficina_Rep =oficinas.oficina;
numemp Nombre oficina ciudad oficina
106 Luis Antonio 11 Valencia 11
109 María Sunta 11 Valencia 11
101 Antonio Viguer 12 Alicante 12
103 Juan Rovira 12 Alicante 12
104 José González 12 Alicante 12
105 Vicente Pantalla 13 Castellón 13
102 Alvaro Jaumes 21 Badajoz 21
108 Ana Bustamante 21 Badajoz 21
107 Jorge Gutiérrez 22 A Coruña 22
NULL NULL NULL Madrid 23
NULL NULL NULL Aranjuez 24
NULL NULL NULL Pamplona 26
NULL NULL NULL Valencia 28
Las oficinas 23,24,26 y 28 no tienen Representantes de Ventas.
Obtiene los representantes de ventas con su oficina y las oficinas (tabla a la derecha RIGHT del JOIN) que no tienen empleados
aparecerán también en el resultado con los campos de la tabla empleados rellenados a NULL.
SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad, oficinas.oficina
FROM Repventas FULL JOIN oficinas
ON Repventas.oficina_Rep =oficinas.oficina;
numemp nombre oficina ciudad oficina
101 Antonio Viguer 12 Alicante 12
102 Alvaro Jaumes 21 Badajoz 21
103 Juan Rovira 12 Alicante 12
104 José González 12 Alicante 12
105 Vicente Pantalla 13 Castellón 13
106 Luis Antonio 11 Valencia 11
Aparecen tanto los empleados sin oficina como las oficinas sin empleados.
SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad, oficinas.oficina
FROM Repventas FULL OUTER JOIN oficinas
ON Repventas.oficina_Rep =oficinas.oficina;
Es equivalente, la palabra OUTER como hemos dicho no añade ninguna funcionalidad y se utiliza si se quiere por cuestiones de estilo.
NOTA: Cuando necesitamos obtener filas con datos de dos tablas con una condición de combinación utilizaremos un JOIN, os
aconsejo empezar por escribir el JOIN con la condición que sea necesaria para combinar las filas, y luego plantearos si la composición
debe de ser interna o externa. Para este segundo paso ésta sería la norma a seguir:
Empezamos con INNER JOIN.
• Si pueden haber filas de la primera tabla que no estén relacionadas con filas de la segunda tabla y nos interesa que salgan
en el resultado, entonces cambiamos a LEFT JOIN.
• Si pueden haber filas de la segunda tabla que no estén relacionadas con filas de la primera tabla y nos interesa que salgan
en el resultado, entonces cambiamos a RIGHT JOIN.
• Si necesitamos LEFT y RIGHT entonces utilizamos FULL JOIN.
Siguiendo el ejemplo anterior nos preguntaríamos:
¿Pueden haber empleados que no tengan oficina y nos interesan?, si es que sí, necesitamos un LEFT JOIN.
Seguiríamos preguntando:
¿Pueden haber oficinas que no tengan empleados y nos interesan?, si es que sí, necesitamos un RIGHT JOIN.
Si al final necesitamos LEFT y también RIGHT entonces utilizamos FULL JOIN.
Combinar datos de dos tablas que tienen algún dato en común, con la finalidad de ampliar la información en una única tabla.
Tendremos en cuenta los nulos, de forma que el LEFT o el RIGHT indicarán qué tabla es la que deberá aparecer, en caso de no tener
correspondencia en la otra.
1. Listar todas las oficinas y los nombres y títulos de sus directores.
SELECT oficinas.*, nombre AS director, titulo
FROM oficinas LEFT JOIN Repventas ON dir = num_emp;
Resultado:
Oficina Ciudad Region Dir Objetivo Ventas Director Titulo
11 Valencia este 106 57500,00 69300,00 Luis Antonio director general
12 Alicante este 104 80000,00 73500,00 José González dir ventas
13 Castellon este 105 35000,00 36800,00 Vicente Pantalla representante
21 Badajoz oeste 108 72500,00 84400,00 Ana Bustamante dir ventas
22 A Coruña oeste 108 30000,00 18600,00 Ana Bustamante dir ventas
23 Madrid centro 108 NULL NULL Ana Bustamante dir ventas
2. Listar las oficinas con objetivo superior a 60.000 euros indicando para cada una el nombre de su director.
SELECT oficinas.*, nombre AS director
FROM oficinas LEFT JOIN Repventas ON dir = num_emp
WHERE objetivo > 60000;
Resultado:
Oficina Ciudad Region Dir Objetivo Ventas Director
12 Alicante este 104 80000,00 73500,00 José González
21 Badajoz oeste 108 72500,00 84400,00 Ana Bustamante
28 Valencia este NULL 90000,00 0,00 NULL

Más contenido relacionado

La actualidad más candente

Comandos utilizados en sql
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sqlByron Eras
 
Keys in dbms
Keys in dbmsKeys in dbms
Keys in dbmsshalini s
 
Normalizacion de base de datos
Normalizacion de base de datosNormalizacion de base de datos
Normalizacion de base de datosSergio Sanchez
 
Normalizacion de bases de datos
Normalizacion de bases de datosNormalizacion de bases de datos
Normalizacion de bases de datosCaro_Noirgean
 
Inserción de datos y selección de datos
Inserción de datos y selección de datosInserción de datos y selección de datos
Inserción de datos y selección de datoscarmen305
 
Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejasalexmerono
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)michell_quitian
 
Unidad 2 concepto de Programa,Proceso y Procesador
Unidad 2  concepto de Programa,Proceso y ProcesadorUnidad 2  concepto de Programa,Proceso y Procesador
Unidad 2 concepto de Programa,Proceso y ProcesadorMario Alberto Antonio Lopez
 
El modelo entidad_relacion
El modelo entidad_relacionEl modelo entidad_relacion
El modelo entidad_relacionLuis Lucho
 
Colecciones en Java
Colecciones en JavaColecciones en Java
Colecciones en JavaRonny Parra
 
Tipos de datos en MySQL
Tipos de datos en MySQLTipos de datos en MySQL
Tipos de datos en MySQLTotus Muertos
 

La actualidad más candente (20)

Comandos utilizados en sql
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sql
 
Sql select
Sql select Sql select
Sql select
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Ejercicios sql (1)
Ejercicios sql (1)Ejercicios sql (1)
Ejercicios sql (1)
 
Keys in dbms
Keys in dbmsKeys in dbms
Keys in dbms
 
Normalizacion de base de datos
Normalizacion de base de datosNormalizacion de base de datos
Normalizacion de base de datos
 
Normalizacion de bases de datos
Normalizacion de bases de datosNormalizacion de bases de datos
Normalizacion de bases de datos
 
Quicksort
QuicksortQuicksort
Quicksort
 
Inserción de datos y selección de datos
Inserción de datos y selección de datosInserción de datos y selección de datos
Inserción de datos y selección de datos
 
Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejas
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)
 
Fundamentos de BD - unidad 3 modelo relacional
Fundamentos de BD - unidad 3 modelo relacionalFundamentos de BD - unidad 3 modelo relacional
Fundamentos de BD - unidad 3 modelo relacional
 
Unidad 2 concepto de Programa,Proceso y Procesador
Unidad 2  concepto de Programa,Proceso y ProcesadorUnidad 2  concepto de Programa,Proceso y Procesador
Unidad 2 concepto de Programa,Proceso y Procesador
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
El modelo entidad_relacion
El modelo entidad_relacionEl modelo entidad_relacion
El modelo entidad_relacion
 
Joins in SQL
Joins in SQLJoins in SQL
Joins in SQL
 
Colecciones en Java
Colecciones en JavaColecciones en Java
Colecciones en Java
 
Tipos de datos en MySQL
Tipos de datos en MySQLTipos de datos en MySQL
Tipos de datos en MySQL
 
Conceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de DatosConceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de Datos
 

Destacado

PROJECT UPDATE
PROJECT UPDATE PROJECT UPDATE
PROJECT UPDATE osxri
 
Osx corporate presentation english_november
Osx corporate presentation english_novemberOsx corporate presentation english_november
Osx corporate presentation english_novemberosxri
 
Osx corporate presentation english_february [modo de compatibilidade]
Osx corporate presentation english_february [modo de compatibilidade]Osx corporate presentation english_february [modo de compatibilidade]
Osx corporate presentation english_february [modo de compatibilidade]osxri
 
Osx corporate presentation english_august
Osx corporate presentation english_augustOsx corporate presentation english_august
Osx corporate presentation english_augustosxri
 
Ideario (resumido)
Ideario (resumido)Ideario (resumido)
Ideario (resumido)willfredo02
 
Final website sustainability live, dr catherine wilson, may 2011
Final website sustainability live, dr catherine wilson, may 2011Final website sustainability live, dr catherine wilson, may 2011
Final website sustainability live, dr catherine wilson, may 2011presentenvi
 
Osx corporate presentation english_december
Osx corporate presentation english_decemberOsx corporate presentation english_december
Osx corporate presentation english_decemberosxri
 
I lss project on first call resolution 13thmay_2013_updated
I lss project on first call resolution 13thmay_2013_updatedI lss project on first call resolution 13thmay_2013_updated
I lss project on first call resolution 13thmay_2013_updatedchaitmk710586
 
I lss reduction%20in%20aht%2713 final
I lss reduction%20in%20aht%2713 finalI lss reduction%20in%20aht%2713 final
I lss reduction%20in%20aht%2713 finalchaitmk710586
 
áLbum de fotografías
áLbum de fotografíasáLbum de fotografías
áLbum de fotografíasdiazurango
 
Presentacion de las multinacionales
Presentacion de las multinacionalesPresentacion de las multinacionales
Presentacion de las multinacionalesDIEGUIN1986
 

Destacado (18)

PROJECT UPDATE
PROJECT UPDATE PROJECT UPDATE
PROJECT UPDATE
 
Osx corporate presentation english_november
Osx corporate presentation english_novemberOsx corporate presentation english_november
Osx corporate presentation english_november
 
Osx corporate presentation english_february [modo de compatibilidade]
Osx corporate presentation english_february [modo de compatibilidade]Osx corporate presentation english_february [modo de compatibilidade]
Osx corporate presentation english_february [modo de compatibilidade]
 
Conservation area appraisal
Conservation area appraisalConservation area appraisal
Conservation area appraisal
 
Presentation bel
Presentation belPresentation bel
Presentation bel
 
Osx corporate presentation english_august
Osx corporate presentation english_augustOsx corporate presentation english_august
Osx corporate presentation english_august
 
Ideario (resumido)
Ideario (resumido)Ideario (resumido)
Ideario (resumido)
 
Final website sustainability live, dr catherine wilson, may 2011
Final website sustainability live, dr catherine wilson, may 2011Final website sustainability live, dr catherine wilson, may 2011
Final website sustainability live, dr catherine wilson, may 2011
 
Osx corporate presentation english_december
Osx corporate presentation english_decemberOsx corporate presentation english_december
Osx corporate presentation english_december
 
I lss project on first call resolution 13thmay_2013_updated
I lss project on first call resolution 13thmay_2013_updatedI lss project on first call resolution 13thmay_2013_updated
I lss project on first call resolution 13thmay_2013_updated
 
I lss reduction%20in%20aht%2713 final
I lss reduction%20in%20aht%2713 finalI lss reduction%20in%20aht%2713 final
I lss reduction%20in%20aht%2713 final
 
Web index report 07.2011
Web index report 07.2011Web index report 07.2011
Web index report 07.2011
 
!Web index report 201106
!Web index report 201106!Web index report 201106
!Web index report 201106
 
TNS Web index report 07.2011
TNS Web index report  07.2011TNS Web index report  07.2011
TNS Web index report 07.2011
 
Web index report 201103
Web index report 201103Web index report 201103
Web index report 201103
 
áLbum de fotografías
áLbum de fotografíasáLbum de fotografías
áLbum de fotografías
 
!Web index report 201103
!Web index report 201103!Web index report 201103
!Web index report 201103
 
Presentacion de las multinacionales
Presentacion de las multinacionalesPresentacion de las multinacionales
Presentacion de las multinacionales
 

Similar a Consultas multitabla clase

Similar a Consultas multitabla clase (20)

Consultas multitabl1 sql
Consultas multitabl1 sqlConsultas multitabl1 sql
Consultas multitabl1 sql
 
Sql1 multitablas
Sql1 multitablasSql1 multitablas
Sql1 multitablas
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
 
Manipulacion de Bases de Datos
Manipulacion de Bases de DatosManipulacion de Bases de Datos
Manipulacion de Bases de Datos
 
Consultas básicas en sql server
Consultas básicas en sql serverConsultas básicas en sql server
Consultas básicas en sql server
 
Consultas basicas en sql server
Consultas basicas en sql serverConsultas basicas en sql server
Consultas basicas en sql server
 
MANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓNMANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓN
 
MANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓNMANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓN
 
Combinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablasCombinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablas
 
Operaciones basicas de sql
Operaciones basicas de sqlOperaciones basicas de sql
Operaciones basicas de sql
 
Combinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablasCombinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablas
 
Grupo alfa 3
Grupo alfa 3Grupo alfa 3
Grupo alfa 3
 
Sql
SqlSql
Sql
 
14 structure query language
14 structure query language14 structure query language
14 structure query language
 
Objeto De Aprendizaje
Objeto De AprendizajeObjeto De Aprendizaje
Objeto De Aprendizaje
 
Objeto De Aprendizaje
Objeto De AprendizajeObjeto De Aprendizaje
Objeto De Aprendizaje
 
Guia de ejercicio sql
Guia de ejercicio sqlGuia de ejercicio sql
Guia de ejercicio sql
 
Sentencia select
Sentencia selectSentencia select
Sentencia select
 
SENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVERSENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVER
 
Consulta sql alexandra mayorga
Consulta sql alexandra mayorgaConsulta sql alexandra mayorga
Consulta sql alexandra mayorga
 

Último

VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfCESARMALAGA4
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxMapyMerma1
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 

Último (20)

VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptx
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 

Consultas multitabla clase

  • 1. Consultas Multitabla Son consultas que obtienen los datos de diferentes tablas, para obtener datos de varias tablas tenemos que combinar estas tablas 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 son: 1. la unión de tablas 2. la composición de tablas Representación Gráfica 1. 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 las filas 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) y la tabla resultante hereda los encabezados de la primera tabla. Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos una lista con todos los libros que tenemos. En este caso las dos tablas tienen las mismas columnas, lo único que varía son las filas, además queremos obtener una lista de libros (las columnas de una de las tablas) con las filas que están tanto en libros nuevos como las que están en libros antiguos, en este caso utilizaremos este tipo de operación. Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o tablas lógicas (resultados de una consulta), esto nos permite utilizar la operación con más frecuencia ya que pocas veces tenemos en una base de datos tablas idénticas en cuanto a columnas. El resultado es siempre una tabla lógica. No es común que dos tablas base sean compatibles de unirse, generalmente son vistas las que pueden unirse El operador que permite realizar esta operación es el operador UNION. La sintaxis es la siguiente: {< consulta >|(< consulta >)} UNION [ALL] {< consulta >|(< consulta >)} [{UNION [ALL] {< consulta >|(< consulta >)}}[ ...n ] ] [ORDER BY {expression_columna|posicion_columna [ASC|DESC]} [ ,...n ]] < consulta > representa 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. 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 las repeticiones. Se pueden combinar varias tablas con el operador UNION. Por ejemplo supongamos que tenemos otra tabla Pamplona con las oficinas nuevas de Pamplona: ejemplo: Obtener todos los productos cuyo precio exceda de 20 € o que se haya vendido más de 300 euros del producto en algún pedido. SELECT id_fab, id_producto FROM productos WHERE precio > 20 UNION SELECT fab, producto FROM pedidos WHERE importe > 300 2. La composición de tablas: La composición de tablas consiste en obtener a partir de dos tablas cualesquiera una nueva tabla fusionando las filas de una con las filas de la otra, concatenando los esquemas de ambas tablas. Consiste en formar parejas de filas. Consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de la segunda tabla. La sentencia SELECT permite realizar esta composición, incluyendo dos o más tablas en la cláusula FROM.
  • 2. El ejemplo anterior quedaría de la siguiente forma con la composición Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el pedido, pues los datos del pedido los tenemos en la tabla de pedidos pero el nombre del representante está en la tabla de empleados y además queremos que aparezcan en la misma línea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a continuación, hemos seleccionado las filas que nos interesan. Existen distintos tipos de composición, aprenderemos a utilizarlos todos y a elegir el tipo más apropiado a cada caso. Los tipos de composición de tablas son: • La diferencia EXCEPTO (EXCEPT) • La intersección INTERSECTO (INTERSECT) • El producto cartesiano CROSS JOIN • La composición interna INNER JOIN • La composición externa LEFT JOIN, RIGHT JOIN Y FULL JOIN 2.1 La diferencia EXCEPTO: Para la diferencia Relacional Aparecen en la tabla resultante las filas de la primera consulta que no aparecen en la segunda. Las condiciones son las mismas que las de la unión. {<consulta>|(<consulta>)} EXCEPTO {<consulta>|(<consulta>)} [{EXCEPT {<consulta>|(<consulta>)}}[ ...n ] ] [ORDER BY {expression_columna|posicion_columna [ASC|DESC]} [ ,...n ]] Ejemplo: Listar los productos que no aparezcan en ningún pedido. SELECT id_fab, id_producto FROM productos EXCEPTO SELECT DISTINCT fab, producto FROM pedidos; Resultado: Id_fab Id_producto aci 41001 bic 41089 bic 41672 imm 775c imm 887h imm 887p imm 887x qsa xk48 qsa xk48a Listar las oficinas (sólo su código) que no tienen empleados, utilizando EXCEPTO SELECT oficina FROM oficinas EXCEPTO
  • 3. SELECT oficina FROM empleados; Resultado: oficina 23 24 25 26 27 28 29 30 31 2.2 La intersección INTERSECTO Tiene una sintaxis parecida a las anteriores pero en el resultado de la intersección aparecen las filas que están simultáneamente en las dos consultas. Las condiciones son las mismas que las de la unión. { <consulta>|(<consulta>)} INTERSECTO {<especificacion_consulta>|(<especificacion_consulta>)} [{INTERSECTO {<consulta>|(<consulta>)}} [ ...n ] ] [ORDER BY {expression_columna|posicion_columna [ASC|DESC]} [ ,...n ]] Ejemplo: Obtener todos los productos y que además se haya vendido en un pedido de ese producto. SELECT id_fab, id_producto FROM productos INTERSECTO SELECT fab, producto FROM pedidos 2.3. El producto cartesiano CROSS JOIN El producto cartesiano obtiene todas las posibles concatenaciones de filas de la primera tabla con filas de la segunda tabla. Se indica escribiendo en la cláusula FROM los nombres de las tablas separados por una coma o utilizando el operador CROSS JOIN. FROM {<tabla_origen>} [ ,...n ] |<tabla_origen> CROSS JOIN <tabla_origen> Tabla_origen puede ser un nombre de tabla o de vista o una tabla derivada (resultado de una SELECT), en este último caso la SELECT tiene que aparecer entre paréntesis y la tabla derivada debe llevar asociado obligatoriamente un alias de tabla. También puede ser una composición de tablas. Se pueden utilizar hasta 256 orígenes de tabla en una instrucción, aunque el límite varía en función de la memoria disponible y de la complejidad del resto de las expresiones de la consulta. También se puede especificar una variable table como un origen de tabla. Ejemplo: SELECT * FROM Repventas, oficinas; Si ejecutamos esta consulta veremos que las filas del resultado están formadas por las columnas de empleados y las columnas de oficinas. En las filas aparece cada empleado combinado con la primera oficina, luego los mismos empleados combinados con la segunda oficina y así hasta combinar todos los empleados con todas las oficinas. Si ejecutamos: SELECT * FROM Repventas CROSS JOIN oficinas; Obtenemos lo mismo. Este tipo de operación no es la que se utiliza más a menudo, lo más frecuente sería combinar cada empleado con los datos de SU oficina. Lo podríamos obtener añadiendo a la consulta un WHERE para filtrar los registros correctos: SELECT * FROM Repventas, oficinas WHERE Repventas.oficina_Rep=oficinas.oficina; Aquí nos ha aparecido la necesidad de cualificar los campos ya que el nombre oficina_Rep es un campo de RepVentas y de oficinas por lo que si no lo cualificamos, el sistema nos da error. Hemos utilizado en la lista de selección *, esto nos recupera todas las columnas de las dos tablas.
  • 4. SELECT Repventas.*,ciudad, region FROM Repventas, oficinas WHERE Repventas.oficina.Rep=oficinas.oficina; Recupera todas las columnas de RepVentas y las columnas ciudad y región de oficinas. También podemos combinar una tabla consigo misma, pero en este caso hay que definir un alias de tabla, en al menos una, sino el sistema da error ya que no puede nombrar los campos. SELECT * FROM oficinas, oficinas as ofi2; No insistiremos más sobre el producto cartesiano porque no es la operación más utilizada, ya que normalmente cuando queramos componer dos tablas lo haremos con una condición de selección basada en campos de combinación y para este caso es más eficiente el JOIN que veremos a continuación. 1. Listar los empleados que tienen una cuota superior al objetivo de al menos una oficina. La oficina puede ser cualquiera no tiene por que ser la del empleado. SELECT num_emp, nombre, cuota, Repventas.oficina_Rep AS [Su oficina], oficinas.oficina, objetivo FROM Repventas, oficinas WHERE cuota > objetivo Recuerda que se puede utilizar la coma para separar las tablas, ya que esto equivale a escribir CROSS JOIN. 2.4 La composición interna INNER JOIN: Devuelve filas de cualquiera de las dos tablas. Sólo si tiene una fila correspondiente en la otra tabla. Y desecha las filas en las que no se cumple la condición de combinación indicado en la cláusula On Es la operación que más emplearemos ya que lo más frecuente es querer juntar los registros de una tabla relacionada con los registros correspondientes en la tabla de referencia (añadir a cada factura los datos de su cliente, añadir a cada línea de pedido los datos de su producto, etc..,). FROM <tabla_origen> INNER JOIN <tabla_origen> ON <condicion_combi> tabla_origen tiene el mismo significado que en el producto cartesiano. condicion_combi es cualquier condición que permite seleccionar las parejas de filas que aparecen en el resultado. Normalmente será una condición de igualdad. SELECT * FROM Repventas INNER JOIN oficinas ON Repventas.oficina_Rep=oficinas.oficina; Obtiene los representantes de Ventas combinados con los datos de su oficina. SELECT * FROM pedidos INNER JOIN productos ON producto = id_producto AND fab = id_fab; Obtiene los pedidos combinados con los productos correspondientes. Normalmente la condición de combinación será una igualdad pero se puede utilizar cualquier operador de comparación (<>, >…). Es fácil ver la utilidad de esta instrucción y de hecho se utilizará muy a menudo, pero hay algún caso que no resuelve. En las consultas anteriores, no aparecen las filas que no tienen fila correspondiente en la otra tabla. SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad FROM Repventas INNER JOIN oficinas ON Repventas.oficina_Rep =oficinas.oficina; Num_emp Nombre oficina ciudad 101 Antonio Viguer 12 Alicante 102 Alvaro Jaumes 21 Badajoz 103 Juan Rovira 12 Alicante 104 José González 12 Alicante 105 Vicente Pantalla 13 Castellón 106 Luis Antonio 11 Valencia 107 Jorge Gutiérrez 22 A Coruña 108 Ana Bustamante 21 Badajoz 109 María Sunta 11 Valencia No aparecen los Repventas que no tienen oficina, ni las oficinas que no tienen Repventas, porque para que salga la fila, debe de existir una fila de la otra tabla que cumpla la condición. Para resolver este problema debemos utilizar otro tipo de composición, la composición externa. Combinar datos de dos tablas que tienen algún dato en común, con la finalidad de ampliar la información en una única tabla. 1. Listar los códigos y nombres de los representantes de ventas de las oficinas del Este con su oficina y ciudad.
  • 5. Como la ciudad donde se encuentra la oficina no viene incluida en el listado de empleados, deberemos enlazar ambas tablas (oficinas y empleados) , utilizando como enlace el código de la oficina, que sí que está en las dos. SELECT num_emp, nombre, Repventas.oficina_Rep, ciudad FROM oficinas INNER JOIN Repventas ON oficinas.oficina = Repventas.oficina_Rep WHERE region ='Este'; Resultado: Num_emp Nombre Oficina Ciudad 101 Antonio Viguer 12 Alicante 103 Juan Rovira 12 Alicante 104 José González 12 Alicante 105 Vicente Pantalla 13 Castellon 106 Luis Antonio 11 Valencia Listar todos los pedidos mostrando su número, importe, nombre de cliente, y el límite de crédito del cliente correspondiente. Como la tabla de pedidos no contiene el nombre del cliente, enlazaremos ambas tablas por el dato en común de referencia, su código. SELECT num_pedido, importe, clientes.nombre AS Cliente, limitecredito FROM pedidos INNER JOIN clientes ON clie=numclie; Resultado: Numpedido Importe Cliente Limitecredito 110036 22,50 Julian López 3500 110037 31,50 Carlos Tena 3500 112963 3,276 Jaime Llorens 5000 112968 39,78 Alvaro Rodríguez 6500 112975 21,00 Cristóbal García 500 112979 150,00 Cristina Bulini 2000 112983 7,02 Jaime Llorens 5000 112987 275,00 Jaime Llorens 5000 112989 14,58 Luis García Antón 6500 2.5 La Composición externa LEFT, RIGHT y FULL OUTER JOIN La composición externa se escribe de manera similar al INNER JOIN indicando una condición de combinación pero en el resultado se añaden filas que no cumplen la condición de combinación. Sintaxis FROM <tabla_origen> {LEFT|RIGHT|FULL} [OUTER] JOIN <tabla_origen> ON <condicion_combi> La palabra OUTER es opcional y no añade ninguna función. Las palabras LEFT, RIGHT y FULL indican la tabla de la cual se van a añadir las filas sin correspondencia. SELECT num_emp,nombre,empleados.oficina, ciudad FROM empleados LEFT JOIN oficinas ON Repventas.oficina_Rep =oficinas.oficina; numemp Nombre oficina Ciudad 101 Antonio Viguer 12 Alicante 102 Alvaro Jaumes 21 Badajoz 103 Juan Rovira 12 Alicante 104 José González 12 Alicante 105 Vicente Pantalla 13 Castellón 106 Luis Antonio 11 Valencia 107 Jorge Gutiérrez 22 A Coruña 108 Ana Bustamante 21 Badajoz 109 María Sunta 11 Valencia 110 Juan Victor NULL NULL Ahora sí aparece el empleado 110 que no tiene oficina Obtiene los empleados con su oficina y los empleados (tabla a la izquierda LEFT del JOIN) que no tienen oficina aparecerán también en el resultado con los campos de la tabla oficinas rellenados a NULL. SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad, oficinas.oficina FROM Repventas RIGHT JOIN oficinas ON Repventas.oficina_Rep =oficinas.oficina;
  • 6. numemp Nombre oficina ciudad oficina 106 Luis Antonio 11 Valencia 11 109 María Sunta 11 Valencia 11 101 Antonio Viguer 12 Alicante 12 103 Juan Rovira 12 Alicante 12 104 José González 12 Alicante 12 105 Vicente Pantalla 13 Castellón 13 102 Alvaro Jaumes 21 Badajoz 21 108 Ana Bustamante 21 Badajoz 21 107 Jorge Gutiérrez 22 A Coruña 22 NULL NULL NULL Madrid 23 NULL NULL NULL Aranjuez 24 NULL NULL NULL Pamplona 26 NULL NULL NULL Valencia 28 Las oficinas 23,24,26 y 28 no tienen Representantes de Ventas. Obtiene los representantes de ventas con su oficina y las oficinas (tabla a la derecha RIGHT del JOIN) que no tienen empleados aparecerán también en el resultado con los campos de la tabla empleados rellenados a NULL. SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad, oficinas.oficina FROM Repventas FULL JOIN oficinas ON Repventas.oficina_Rep =oficinas.oficina; numemp nombre oficina ciudad oficina 101 Antonio Viguer 12 Alicante 12 102 Alvaro Jaumes 21 Badajoz 21 103 Juan Rovira 12 Alicante 12 104 José González 12 Alicante 12 105 Vicente Pantalla 13 Castellón 13 106 Luis Antonio 11 Valencia 11 Aparecen tanto los empleados sin oficina como las oficinas sin empleados. SELECT num_emp,nombre, Repventas.oficina_Rep, ciudad, oficinas.oficina FROM Repventas FULL OUTER JOIN oficinas ON Repventas.oficina_Rep =oficinas.oficina; Es equivalente, la palabra OUTER como hemos dicho no añade ninguna funcionalidad y se utiliza si se quiere por cuestiones de estilo. NOTA: Cuando necesitamos obtener filas con datos de dos tablas con una condición de combinación utilizaremos un JOIN, os aconsejo empezar por escribir el JOIN con la condición que sea necesaria para combinar las filas, y luego plantearos si la composición debe de ser interna o externa. Para este segundo paso ésta sería la norma a seguir: Empezamos con INNER JOIN. • Si pueden haber filas de la primera tabla que no estén relacionadas con filas de la segunda tabla y nos interesa que salgan en el resultado, entonces cambiamos a LEFT JOIN. • Si pueden haber filas de la segunda tabla que no estén relacionadas con filas de la primera tabla y nos interesa que salgan en el resultado, entonces cambiamos a RIGHT JOIN. • Si necesitamos LEFT y RIGHT entonces utilizamos FULL JOIN. Siguiendo el ejemplo anterior nos preguntaríamos: ¿Pueden haber empleados que no tengan oficina y nos interesan?, si es que sí, necesitamos un LEFT JOIN. Seguiríamos preguntando: ¿Pueden haber oficinas que no tengan empleados y nos interesan?, si es que sí, necesitamos un RIGHT JOIN. Si al final necesitamos LEFT y también RIGHT entonces utilizamos FULL JOIN. Combinar datos de dos tablas que tienen algún dato en común, con la finalidad de ampliar la información en una única tabla. Tendremos en cuenta los nulos, de forma que el LEFT o el RIGHT indicarán qué tabla es la que deberá aparecer, en caso de no tener correspondencia en la otra. 1. Listar todas las oficinas y los nombres y títulos de sus directores. SELECT oficinas.*, nombre AS director, titulo FROM oficinas LEFT JOIN Repventas ON dir = num_emp; Resultado: Oficina Ciudad Region Dir Objetivo Ventas Director Titulo 11 Valencia este 106 57500,00 69300,00 Luis Antonio director general 12 Alicante este 104 80000,00 73500,00 José González dir ventas 13 Castellon este 105 35000,00 36800,00 Vicente Pantalla representante 21 Badajoz oeste 108 72500,00 84400,00 Ana Bustamante dir ventas 22 A Coruña oeste 108 30000,00 18600,00 Ana Bustamante dir ventas 23 Madrid centro 108 NULL NULL Ana Bustamante dir ventas
  • 7. 2. Listar las oficinas con objetivo superior a 60.000 euros indicando para cada una el nombre de su director. SELECT oficinas.*, nombre AS director FROM oficinas LEFT JOIN Repventas ON dir = num_emp WHERE objetivo > 60000; Resultado: Oficina Ciudad Region Dir Objetivo Ventas Director 12 Alicante este 104 80000,00 73500,00 José González 21 Badajoz oeste 108 72500,00 84400,00 Ana Bustamante 28 Valencia este NULL 90000,00 0,00 NULL