Base de datos MySQL: consulta de varias tablas (2): conexión interna, conexión externa

Tabla de contenido 

unir internamente

Sintaxis de consulta

Demostración de unión interna

unión externa

Sintaxis de consulta

Demostración de conexión externa


unir internamente

La combinación interna consulta la intersección de las dos tablas y devuelve los datos de la intersección de la tabla A y la tabla B. Las uniones internas se dividen en dos formas: uniones internas implícitas y uniones internas explícitas.

Sintaxis de consulta

unión interna implícita

SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

unión interna explícita

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;

Demostración de unión interna

preparar datos

create table dept(
    id   int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '部门名称'
)comment '部门表';

create table emp(
    id  int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '姓名',
    age  int comment '年龄',
    job varchar(20) comment '职位',
    salary int comment '薪资',
    entrydate date comment '入职时间',
    managerid int comment '直属领导ID',
    dept_id int comment '部门ID'
)comment '员工表';

-- 添加外键
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

INSERT INTO dept (id, name)
    VALUES (1, '研发部'), (2, '市场部'),(3, '财务部'), (4, '销售部'), (5, '总经办'), (6, '人事部');
INSERT INTO emp (id, name, age, job,salary, entrydate, managerid, dept_id) VALUES
            (1, '金庸', 66, '总裁',20000, '2000-01-01', null,5),
            (2, '张无忌', 20, '项目经理',12500, '2005-12-05', 1,1),
            (3, '杨逍', 33, '开发', 8400,'2000-11-03', 2,1),
            (4, '韦一笑', 48, '开发',11000, '2002-02-05', 2,1),
            (5, '常遇春', 43, '开发',10500, '2004-09-07', 3,1),
            (6, '小昭', 19, '程序员鼓励师',6600, '2004-10-12', 2,1),
            (7, '灭绝', 60, '财务总监',8500, '2002-09-12', 1,3),
            (8, '周芷若', 19, '会计',48000, '2006-06-02', 7,3),
            (9, '丁敏君', 23, '出纳',5250, '2009-05-13', 7,3),
            (10, '赵敏', 20, '市场部总监',12500, '2004-10-12', 1,2),
            (11, '鹿杖客', 56, '职员',3750, '2006-10-03', 10,2),
            (12, '鹤笔翁', 19, '职员',3750, '2007-05-09', 10,2),
            (13, '方东白', 19, '职员',5500, '2009-02-12', 10,2),
            (14, '张三丰', 88, '销售总监',14000, '2004-10-12', 1,4),
            (15, '俞莲舟', 38, '销售',4600, '2004-10-12', 14,4),
            (16, '宋远桥', 40, '销售',4600, '2004-10-12', 14,4),
            (17, '陈友谅', 42, null,2000, '2011-10-12', 1,null);

 1. Consultar el nombre de cada empleado y el nombre del departamento asociado (implementación de conexión interna implícita)

  • Estructura de la tabla: emp, departamento
  • Condición de conexión: emp.dept_id = dept.id
select e.name '姓名', d.name '部门' from emp e,dept d where e.dept_id = d.id;

resultado de la operación:

(Un empleado no tiene departamento por el momento)

2. Consultar el nombre de cada empleado y el nombre del departamento asociado (método de conexión interna explícito)

  • Estructura de la tabla: emp, departamento
  • Condición de conexión: emp.dept_id = dept.id
select e.name '姓名',d.name '部门' from emp e inner join dept d where e.dept_id = d.id;
-- inner可以省略

resultado de la operación:

unión externa

Sintaxis de consulta

izquierda combinación externa

SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;

Equivale a consultar todos los datos de la Tabla 1 (tabla de la izquierda), incluidos los datos en la intersección de la Tabla 1 y la Tabla 2.

unión exterior derecha

SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;

Equivalente a consultar todos los datos de la Tabla 2 (tabla de la derecha), incluidos los datos en la intersección de la Tabla 1 y la Tabla 2

Demostración de conexión externa

1. Consultar todos los datos en la tabla emp y la información del departamento correspondiente (unión externa izquierda)

  • Estructura de la tabla: emp, departamento
  • Condición de conexión: emp.dept_id = dept.id
select e.*,d.name from emp e left outer join dept d on e.dept_id = d.id;
-- outer可省略

resultado de búsqueda: 

Sintácticamente, realice una consulta de unión externa izquierda en la Tabla 1 (emp) y la Tabla 2 (departamento), es decir, los datos de la Tabla 1 + los datos en la intersección de la Tabla 1 y la Tabla 2. Por tanto, se puede consultar el empleado N° 17, que pertenece al contenido de la Tabla 1, pero no pertenece a la intersección de las dos tablas.

2. Consultar todos los datos en la tabla del departamento y la información correspondiente del empleado (conexión exterior derecha)

select d.*,e.* from emp e right outer join dept d on e.dept_id = d.id;

resultado de búsqueda:

De la misma manera, la combinación externa derecha aquí consulta los datos de la Tabla 2 + todos los datos en la intersección de la Tabla 1 y la Tabla 2, por lo que se puede consultar el Departamento de Recursos Humanos vacío.

Al mismo tiempo, puede utilizar la unión exterior izquierda para implementar la unión exterior derecha.

select d.*,e.* from dept d left outer join emp e on e.dept_id = d.id;

Solo necesita intercambiar las posiciones de las dos tablas. La unión exterior izquierda de la tabla 1 (departamento) y la tabla 2 (emp) aquí es equivalente a la unión exterior derecha de la tabla 1 (emp) y la tabla 2 (depto) en el lugar anterior.

Supongo que te gusta

Origin blog.csdn.net/li13437542099/article/details/132460975
Recomendado
Clasificación