Recommandé (gratuit) : Tutoriel SQL
Lorsque vous débutez dans la base de données, avez-vous des doutes sur la requête de connexion dans DQL. Savez-vous quand et quel type de requête de connexion doit être utilisée dans quel scénario ?
Ne vous inquiétez pas, laissez-moi vous présenter ma compréhension des caractéristiques et des scénarios d'application des jointures internes, des jointures externes gauches et des jointures externes droites pour votre référence.
Les démonstrations de code suivantes sont basées sur la table des noms et la table des pays.
table des noms
id | name |
---|---|
1 | 西施 |
2 | 杨玉环 |
3 | 貂蝉 |
4 | 王昭君 |
5 | 赵飞燕 |
table des pays
id | country | A_ID |
---|---|---|
1 | 春秋时期越国人 | 1 |
2 | 唐代蒲州永乐人 | 2 |
3 | 东汉末年山西忻州人 | 3 |
4 | 西汉时期南郡秭归人 | 4 |
5 | 战国时期 | 6 |
Remarque :
1) b table A_ID Il existe une relation avec la table a_id
2) La requête de connexion consiste à utiliser des conditions d'association pour supprimer les données sans correspondance, sinon un produit cartésien se produira
1) Jointure interne
语法: select 要查询的字段 from 表名1 inner join 表名2 on 表1.字段 = 表2.字段; inner join 可简写为 逗号, 内连接特点: 只会保留完全符合on后条件的数据 应用场景: 如果两张表有外键关系可以使用内链接,因为通过内链接每一条只能返回单条记录
select * from name n inner join country c on n.id = c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋时期越国人 | 1 |
2 | 杨玉环 | 2 | 唐代蒲州永乐人 | 2 |
3 | 貂蝉 | 3 | 东汉末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西汉时期南郡秭归人 | 4 |
2) Jointure externe gauche
语法: select 要查询的字段 from 表1 left outer join 表2 on 表1.字段 = 表2.字段; outer 可省略 左外连接特点: 以左表为主,会保留左表中不符合on后条件的数据 应用场景: 只有部分记录可以从表2中查到,但表1想要显示所有记录,就可以和表2通过左外连接查询。
select * from name n left join country c on n.id=c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋时期越国人 | 1 |
2 | 杨玉环 | 2 | 唐代蒲州永乐人 | 2 |
3 | 貂蝉 | 3 | 东汉末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西汉时期南郡秭归人 | 4 |
5 | 赵飞燕 | null | null | null |
3) Jointure externe droite
语法: select * from 表1 right outer join 表2 on 表1.字段 = 表2.字段; outer 可省略 右外连接特点: 以右表为主,会保留右表中不符合on后条件的数据 应用场景: 和左外连接相反 只有部分记录可以从表1中查询到,但表2想要显示所有记录, 就可以和表1通过右外连接查询。
select * from name n right join country c on n.id=c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋时期越国人 | 1 |
2 | 杨玉环 | 2 | 唐代蒲州永乐人 | 2 |
3 | 貂蝉 | 3 | 东汉末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西汉时期南郡秭归人 | 4 |
null | null | 5 | 战国时期 | 6 |
4) Lien complet
语法: select * from 表1 full join 表2 on 表1.字段 = 表2.字段;完全连接特点: 会保留表1和表2的全部数据
select * from name n full join country c on n.id=c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋时期越国人 | 1 |
2 | 杨玉环 | 2 | 唐代蒲州永乐人 | 2 |
3 | 貂蝉 | 3 | 东汉末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西汉时期南郡秭归人 | 4 |
5 | 赵飞燕 | null | null | null |
null | null | 5 | 战国时期 | 6 |
Remarque : Cette syntaxe n'est pas applicable dans MySql
D'accord, j'ai terminé l'introduction. Je ne sais pas si cela sera utile. Et vous les gars ?
S'il y a quelque chose qui ne va pas, veuillez le signaler ~
Pour plus de connaissances connexes, veuillez faire attention à la colonne sql~
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!