|
Solución ejercicios tema 3. Las consultas multitabla |
|
Ejercicio 1 |
|
SELECT oficinas.oficina,
ciudad, numemp, nombre |
Como la columna de emparejamiento oficinas.oficina es clave principal en la tabla oficinas, es mejor utilizar el JOIN que un producto cartesiano. Emparejamos las dos tablas por el campo oficina. Las oficinas que no tengan empleados no salen (es un INNER). Como queremos sólo las oficinas del este añadimos la cláusula WHERE con la condicion. El valor este debe ir entre comillas (es un valor alfanumérico). Observar que en la lista de selección la columna oficina está cualificada (su nombre está precedido del nombre de la tabla), es necesario cualificarla porque en las dos tablas existe una columna llamada oficina y el sistema no sabría cuál de las dos escoger. |
|
SELECT oficinas.oficina,
ciudad, numemp, nombre |
Si queremos que también aparezcan las oficinas que no tienen empleados cambiamos INNER por LEFT (queremos todas las oficinas y la tabla oficinas está a la izquierda de la palabra JOIN). Ojo, si en la lista de selección ponemos empleados.oficina en vez de oficinas.oficina, en las filas de oficinas que no tienen empleados el número de oficina aparece nulo. |
|
SELECT oficinas.oficina,
ciudad, numemp, nombre |
Esta SELECT es equivalente a la anterior pero hemos cambiado LEFT por RIGHT porque ahora la tabla oficinas está a la derecha de la palabra JOIN. |
|
Ejercicio 2 |
|
SELECT numpedido,
importe, clientes.nombre AS cliente, limitecredito |
En este ejercicio no pueden haber pedidos sin cliente, y lo que nos interesa son los pedidos, luego tampoco tienen que aparecer los clientes que no tienen pedidos, por lo tanto utilizamos un INNER JOIN.
|
|
Ejercicio 3 |
|
SELECT empleados.*,
ciudad, region |
Aquí hemos utilizado LEFT JOIN para que también
salgan los empleados que no tienen oficina asignada. |
|
Ejercicio 4 |
|
SELECT oficinas.*,
nombre AS director |
Nos interesan las oficinas con objetivo superior a
600.000pts. luego nos tenemos que asegurar que salgan todas incluso si
no tienen director asignado por eso utilizamos RIGHT JOIN. |
|
Ejercicio 5 |
|
SELECT numpedido,
importe, empleados.nombre AS representante, clientes.nombre AS cliente |
En este ejercicio no pueden haber pedidos sin representante ni cliente, y lo que nos interesa son los pedidos, luego tampoco tienen que aparecer los representantes que no tienen pedidos ni los clientes que no tienen pedidos, por lo tanto utilizamos un INNER JOIN. Primero añadimos a cada línea de pedido los datos del cliente corespondiente (con el primer INNER) y a cada fila resultante añadimos los datos del representante correspondiente. Nota: el representante que nos interesa es el que ha realizado el pedido y ese dato lo tenemos en el campo rep de pedidos por eso la condición de emparejamiento es pedidos.rep = empleados.rep. Si hubiesemos querido el nombre del representante asignado al cliente, la condición hubiera sido clientes.repclie = empleados.numemp. |
|
Ejercicio 6 |
|
SELECT empleados.*
|
Los representantes que buscamos tienen un pedido con la misma fecha que la de su contrato, tenemos que añadir a los pedidos los datos del representante correspondiente para poder comparar los dos campos. |
|
Ejercicio 7 |
|
SELECT empleados.*,
jefes.numemp AS num_jefe, jefes.nombre AS nombre_jefe, jefes.cuota AS
cuota_jefe
|
En una misma línea necesito los datos del empleado y los datos de su jefe, luego tengo que combinar empleados con empleados. No interesan los empleados que no tienen jefe luego utilizo INNER. El alias de tabla es obligatorio ya que combino empleados con la misma. |
|
Ejercicio 8 |
|
SELECT numemp
|
Una posible solución es combinar pedidos con empleados para poder seleccionar las líneas de importe > 10000 o cuota < 10000. Hay que utilizar LEFT para que puedan aparecer empleados con cuota < 10000 que no tengan pedidos. |
|
SELECT rep |
Esta es otra solución, obtener por una parte los códigos de los empleados con una línea de pedido > 10000, por otra parte los códigos de los empleados con cuota < 10000 y finalmente unir las dos listas con una UNION. |
|
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.