众所周知,左连接和右连接的含义是以哪一张表为准。

  左连接就是以左表为准,查出的结果中包含左表所有的记录,如果右表中没有与其对应的记录,那么那一行记录中B表部分的内容就全是NULL。

  

  

  现在有两个表,一个category表和goods表:

mysql> select * from category;
+----+---------+
| id | cate |
+----+---------+
| 1 | food |
| 2 | clothes |
| 3 | book |
| 4 | sport |
| 5 | music |
| 6 | video |
+----+---------+
6 rows in set (0.01 sec) mysql> select * from goods;
+----+---------+-------------------+
| id | cate_id | name |
+----+---------+-------------------+
| 0 | 5 | You Are Not Alone |
| 1 | 2 | T-shirt |
| 2 | 1 | water |
| 3 | 1 | rice |
| 4 | 3 | C++ primer |
| 5 | 4 | basketbal |
+----+---------+-------------------+
6 rows in set (0.00 sec)

  

  现在要查出每一种分类下的商品,那么可以很简单的使用左连接了:

mysql> select * from category
-> left join goods
-> on category.id = goods.cate_id
-> order by category.id;
+----+---------+------+---------+-------------------+
| id | cate | id | cate_id | name |
+----+---------+------+---------+-------------------+
| 1 | food | 2 | 1 | water |
| 1 | food | 3 | 1 | rice |
| 2 | clothes | 1 | 2 | T-shirt |
| 3 | book | 4 | 3 | C++ primer |
| 4 | sport | 5 | 4 | basketbal |
| 5 | music | 0 | 5 | You Are Not Alone |
| 6 | video | NULL | NULL | NULL |
+----+---------+------+---------+-------------------+
7 rows in set (0.01 sec)

  从上面的结果中很全就能看到video分类中没有商品。

  需求:只查询哪一种分类下面没有商品

  这个很好实现,可以用下面几个方法:

  1、使用not in

mysql> select * from category where id not in ( select cate_id from goods);
+----+-------+
| id | cate |
+----+-------+
| 6 | video |
+----+-------+
1 row in set (0.01 sec)

  2、仍旧使用左连接,只不过对于结果加一个where筛选

mysql> select * from category
-> left join goods
-> on category.id = goods.cate_id
-> where goods.id is NULL;
+----+-------+------+---------+------+
| id | cate | id | cate_id | name |
+----+-------+------+---------+------+
| 6 | video | NULL | NULL | NULL |
+----+-------+------+---------+------+
1 row in set (0.00 sec)

  

  至于为什么不适用not in,这是因为他不使用索引,如果数据量大的时候,效率并不高。

  同样,如果要显示和总表中匹配了记录,隐藏左表没有匹配到的记录,可以将后面的where goods.id is not NULL;

  同样,对于右连接来说也是一样的。

MySQL 使用左连接替换not in的更多相关文章

  1. 深入浅出:MySQL的左连接、右连接、等值连接

    深入浅出:MySQL的左连接.右连接.等值连接 三种连接的语法 为便于更多的技友快速读懂.理解,我们只讨论2张表对象进行连接操作的情况,大于2张表对象进行的连接操作原理也是一样的. 1.左连接(LEF ...

  2. 深入浅出:MySQL的左连接、右连接、内连接

    http://blog.csdn.net/wyzxg/article/details/7276979 三种连接的语法 为便于更多的技友快速读懂.理解,我们只讨论2张表对象进行连接操作的情况,大于2张表 ...

  3. MySQL的左连接、右连接和全连接的实现

    表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

  4. MySQL之左连接与右连接

    左连接: select 列1,列2,列N from tableA left join tableB on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一 ...

  5. Mysql之左连接右连接内连接——示例 (转)

    下面是两张表 表stu 表tech 1.右连接 当使用右连接语句查询时,返回结果如下: 1 SELECT stu.id,stu.name,stu.classe_name,tech.id,tech.na ...

  6. 【数据库】MySQL的左连接、右连接和全连接的实现

    表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

  7. mysql之左连接、右连接、内连接、全连接、等值连接、交叉连接等

    mysql中的各种jion的记录,以备用时查 1.等值连接和内连接, a.内连接与等值连接效果是相同的,执行效率也相同,只是书写方式不一样,内连接是由SQL 1999规则定的书写方式 比如: sele ...

  8. MySql之左连接,右连接

    左连接,右连接查询的表 中 on后面的条件不会影响主表的数据,只会影响右表的数据. 例: 没加条件的时候 左表加条件: 右表加条件: 通过上面3处对比可以看出来,用LEFT JOIN 的时候不管对左表 ...

  9. MYSQL 表左连接 ON AND 和ON WHERE 的区别

    首先是针对左右连接,这里与inner join区分 在使用left join时,on and 和on where会有区别 1. on的条件是在连接生成临时表时使用的条件,以左表为基准 ,不管on中的条 ...

随机推荐

  1. python3编写网络爬虫17-验证码识别

    一.验证码识别 1.图形验证码的识别 识别图形验证码需要 tesserocr 库 OCR技术识别(光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程.)例如 中国知网注册页面 ht ...

  2. Iframe框架+table布局 +div布局实例

    <td colspan="2" style="width: 80%"> <iframe src="http://www.baidu. ...

  3. python 基础操作--数据类型

    一.变量 1.定义:将运算的中间结果暂存到内存,以便后续程序调用. 2.命名规则 1.变量由字母.数字.下划线搭配组合而成: 2.不可以用数字开头,也不能全都是数字: 3.不能是python 关键字, ...

  4. 【C编程基础】多线程编程

    基础知识 1.基本概念 (1)线程,即轻量级进程(LWP:LightWeight Process),是程序执行流的最小单元. 线程是进程中的一个实体,是被系统独立调度和分派的基本单位. (2)线程同步 ...

  5. nginx 学习笔记

    Nginx是一个自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作 ...

  6. sqlSugar的使用---入门

    一,新建.net core  web项目 二.  项目引入包:sqlSugarCore 三.创建两个表:user,   department 四. 新建model(不一定需要与table相同,使用[S ...

  7. Nginx处理请求过程

    1. worker进程工作机制  现在我们了解了当我们在操作nginx的时候,nginx内部做的一些事情,那么worker进程又是如何处理请求的呢?   我们前面有提到,worker进程之间是平等的, ...

  8. UVA1533-Moving Pegs(BFS+状态压缩)

    Problem UVA1533-Moving Pegs Accept:106  Submit:375 Time Limit: 3000 mSec  Problem Description  Input ...

  9. 【window】window10永久关闭更新

    在使用pc过程中自己遇到的问题 相关资料:http://www.ghost580.com/win10/2016-10-21/17295.html 作者:smile.轉角 QQ:493177502

  10. How to get Docker

    Docker 通俗的理解就是像VM一样的虚拟技术,但是不完全相同. Docker可以打包为镜像文件,在镜像中运行容器. 镜像和容器可以理解成类和对象的关系. 拿VM虚拟机和docker来举例,一个容器 ...