Mysql 左右连接查询理解
来源:互联网 发布:大疆 知乎 编辑:程序博客网 时间:2024/05/19 19:42
小小的连接查询,其实里面有很多学问,今天我就来简单剖析一下。
左连接,右连接,内连接的本质:将两个表的数据依据一定条件横向连接起来。
给出建表语句:
--------------------------------------------------
create table test1(
id int,
name varchar(10)
)
create table test2(
id int,
name varchar(10)
)
INSERT INTO `test1` VALUES (1,'2');
INSERT INTO `test1` VALUES (1,'2');
INSERT INTO `test1` VALUES (2,'1');
INSERT INTO `test1` VALUES (2,'2');
INSERT INTO `test1` VALUES (3,'1');
INSERT INTO `test2` VALUES (1,'2');
INSERT INTO `test2` VALUES (2,'1');
INSERT INTO `test2` VALUES (2,'2');
--------------------------------------------------
左连接sql:select * from test1 a left join test2 b on a.id=b.id
如下为左连接示例图:
1,理解左连接查询方式(以两表id相等作为on的条件):
先将左表数据查出,然后根据on后面的条件,将右表中凡是id与左表id相等的记录都查出来,与匹配的左表记录依次排成一行或多行,若无匹配的记录,则显示null。
举例:select * from test1 a left join test2 b on a.id=b.id
说明:先将左表数据查出,然后根据on后面的条件,将右表中凡是id与左表id相等的记录都查出来,与匹配的左表记录依次排成一行或多行,若无匹配的记录,则显示null。
在本例中,我画了6根线,每条线都表示了一条查询结果记录。
当ID为1时:左表有2条ID为1的记录,右表有1条。先查左表的第一条,然后再查询右表中所有ID与左表第一条记录的ID相等(即ID为1)的记录,因右表只有1条记录的ID为1,因此得出查询结果的第一条记录:1,2,1,1。
第二条记录查询方式也同上。
当ID为2时:左右表各有2条ID为2的记录。也是同上,当查左表第一条ID为2的记录时,因右表中有2条ID为2的记录,因此查询结果会有两条,即左表的1条记录会和右表的2条记录一一配对。
第二条记录查询方式也同上。
对于id为3的记录,因右表没有ID为3的记录,因此右边显示为null。
--------------------------------------------------
2,理解了左连接之后,右连接也就不难了。
右连接语句:select * from test1 a right join test2 b on a.id=b.id
右连接查询结果:
--------------------------------------------------
3,而内连接,则是把ID只存在于某一个表中的记录给过滤了。
以下3条sql语句等价:
select * from test1 a join test2 b on a.id=b.id
select * from test1 a inner join test2 b on a.id=b.id
select * from test1 a , test2 b where a.id=b.id
内连接查询结果:
左连接,右连接,内连接的本质:将两个表的数据依据一定条件横向连接起来。
给出建表语句:
--------------------------------------------------
create table test1(
id int,
name varchar(10)
)
create table test2(
id int,
name varchar(10)
)
INSERT INTO `test1` VALUES (1,'2');
INSERT INTO `test1` VALUES (1,'2');
INSERT INTO `test1` VALUES (2,'1');
INSERT INTO `test1` VALUES (2,'2');
INSERT INTO `test1` VALUES (3,'1');
INSERT INTO `test2` VALUES (1,'2');
INSERT INTO `test2` VALUES (2,'1');
INSERT INTO `test2` VALUES (2,'2');
--------------------------------------------------
左连接sql:select * from test1 a left join test2 b on a.id=b.id
如下为左连接示例图:
1,理解左连接查询方式(以两表id相等作为on的条件):
先将左表数据查出,然后根据on后面的条件,将右表中凡是id与左表id相等的记录都查出来,与匹配的左表记录依次排成一行或多行,若无匹配的记录,则显示null。
举例:select * from test1 a left join test2 b on a.id=b.id
说明:先将左表数据查出,然后根据on后面的条件,将右表中凡是id与左表id相等的记录都查出来,与匹配的左表记录依次排成一行或多行,若无匹配的记录,则显示null。
在本例中,我画了6根线,每条线都表示了一条查询结果记录。
当ID为1时:左表有2条ID为1的记录,右表有1条。先查左表的第一条,然后再查询右表中所有ID与左表第一条记录的ID相等(即ID为1)的记录,因右表只有1条记录的ID为1,因此得出查询结果的第一条记录:1,2,1,1。
第二条记录查询方式也同上。
当ID为2时:左右表各有2条ID为2的记录。也是同上,当查左表第一条ID为2的记录时,因右表中有2条ID为2的记录,因此查询结果会有两条,即左表的1条记录会和右表的2条记录一一配对。
第二条记录查询方式也同上。
对于id为3的记录,因右表没有ID为3的记录,因此右边显示为null。
--------------------------------------------------
2,理解了左连接之后,右连接也就不难了。
右连接语句:select * from test1 a right join test2 b on a.id=b.id
右连接查询结果:
--------------------------------------------------
3,而内连接,则是把ID只存在于某一个表中的记录给过滤了。
以下3条sql语句等价:
select * from test1 a join test2 b on a.id=b.id
select * from test1 a inner join test2 b on a.id=b.id
select * from test1 a , test2 b where a.id=b.id
内连接查询结果:
0 0
- Mysql 左右连接查询理解
- mysql左右连接查询(有示例图)
- mysql左右内连接一句话理解
- MySQl 子查询,左右连接,多表连接学习笔记
- hibernate 左右连接查询
- SQL左右连接查询
- 数据库查询左右连接
- Mysql 左右连接举例说明
- mysql的左右内连接
- #Mysql 中的左右连接问题
- 左右内外全交叉连接查询总结
- 关于SQL的左右连接查询
- oracle 多表查询 左右连接
- SQL子查询and左右连接
- SQL多表查询之左右连接
- 多表【左右内混合】连接查询
- SQL连接查询2 外连接(左右联接查询)
- SQL连接查询2 外连接(左右联接查询)
- ubuntu14.04 下 mysql 存储目录迁移
- 拷贝构造函数和赋值函数的区别
- JavaScript中delete操作符不能删除的对象
- hdu 5015 233 Matrix(矩阵快速幂)
- 20. 枚举数和迭代器
- Mysql 左右连接查询理解
- linux--管道特性
- 将H264与AAC打包Ipad可播放的TS流的总结
- uva 507
- 进程与线程的联系与区别
- 【POJ】Buy Tickets(思路 + 线段树)
- 余弦相似度
- 计算机面试、笔试常考题
- linux学习之C语言(3)------ gdb