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

左连接就是以左表为准,查出的结果中包含左表所有的记录,如果右表中没有与其对应的记录,那么那一行记录中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 join not in_MySQL 使用左连接替换not in相关推荐

  1. mysql左联一对多_MySQL左连接多对一行

    为了简化我的问题:假设我有3个表. Rooms People Things -------- -------- -------- id| name id | name | fk_rooms id | ...

  2. mysql+join+合计_图解MySQL里的各种 JOIN,看完不懂来找我!

    点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货作者:码志 链接:https://mazhuang.org/2017/09/11/joi ...

  3. sql的左连接,右连接,内连接

    环境: SQL工具(如Navicat,SQLyog) MySQL驱动 全局总结: 左连接:关注左边,右边没有就为空. 右连接:关注右边,左边没有就为空. 内连接:返回交集 必备: 两张或多张表格 一, ...

  4. MySQL 查询、子查询及连接查询

    文章目录 一.mysql查询的五种子句 1.where常用运算符: 2.group by 分组 (1)max:求最大值 (2)min:求最小值 (3)sum:求总数和 (4)avg:求平均值 (5)c ...

  5. SQL 内连接、左连接、右连接案例

    概念 左连接(Left Join):以左表为主表,左表中每条数据都会跟右表所有数据进行对比一次,当所有条件不满足时,对应的右表数据以 null 显示 1 语法:select * from tbl1 L ...

  6. sql查询:单表、多表、左连接、外连接、高级查询

    sql查询 一.sql语句 标准SQL包含了4种基本的语句类别: (1)DDL语句,数据定义语句,主要用来定义数据库,表名,字段,例如create,drop,alter. (2)DML语句,数据操作语 ...

  7. MySql左连接(left join)查询非常慢

    MySql左连接(left join)查询非常慢 问题描述: 两张表:tb_buyer_account.b_ip. tb_buyer_account表中ip_id字段对应tb_ip表中主键id字段,两 ...

  8. mysql join 会算笛卡尔积吗_mysql 内连接、左连接会出现笛卡尔积?

    这周的部门周会,分享的同事说的是数据库优化相关,过程中,一个同事跟我讨论左连接查询,是不是笛卡尔积.我第一反应,左连接肯定不是笛卡尔积啊,左连接是以左表为准,左表有m条记录,则结果集是m条记录(哈哈, ...

  9. mysql group by join(左连接)

    mysql group by SELECT ToQQ ,COUNT(Msg) AS msg //展现的列和数量 FROM `privatesendinformation` //表名 WHERE toq ...

最新文章

  1. [C#基础知识系列]专题十:全面解析可空类型
  2. 15分钟学会MyEclipse导出jar文件再装换成exe可执行文件
  3. OpenCV与Python之图像阈值化
  4. hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
  5. 教师编学科知识计算机,教师考试信息技术学科知识考什么_谈信息技术学科教师应该怎样教学...
  6. python中可选参数是什么意思_Python如何定义有可选参数的元类
  7. 数据挖掘—朴素贝叶斯分类算法(Java实现)
  8. 网络安全公司 Proficio 获1200万美元融资
  9. android AES对称加密算法使用实例
  10. JavaScript高级程序设计 第4版(中文高清)扫描版
  11. linux delete快捷键,Linux 常用快捷键
  12. Linux下nand flash读写测试
  13. python卡通滤镜_纯Python综合图像处理小工具(3)10种滤镜算法
  14. 【DirectX11】【学习笔记(10)】混合
  15. 数据挖掘的常用方法、功能和一个聚类分析应用案例
  16. 计算机一级胶卷出现文件异常,解决IOS相机胶卷导入照片后堆在最新照片的问题...
  17. 归并排序(详解代码实现)
  18. java 实现输出水仙花数
  19. 1998-2018年:统治网络的20家互联网巨头
  20. OpenLayers-基于OpenLayers的地图应用中图标汉化

热门文章

  1. Adam又要“退休”了?耶鲁大学团队提出AdaBelief,却引来网友质疑
  2. 姿态估计开源项目汇总
  3. 两篇大而全的SLAM综述
  4. LeetCode 236. 二叉树的最近公共祖先
  5. Elsevier的Greg Landrum访谈 | 成功的开源化学信息软(RDKit)的要素是什么?
  6. Jupyter Notebook显示图像
  7. 第二十二课.XGBoost
  8. NC:应对干旱 细菌崩了 真菌依然很稳(纯网络分析发Nature子刊)
  9. NAR:gcMeta——全球微生物组数据存储和标准化分析平台
  10. python读出文件中的内容_Python读取文本内容