
推荐( 免费):SQL教程
大家在初学数据库时,对DQL中的连接查询是否有些疑惑,不知道什么时候什么场景下该用那种连接查询?
不要着急,接下来由我来给大家介绍一下,本人对内连接、左外连接、右外连接的特点和应用场景的理解,供大家参考。
以下的代码演示均基于name表和country表展开。
name表
| id | name |
|---|---|
| 1 | 西施 |
| 2 | 杨玉环 |
| 3 | 貂蝉 |
| 4 | 王昭君 |
| 5 | 赵飞燕 |
country表
| id | country | A_ID |
|---|---|---|
| 1 | 春秋时期越国人 | 1 |
| 2 | 唐代蒲州永乐人 | 2 |
| 3 | 东汉末年山西忻州人 | 3 |
| 4 | 西汉时期南郡秭归人 | 4 |
| 5 | 战国时期 | 6 |
注 :
1)b表A_ID与a表a_id 存在关系
2)连接查询是要使用关联条件去除不匹配数据否则会出现笛卡尔积
1) 内连接
语法: 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)左外连接
语法: 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) 右外连接
语法: 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) 完全链接
语法: 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 |
注意:该语法在MySql中不适用
好的,本人介绍完毕,不知道有没有帮助到各位呢?
如果有什么不对,还请各位指出哦~
更多相关知识敬请关注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!
Comment utiliser la fonction de comptage
Introduction aux attributs des balises d'article
La différence entre le langage pascal et le langage c
Tutoriel de configuration du mot de passe de démarrage de Windows 10
Linux redémarre la commande de la carte réseau
Est-il légal d'acheter et de vendre du Bitcoin sur Huobi.com ?
méthode js pour générer des nombres aléatoires
Comment redimensionner des images dans PS