SQL in 与inner join查询结果的区别
2016-05-03 16:06
375 查看
in和inner join在大多数情况下都是返回两表的交集,但是两者还是有区别的,如下例子
mysql> select * from a;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
+------+------+
mysql> select * from b;
+------+------+
| id | name |
+------+------+
| 1 | d |
| 1 | g |
| 2 | e |
| 4 | f |
+------+------+
mysql> select a.id, a.name from a where a.id in (select b.id from b);
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
+------+------+
mysql> select a.id, a.name from a inner join b on (a.id = b.id);
+------+------+
| id | name |
+------+------+
| 1 | a |
| 1 | a |
| 2 | b |
+------+------+
mysql> select * from a inner join b on (a.id = b.id);
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | a | 1 | d |
| 1 | a | 1 | g |
| 2 | b | 2 | e |
+------+------+------+------+
从查询结果中可以看出,in的结果是不会有重复的,对非主键进行join时,join的结果是有重复的。如果说还有另一个区别的话就是join会产生一个两表合并的临时表,in不会产生两表合并的临时表。
相关文章推荐
- SQL SERVER 2012/2014 序列号密钥
- oracle创建计划任务
- SQL函数说明大全
- mysql储存过程多游标
- Mysql 入门篇
- ORACLE临时表总结
- ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串
- Oracle中dual表的用途介绍-转
- mysql中利用ceil函数对成绩进行分段统计
- Sql日期时间格式转换
- zabbix监控redis多实例(low level discovery)
- SQL Server数据类型--日期和时间
- sql Server 2008一行转多行的问题
- sqlserver 获得行号作为唯一id
- 【Oracle】ORA 01810 格式代码出现两次-转
- mac下安装mongodb
- 关于MySQL的几点安全配置
- 利用FMDB增加表字段
- 关于mysql(或MariaDB)中的用户账号格式
- 高手详解SQL性能优化十条经验