Base de datos Niu Ke.com SQL combat 05-encuentre el apellido y el nombre de todos los empleados y el número de departamento correspondiente dept_no
Descripción del título
Encuentre el apellido y el nombre de todos los empleados y el número de departamento correspondiente dept_no, incluida la visualización de empleados que no están asignados a departamentos específicos
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
Ingrese la descripción:
Ninguno
Descripción de salida:
apellido | primer nombre | departamento_no |
---|---|---|
Facello | Georgi | d001 |
Omitido | Omitido | Omitido |
Cerradura | María | NULL (aquí es nulo en sqlite, MySQL es NULL) |
Mi respuesta
select e.last_name,e.first_name,d.dept_no
from employees e
left join dept_emp d
on e.emp_no = d.emp_no
La diferencia entre esta pregunta y la anterior es que si un empleado no tiene dept_no, entonces debe ser descubierto y dept_no se establece en NULL. De acuerdo con los requisitos anteriores, usar la conexión izquierda es la mejor opción.
Nota:
- Las tablas en ambos lados de INNER JOIN tienen los datos correspondientes al mismo tiempo, es decir, los datos que faltan en ambos lados no se mostrarán.
- LEFT JOIN leerá todos los datos en la tabla de datos de la izquierda, incluso si no hay datos correspondientes en la tabla de la derecha.
- RIGHT JOIN leerá todos los datos en la tabla de datos correcta, incluso si no hay datos correspondientes en la tabla de la izquierda.