Base de données MySQL - requête multi-tables (2) - connexion interne, connexion externe

Table des matières 

jointure interne

Syntaxe de requête

Démo de jointure interne

jointure externe

Syntaxe de requête

Démonstration de connexion externe


jointure interne

La jointure interne interroge l'intersection des deux tables et renvoie les données de l'intersection de la table A et de la table B. Les jointures internes sont divisées en deux formes : les jointures internes implicites et les jointures internes explicites.

Syntaxe de requête

jointure interne implicite

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

jointure interne explicite

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

Démo de jointure interne

Préparer les données

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. Interroger le nom de chaque employé et le nom du service associé (implémentation de connexion interne implicite)

  • Structure du tableau : emp, département
  • Condition de connexion : emp.dept_id = dept.id
select e.name '姓名', d.name '部门' from emp e,dept d where e.dept_id = d.id;

résultat de l'opération :

(Un employé n'a pas de département pour le moment)

2. Interrogez le nom de chaque employé et le nom du service associé (méthode de connexion interne explicite)

  • Structure du tableau : emp, département
  • Condition de connexion : emp.dept_id = dept.id
select e.name '姓名',d.name '部门' from emp e inner join dept d where e.dept_id = d.id;
-- inner可以省略

résultat de l'opération :

jointure externe

Syntaxe de requête

jointure externe gauche

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

Équivaut à interroger toutes les données du tableau 1 (tableau de gauche), y compris les données à l'intersection du tableau 1 et du tableau 2

jointure externe droite

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

Équivaut à interroger toutes les données du tableau 2 (tableau de droite), y compris les données à l'intersection du tableau 1 et du tableau 2

Démonstration de connexion externe

1. Interrogez toutes les données de la table emp et les informations du département correspondant (jointure externe gauche)

  • Structure du tableau : emp, département
  • Condition de connexion : emp.dept_id = dept.id
select e.*,d.name from emp e left outer join dept d on e.dept_id = d.id;
-- outer可省略

résultat de la recherche: 

Syntaxiquement, effectuez une requête de jointure externe gauche sur le tableau 1 (emp) et le tableau 2 (dept), c'est-à-dire les données du tableau 1 + les données à l'intersection du tableau 1 et du tableau 2. Par conséquent, l'employé n°17 ​​peut être interrogé, qui appartient au contenu du tableau 1, mais n'appartient pas à l'intersection des deux tableaux.

2. Interrogez toutes les données de la table dept et les informations correspondantes sur l'employé (connexion externe droite)

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

résultat de la recherche:

De la même manière, la jointure externe droite interroge ici les données du tableau 2 + toutes les données à l'intersection du tableau 1 et du tableau 2, afin que le service des ressources humaines vide puisse être interrogé.

Dans le même temps, vous pouvez utiliser la jointure externe gauche pour implémenter la jointure externe droite.

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

Il vous suffit d'échanger les positions des deux tables. La jointure externe gauche de la table 1 (dept) et de la table 2 (emp) est ici équivalente à la jointure externe droite de la table 1 (emp) et de la table 2 (dept) dans le lieu précédent.

Je suppose que tu aimes

Origine blog.csdn.net/li13437542099/article/details/132460975
conseillé
Classement