(转) mysql中left join,right join,inner join的区别
转自:https://blog.csdn.net/qq_35975416/article/details/78842958
sql查询中有一个非常重要的环节就是表的关联查询,一般使用left join,right join,inner join,他们之间的区别是什么呢?
下面我们通过具体的sql语句来演示,演示用的表名为test1/test2:
mysql> select * from test1;
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 0 | 小董 | 20 | 男 |
| 1 | 小王 | 15 | 男 |
| 2 | 小李 | 18 | 男 |
| 3 | 小红 | 16 | 女 |
+----+--------+------+------+
4 rows in set (0.00 sec)
mysql> select * from test2;
+----+--------+-----------------------+-------+
| id | name | interest | score |
+----+--------+-----------------------+-------+
| 1 | 小王 | 打篮球 | 81 |
| 2 | 小李 | 踢足球 | 84 |
| 3 | 小红 | 看动漫 | 99 |
| 4 | 小军 | 打游戏,打篮球 | 100 |
+----+--------+-----------------------+-------+
4 rows in set (0.00 sec)
mysql> select * from test1 t1 left join test2 t2 on t1.id=t2.id and t1.name=t2.name;
+----+--------+------+------+------+--------+-----------+-------+
| id | name | age | sex | id | name | interest | score |
+----+--------+------+------+------+--------+-----------+-------+
| 1 | 小王 | 15 | 男 | 1 | 小王 | 打篮球 | 81 |
| 2 | 小李 | 18 | 男 | 2 | 小李 | 踢足球 | 84 |
| 3 | 小红 | 16 | 女 | 3 | 小红 | 看动漫 | 99 |
| 0 | 小董 | 20 | 男 | NULL | NULL | NULL | NULL |
+----+--------+------+------+------+--------+-----------+-------+
4 rows in set (0.12 sec)
mysql> select * from test2 t1 left join test1 t2 on t1.id=t2.id and t1.name=t2.name;
+----+--------+-----------------------+-------+------+--------+------+------+
| id | name | interest | score | id | name | age | sex |
+----+--------+-----------------------+-------+------+--------+------+------+
| 1 | 小王 | 打篮球 | 81 | 1 | 小王 | 15 | 男 |
| 2 | 小李 | 踢足球 | 84 | 2 | 小李 | 18 | 男 |
| 3 | 小红 | 看动漫 | 99 | 3 | 小红 | 16 | 女 |
| 4 | 小军 | 打游戏,打篮球 | 100 | NULL | NULL | NULL | NULL |
+----+--------+-----------------------+-------+------+--------+------+------+
4 rows in set (0.00 sec)
mysql> select t1.id,t1.name,t1.interest,t1.score,t2.age,t2.sex from test2 t1 left join test1 t2 on t1.id=t2.id and t1.name=t2.name;
+----+--------+-----------------------+-------+------+------+
| id | name | interest | score | age | sex |
+----+--------+-----------------------+-------+------+------+
| 1 | 小王 | 打篮球 | 81 | 15 | 男 |
| 2 | 小李 | 踢足球 | 84 | 18 | 男 |
| 3 | 小红 | 看动漫 | 99 | 16 | 女 |
| 4 | 小军 | 打游戏,打篮球 | 100 | NULL | NULL |
+----+--------+-----------------------+-------+------+------+
4 rows in set (0.02 sec)
mysql> select t1.id,t1.name,t1.interest,t1.score,t2.age,t2.sex from test2 t1 inner join test1 t2 on t1.id=t2.id and t1.name=t2.name;
+----+--------+-----------+-------+------+------+
| id | name | interest | score | age | sex |
+----+--------+-----------+-------+------+------+
| 1 | 小王 | 打篮球 | 81 | 15 | 男 |
| 2 | 小李 | 踢足球 | 84 | 18 | 男 |
| 3 | 小红 | 看动漫 | 99 | 16 | 女 |
+----+--------+-----------+-------+------+------+
3 rows in set (0.00 sec)
mysql> select * from test1 t1 left join test2 t2 on t1.id=t2.id and t1.name=t2.name;
+----+--------+------+------+------+--------+-----------+-------+
| id | name | age | sex | id | name | interest | score |
+----+--------+------+------+------+--------+-----------+-------+
| 1 | 小王 | 15 | 男 | 1 | 小王 | 打篮球 | 81 |
| 2 | 小李 | 18 | 男 | 2 | 小李 | 踢足球 | 84 |
| 3 | 小红 | 16 | 女 | 3 | 小红 | 看动漫 | 99 |
| 0 | 小董 | 20 | 男 | NULL | NULL | NULL | NULL |
+----+--------+------+------+------+--------+-----------+-------+
4 rows in set (0.00 sec)
mysql> select * from test1 t1 right join test2 t2 on t1.id=t2.id and t1.name=t2.name;
+------+--------+------+------+----+--------+-----------------------+-------+
| id | name | age | sex | id | name | interest | score |
+------+--------+------+------+----+--------+-----------------------+-------+
| 1 | 小王 | 15 | 男 | 1 | 小王 | 打篮球 | 81 |
| 2 | 小李 | 18 | 男 | 2 | 小李 | 踢足球 | 84 |
| 3 | 小红 | 16 | 女 | 3 | 小红 | 看动漫 | 99 |
| NULL | NULL | NULL | NULL | 4 | 小军 | 打游戏,打篮球 | 100 |
+------+--------+------+------+----+--------+-----------------------+-------+
4 rows in set (0.00 sec)
mysql> select * from test1 t1 inner join test2 t2 on t1.id=t2.id and t1.name=t2.name;
+----+--------+------+------+----+--------+-----------+-------+
| id | name | age | sex | id | name | interest | score |
+----+--------+------+------+----+--------+-----------+-------+
| 1 | 小王 | 15 | 男 | 1 | 小王 | 打篮球 | 81 |
| 2 | 小李 | 18 | 男 | 2 | 小李 | 踢足球 | 84 |
| 3 | 小红 | 16 | 女 | 3 | 小红 | 看动漫 | 99 |
+----+--------+------+------+----+--------+-----------+-------+
3 rows in set (0.00 sec)
从上面的截图可以很容易看出来三者之间的区别,left join 查出来的数据条数是以查询的表为主,right join查出来的数据条数是以关联表为主,inner join查出来的数据是在查询条件在两者的交集
(转) mysql中left join,right join,inner join的区别的更多相关文章
- MySQL 中 key, primary key ,unique key,index的区别
一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_n ...
- 【转】Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_ ...
- mysql中时间类型datetime,timestamp与int的区别
在mysql中存储时间,我们可以用datetime 格式,timestamp格式,也可以用int格式.那么我们设计的时候该如何考虑呢? 首先,我觉得应该明白这几个格式究竟是如何的,然后看看他们的区别, ...
- Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_ ...
- MYSQL中的普通索引,主健,唯一,全文索引区别
MYSQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记 ...
- MySql中的count、NULL和空串的区别
**1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...
- 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别
最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...
- MySQL中where和on,where和having 的区别
where和on的区别 用到连接查询时on会常用到,我们以左连接为例,来了解on的作用. on是在生成临时表使用的条件,不管on子句的条件是否为真,其都会返回左表的数据,如果条件为真则右表对应的数据也 ...
- mysql中char,varchar与text类型的区别和选用
关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... 于是去查阅了一 ...
- mysql中几个日期时间类型之间的区别和使用
MySQL中有如下几个时间类型:date.time.datetime.timestamp.year MySQL数据类型 含义 date 只存 ...
随机推荐
- hdu 6185 递推+【矩阵快速幂】
<题目链接> <转载于 >>> > 题目大意: 让你用1*2规格的地毯去铺4*n规格的地面,告诉你n,问有多少种不同的方案使得地面恰好被铺满且地毯不重叠.答案 ...
- IntelliJ IDEA(九) :插件(转)
最近项目比较忙,很久没有更新IDEA系列了,今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库,不仅能给我们带来一些开发的便捷,还能体现我们的与众不同. 0|11.插件的安装 打开settin ...
- Spring框架学习04——复杂类型的属性注入
代码示例如下: 创建BeanClass实体类 public class BeanClass { private String[] arrs;//数组类型 private List<String& ...
- (原创)PouchDB 图片本地存储(web离线应用)
/* * 参数 * db: 已建或未建数据库 * pouchId: 数据库唯一的主键_id * src: 图片img的DOM对象 * bg: 判断是否是背景图 * */ function addTod ...
- nodejs那些事儿
http://www.nodeclass.com/ https://cnodejs.org/ 当前版本,v6.11.2 安装node时,牵扯features的选择,在不了解的情况下,我选择了第1个.网 ...
- 码云 使用 汉化 GitHub
enhancement 增强feature 功能duplicate 重复的invalid 无效的wontfix 无法修改 不处理 ===== Wiki 主要是您项目的文档(说明, 状态)等等. 该项目 ...
- MySQL数据命令
一.数据库操作 创建数据库 create database db1 charset utf8; 查看数据库 show database; show create database db1; selec ...
- 关于redis与memcached区别(转载自stackoverflow)
转载自:http://stackoverflow.com/questions/10558465/memcached-vs-redis Updated 10/9/2014 Today marks the ...
- 早期(编译器)优化--Java语法糖的味道
1.泛型与类型擦除 泛型的本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口和泛型方法.在泛型没有出现之前,只能通过 ...
- failed to load class "org.sl4j.impl.StaticLoggerBinder"
(1)要确保有properties文件在你的主项目的src下面 (2)https://www.slf4j.org/codes.html(这个是配置相关文件) (3)如果经过1.2步后问题依然存在,那么 ...