mysql join not in_MySQL 使用左连接替换not in
众所周知,左连接和右连接的含义是以哪一张表为准。
左连接就是以左表为准,查出的结果中包含左表所有的记录,如果右表中没有与其对应的记录,那么那一行记录中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相关推荐
- mysql左联一对多_MySQL左连接多对一行
为了简化我的问题:假设我有3个表. Rooms People Things -------- -------- -------- id| name id | name | fk_rooms id | ...
- mysql+join+合计_图解MySQL里的各种 JOIN,看完不懂来找我!
点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货作者:码志 链接:https://mazhuang.org/2017/09/11/joi ...
- sql的左连接,右连接,内连接
环境: SQL工具(如Navicat,SQLyog) MySQL驱动 全局总结: 左连接:关注左边,右边没有就为空. 右连接:关注右边,左边没有就为空. 内连接:返回交集 必备: 两张或多张表格 一, ...
- MySQL 查询、子查询及连接查询
文章目录 一.mysql查询的五种子句 1.where常用运算符: 2.group by 分组 (1)max:求最大值 (2)min:求最小值 (3)sum:求总数和 (4)avg:求平均值 (5)c ...
- SQL 内连接、左连接、右连接案例
概念 左连接(Left Join):以左表为主表,左表中每条数据都会跟右表所有数据进行对比一次,当所有条件不满足时,对应的右表数据以 null 显示 1 语法:select * from tbl1 L ...
- sql查询:单表、多表、左连接、外连接、高级查询
sql查询 一.sql语句 标准SQL包含了4种基本的语句类别: (1)DDL语句,数据定义语句,主要用来定义数据库,表名,字段,例如create,drop,alter. (2)DML语句,数据操作语 ...
- MySql左连接(left join)查询非常慢
MySql左连接(left join)查询非常慢 问题描述: 两张表:tb_buyer_account.b_ip. tb_buyer_account表中ip_id字段对应tb_ip表中主键id字段,两 ...
- mysql join 会算笛卡尔积吗_mysql 内连接、左连接会出现笛卡尔积?
这周的部门周会,分享的同事说的是数据库优化相关,过程中,一个同事跟我讨论左连接查询,是不是笛卡尔积.我第一反应,左连接肯定不是笛卡尔积啊,左连接是以左表为准,左表有m条记录,则结果集是m条记录(哈哈, ...
- mysql group by join(左连接)
mysql group by SELECT ToQQ ,COUNT(Msg) AS msg //展现的列和数量 FROM `privatesendinformation` //表名 WHERE toq ...
最新文章
- [C#基础知识系列]专题十:全面解析可空类型
- 15分钟学会MyEclipse导出jar文件再装换成exe可执行文件
- OpenCV与Python之图像阈值化
- hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
- 教师编学科知识计算机,教师考试信息技术学科知识考什么_谈信息技术学科教师应该怎样教学...
- python中可选参数是什么意思_Python如何定义有可选参数的元类
- 数据挖掘—朴素贝叶斯分类算法(Java实现)
- 网络安全公司 Proficio 获1200万美元融资
- android AES对称加密算法使用实例
- JavaScript高级程序设计 第4版(中文高清)扫描版
- linux delete快捷键,Linux 常用快捷键
- Linux下nand flash读写测试
- python卡通滤镜_纯Python综合图像处理小工具(3)10种滤镜算法
- 【DirectX11】【学习笔记(10)】混合
- 数据挖掘的常用方法、功能和一个聚类分析应用案例
- 计算机一级胶卷出现文件异常,解决IOS相机胶卷导入照片后堆在最新照片的问题...
- 归并排序(详解代码实现)
- java 实现输出水仙花数
- 1998-2018年:统治网络的20家互联网巨头
- OpenLayers-基于OpenLayers的地图应用中图标汉化
热门文章
- Adam又要“退休”了?耶鲁大学团队提出AdaBelief,却引来网友质疑
- 姿态估计开源项目汇总
- 两篇大而全的SLAM综述
- LeetCode 236. 二叉树的最近公共祖先
- Elsevier的Greg Landrum访谈 | 成功的开源化学信息软(RDKit)的要素是什么?
- Jupyter Notebook显示图像
- 第二十二课.XGBoost
- NC:应对干旱 细菌崩了 真菌依然很稳(纯网络分析发Nature子刊)
- NAR:gcMeta——全球微生物组数据存储和标准化分析平台
- python读出文件中的内容_Python读取文本内容