MySQL左连接时 返回的记录条数 比 左边表 数量多
在学MySQL的连接时,为了便于记忆,就将左连接 记做 最后结果的总记录数 和 进行左连接的左表的记录数相同,简单的说就是下面这个公式
count(table A left join table B) == count(table A)
毫无疑问,很多时候是这样的,但是,这个结论是错误的,因为一旦table B中有重复的数据时,最后的结果就可能比count(A)的数量多
举个例子:这里有两个表,结构如下
mysql> desc dep;
+--------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| dep_no | int(11) | NO | | NULL | |
+--------+---------+------+-----+---------+----------------+
2 rows in set (0.03 sec) mysql> desc list;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| dep_no | int(11) | NO | | NULL | |
| dep_name | char(20) | YES | | NULL | |
+----------+----------+------+-----+---------+----------------+
3 rows in set (0.02 sec)
向两个表中插入一些数据,如下:
mysql> select * from dep;
+----+--------+
| id | dep_no |
+----+--------+
| 1 | 11 |
| 2 | 12 |
| 3 | 13 |
| 5 | 14 |
+----+--------+
4 rows in set (0.01 sec) mysql> select * from list;
+----+--------+----------+
| id | dep_no | dep_name |
+----+--------+----------+
| 1 | 11 | egg |
| 2 | 12 | water |
| 3 | 12 | water |
| 4 | 13 | rice |
| 5 | 14 | apple |
+----+--------+----------+
5 rows in set (0.00 sec)
注意上面的list表中,id为2和3的记录其实是重复的,然后这时候进行左连接:
mysql> select * from dep left join list on dep.dep_no = list.dep_no;
+----+--------+------+--------+----------+
| id | dep_no | id | dep_no | dep_name |
+----+--------+------+--------+----------+
| 1 | 11 | 1 | 11 | egg |
| 2 | 12 | 2 | 12 | water |
| 2 | 12 | 3 | 12 | water |
| 3 | 13 | 4 | 13 | rice |
| 5 | 14 | 5 | 14 | apple |
+----+--------+------+--------+----------+
5 rows in set (0.01 sec)
左连接的结果是5条记录,而dep表只有四条记录,推翻了上面的结论,同样的,右连接同样如此。
结论:
左连接和右连接 最终结果的记录数和左表或者右表记录条数不一定相同
左连接和右连接只是说以匹配的时候以哪个表为准进行搜索,左连接以左表为准,左表的每一条记录都会进行一次比较。
MySQL左连接时 返回的记录条数 比 左边表 数量多的更多相关文章
- MySQL LIMIT:限制查询结果的记录条数
基本的语法格式如下: <LIMIT> [<位置偏移量>,] <行数> LIMIT 接受一个或两个数字参数.参数必须是一个整数常量.如果给定两个参数,第一个参数指定第 ...
- MySQL分页时统计总记录行数并使用limit返回固定数目的记录
需求很简单:假设有一个user表,表中实际上有10000条数据,但是我不知道有多少条,我要从数据库中每次取20条数据显示,那么怎么完成呢? 方案一: 首先执行一个 select count(*) as ...
- MySQL 分组之后如何统计记录条数 gourp by 之后的 count()
SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条 SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的 ...
- MySQL 8 连接时出现 1251 和 2059 错误
MySQL 8 连接时出现 1251 和 2059 错误 原因是MySQL 8 改了密码加密算法.1 原来是:mysql_native_password MySQL8 改成了 caching_sha2 ...
- mysql左连接 右连接 内连接的区别
mysql左连接 右连接 内连接的区别 1.内连接,显示两个表中有联系的所有数据; 2.左链接,以左表为参照,显示所有数据,右表中没有则以null显示 3.右链接,以右表为参照显示数据,,左表中没有则 ...
- MySQL 分组后,统计记录条数
分组后,统计记录条数: SELECT num,count(*) AS counts from test_a GROUP BY num; 查询结果如下: 对num去重后的数量的统计: SELECT co ...
- asp.net 建多个项目实现三层的实例——读取一张表中的记录条数
学习asp.net两周,通过学习发现,.net和php之间的区别还是蛮大的,比php要复杂一些,开始学习的有些吃力,后来跟着传智播客里的老师学习,渐渐的学到了一些东西. 今天要记录一下.net里的简单 ...
- TDiocpCoderTcpServer返回数据记录有条数限制的问题
TDiocpCoderTcpServer返回数据记录有条数限制的问题 在使用TDiocpCoderTcpServer控件返回查询数据的时候,发现当记录条数超过一定数量的时候(比方有人反试图返回30万条 ...
- C#操作数据库,将其查查出来的记录条数显示在winform窗体中的方法之一
//1.数据库链接的基本操作(略) //2.创建对象函数(关键部分) sqlConn.Open(); //初始化定义记录条数 ; object obj = sqlComm.ExecuteScalar( ...
随机推荐
- SQL Server数据类型int、bigint、smallint、tinyint对比表
SQL Server数据类型int.bigint.smallint.tinyint对比表 数据类型 范围 存储 bigint -2^63 (-9,223,372,036,854,775,808) 到 ...
- 华为无线AP4030,FIA--FAT模式更改
因为买回来的时候才注意到是APfit模式的,只是想作为一个无线路由点接入网络的,只有更改模式,在网上找了很多,实验了两天也还是成功了. 1.准备工具:网线.console线一条.TFTP软件或者FTP ...
- 手动搭建Docker本地私有镜像仓库
实验环境:两个Centos7虚拟机,一个是Server,用作客户端,另一个是Registry,用作Docker私有镜像仓库. 基础配置 查看一下两台虚拟机的IP地址 Server的IP地址是192.1 ...
- Lua-pb 升级到Lua5.3
项目lua库升级到5.3版本后,最头疼的就是原先的一些第三方库原先只是基于lua5.1设计的,比如protobuff 相关的的. 之前项目引入Lua-pb 实现protobuf的解析和使用,但是这个库 ...
- js判断手机系统
var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > - ...
- Spring事务管理2--声明式
简述 1.Spring 的声明式事务管理在底层是建立在 AOP 的基础上.其本质是在方法前后进行拦截,然后在目标方法开始之前创建一个事务,在执行这目标方法结束后,根据执行情况提交或进行回滚事务. 2. ...
- .net 解决伪静态下,html页面无法访问
1.在<system.web>节点下添加: <!--URL重写文件设置开始--> <httpHandlers> <add verb="*" ...
- Scrapy 框架 增量式
增量式: 用来检测网站中数据的更新情况 from scrapy.linkextractors import LinkExtractor from scrapy.spiders import Crawl ...
- 【转】PHP获取重定向URL的几种方法
有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数php自 ...
- 5linux引导流程解析
课程大纲 Linux引导流程 Linux运行级别 Linux启动服务管理 GRUB配置与应用 启动故障分析与解决 常用固件设置 安全设置 可引导介质列表 可引导介质搜索顺序 ...