(转) 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 只存 ...
随机推荐
- Python String 方法详解
官网文档地址:https://docs.python.org/3/library/stdtypes.html#string-methods 官网 公号:软测小生ruancexiaosheng 文档里的 ...
- UVA725 Division 除法【暴力】
题目链接>>>>>> 题目大意:给你一个数n(2 <= n <= 79),将0-9这十个数字分成两组组成两个5位数a, b(可以包含前导0,如02345 ...
- chrome浏览器调试工具你会使用吗?
浏览器调试工具使用总结 一. console使用 console.table(),可以把对象输出成表格的形式,直观的观察数据. console.dir(),可以直观观察dom元素的对象形式 二. $的 ...
- html 转成 pdf 进行预览、下载、打印
html 页面转成 pdf,直接看代码: 参考地址: https://github.com/linwalker/render-html-to-pdf 给出代码 方便粘贴: var downPdf = ...
- MyBatis学习笔记2--配置环境详解
1.MyBatis-config.xml详解 一个完整的配置文件如下所示 <configuration> <!-- <properties resource="jdb ...
- Android应用开发-数据存储和界面展现(二)
SQLite数据库 // 自定义类MyOpenHelper继承自SQLiteOpenHelper MyOpenHelper oh = new MyOpenHelper(getContext(), &q ...
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- Structured Streaming教程(1) —— 基本概念与使用
近年来,大数据的计算引擎越来越受到关注,spark作为最受欢迎的大数据计算框架,也在不断的学习和完善中.在Spark2.x中,新开放了一个基于DataFrame的无下限的流式处理组件--Structu ...
- Java虚拟机的最大内存是多少
天分析了当前比较流行的几个不同公司不同版本JVM的最大内存,得出来的结果如下: 公司 JVM版本 最大内存(兆)client 最大内存(兆)server SUN 1.5.x 1492 1520 SUN ...
- 用十条命令在一分钟内检查 Linux 服务器性能
原文地址: http://www.oschina.net/news/69132/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出L ...