Curso de PHP

Estás en: MySql y SQL : Ejercicios campos relacionados (bases de datos "paises" y "empresa")

Ejercicios campos relacionados (bases de datos "paises" y "empresa")

Consultas con tablas relacionadas de la base de datos "paises" y de la base de datos "empresa".

Ejercicios con la base de datos "paises"

Listar los paises cuya población supere los 50.000.000 y el continente al que pertenecen.

SELECT pais.pais_nombre, pais.pais_poblacion, continente.continente_nombre
FROM pais, continente
WHERE (pais.continente = continente.continente_id) AND (pais.pais_poblacion > 50000000)

La misma consulta, pero utilizando alias

SELECT p.pais_nombre, p.pais_poblacion, c.continente_nombre
FROM pais AS p, continente AS c
WHERE (p.continente = c.continente_id)  AND (p.pais_poblacion > 50000000)

Ejercicios con la base de datos "empresa"

Listar las oficinas del este indicando para cada una de ellas su número,ciudad, números y nombres de sus empleados. Hacer una versión en la que aparecen sólo las que tienen empleados, y hacer otra en las que aparezcanlas oficinas del este que no tienen empleados.

----- Versión en la que aparecen sólo las que tienen empleados -----
SELECT oficinas.oficina, oficinas.ciudad, empleados.numemp, empleados.nombre
FROM oficinas, empleados
WHERE (oficinas.oficina=empleados.oficina) AND (empleados.numemp IS NOT NULL)

----- Versión en la que aparecen las oficinas del este que no tienen empleados -----
SELECT oficinas.oficina, oficinas.ciudad, empleados.numemp, empleados.nombre
FROM oficinas, empleados
WHERE (oficinas.oficina=empleados.oficina) AND oficinas.region='este'

Listar los pedidos mostrando su número, importe, nombre del cliente y el límite de crédito del cliente correspondiente (todos los pedidos tienen cliente y representante). Hacer ejercicio sin y con representante

..............SIN REPRESENTANTE..............
SELECT pedidos.numpedido, pedidos.importe, clientes.nombre, pedidos.rep, clientes.limitecredito
FROM pedidos, clientes, empleados
WHERE (pedidos.clie=clientes.numclie) AND (clientes.repclie=empleados.numemp)

..............CON REPRESENTANTE...............
SELECT pedidos.numpedido, pedidos.importe, clientes.nombre, pedidos.rep, clientes.limitecredito
FROM pedidos, clientes, empleados
WHERE (pedidos.clie=clientes.numclie) AND (clientes.repclie=empleados.numemp)

////// Las relaciones siempre van en el sentido de 1 a varios, es decir, de la clave primaria 
       de una tabla, a la clave foranea

Listar los datos de cada uno de los empleados, la ciudad y región en donde trabaja.

SELECT empleados.numemp, empleados.nombre, empleados.edad, empleados.oficina, empleados.titulo, 
       empleados.contrato, empleados.jefe, empleados.cuota, empleados.ventas, oficinas.ciudad, 
       oficinas.region
ó
SELECT empleados.*, oficinas.region, oficinas.ciudad

FROM empleados, oficinas
WHERE empleados.oficina=oficinas.oficina

Listar las oficinas con objetivo superior a 400 € indicando para cada una de ellas el nombre de su director

SELECT of.oficina, of.ciudad, of.region, of.dir, of.objetivo, of.ventas, emp.nombre
FROM oficinas AS of, empleados AS emp
WHERE (of.oficina = emp.oficina) AND of.objetivo > 400

Listar los pedidos superiores a 150€, incluyendo el nombre del empleado que tomó el pedido y el nombre del cliente que lo solicitó.

SELECT pedidos.numpedido, pedidos.importe, empleados.nombre, clientes.nombre
FROM pedidos, clientes, empleados
WHERE (clientes.numclie=pedidos.clie) AND (empleados.numemp=pedidos.rep) AND (pedidos.importe>150)

Hallar los empleados que realizaron su primer pedido el mismo día en que fueron contratados. Resultado: Ana bustamante

SELECT empleados.*
FROM empleados, clientes, pedidos 
WHERE pedidos.rep= empleados.numemp AND fechapedido=contrato AND (empleados.nombre='Ana Bustamente')

Listar los empleados con una cuota superior a la de su jefe; para cada empleado sacar sus datos y el número, nombre y cuota de su jefe

SELECT e.*, j.numemp AS num_jefe, j.nombre AS nombre_jefe, j.cuota AS cuota_jefe
FROM empleados AS e, empleados AS j  -> Hacemos como duplicado de los datos de la tabla.
                                        Uno para los empleados y otro para los jefes
WHERE e.jefe=j.numemp AND e.cuota>j.cuota

Listar los códigos de los empleados que tienen una línea de pedido superior a 60 € o que tengan una cuota inferior a 60 €

SELECT NUMEMP 
FROM empleados AS e, pedidos AS p 
WHERE (p.rep=e.numemp) AND (importe>60 OR cuota<60)