开发经常犯的错误之→【join表连接关联查询 】

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

最近在审核SQL的时候,发现一些开发经常犯这个错误,下面我举个简单的例子,说明一下:

查找出A表和B表id相同的记录(并且把B表没有的id记录也查询出来),且name名字等于'b'的记录。

表数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql> select * from t1;          
+----+------+
| id | name |
+----+------+
|   1  | a    |
|   2  | b    |
|   3  | c    |
|   4  | d    |
|   5  | e    |
|   6  | b    |
+----+------+
6  rows  in  set  ( 0.00  sec)
mysql> select * from t2;          
+----+------+
| id | name |
+----+------+
|   1  | a    |
|   2  | b    |
|   3  | cc   |
|   4  | e    |
|   5  | b    |
+----+------+
5  rows  in  set  ( 0.00  sec)


错误写法:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> select * from t1 left join t2 on t1.id=t2.id and t1.name= 'b' ;
+----+------+------+------+
| id | name | id   | name |
+----+------+------+------+
|   2  | b    |     2  | b    |
|   1  | a    | NULL | NULL |
|   3  | c    | NULL | NULL |
|   4  | d    | NULL | NULL |
|   5  | e    | NULL | NULL |
|   6  | b    | NULL | NULL |
+----+------+------+------+
6  rows  in  set  ( 0.00  sec)


正确写法:

1
2
3
4
5
6
7
8
mysql> select * from t1 left join t2 on t1.id=t2.id where t1.name= 'b' ;
+----+------+------+------+
| id | name | id   | name |
+----+------+------+------+
|   2  | b    |     2  | b    |
|   6  | b    | NULL | NULL |
+----+------+------+------+
2  rows  in  set  ( 0.00  sec)


呵呵,可以当一道面试题了。











本文转自hcymysql51CTO博客,原文链接:http://blog.51cto.com/hcymysql/1363428 ,如需转载请自行联系原作者









相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
SQL 数据库
SQL中字段跟子查询结果判等,子查询结果为null的处理办法
前言:今天写功能的时候遇到一个问题,SQL中字段跟子查询结果判等,子查询结果为null,查询不到数据
|
9月前
|
SQL 关系型数据库 数据库
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
167 1
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(五):从执行计划看IN、EXISTS 和 INNER JOIN效率,我们要分场景不要死记网上结论
从执行计划角度分析IN、EXISTS 和 INNER JOIN效率而不是死记网上结论、表的5种关联:INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 解析【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。
【SQL开发实战技巧】系列(五):从执行计划看IN、EXISTS 和 INNER JOIN效率,我们要分场景不要死记网上结论
【SQL开发实战技巧】系列(六):从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,记住内外关联条件不要乱放
从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,还是那就话,别死记网上结论、在使用内外关联时,特别是简写方式时记住关联条件不要乱放!【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。
【SQL开发实战技巧】系列(六):从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,记住内外关联条件不要乱放
|
SQL 数据处理 数据库
如何理解SQL中的自连接?
说起自连接,想必小伙伴们都听说过。在进行数据处理时经常会使用到自连接,特别是像一些连续性的问题中使用的比较多。
如何理解SQL中的自连接?
|
存储 SQL 小程序
小程序中的多表联合查询
小程序中的多表联合查询
小程序中的多表联合查询
|
SQL Java 数据库
一文速学-玩转SQL之执行顺序,单表自连接操作和用法
一文速学-玩转SQL之执行顺序,单表自连接操作和用法
149 0
一文速学-玩转SQL之执行顺序,单表自连接操作和用法
|
SQL 关系型数据库 MySQL
【sql语句基础】——查(select)(单表查询顺序补充)
【sql语句基础】——查(select)(单表查询顺序补充)
|
关系型数据库 MySQL
Mysql查询语句之连表查询和增删改查语句补充
Mysql查询语句之连表查询和增删改查语句补充
167 0
Mysql查询语句之连表查询和增删改查语句补充
|
SQL 关系型数据库 MySQL
数据库面试题【十八、优化关联查询&优化子查询&优化LIMIT分页&优化UNION查询&优化WHERE子句】
数据库面试题【十八、优化关联查询&优化子查询&优化LIMIT分页&优化UNION查询&优化WHERE子句】
138 0