我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL左连接时 返回的记录条数 比 左边表 数量多

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL左连接时 返回的记录条数 比 左边表 数量多

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表只有四条记录,推翻了上面的结论,同样的,右连接同样如此。

结论:

  左连接和右连接 最终结果的记录数和左表或者右表记录条数不一定相同

  左连接和右连接只是说以匹配的时候以哪个表为准进行搜索,左连接以左表为准,左表的每一条记录都会进行一次比较。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL左连接时 返回的记录条数 比 左边表 数量多

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL左连接时 返回的记录条数 比 左边表 数量多

在学MySQL的连接时,为了便于记忆,就将左连接 记做 最后结果的总记录数 和 进行左连接的左表的记录数相同,简单的说就是下面这个公式   count(table A left join table B) == count(table A)  毫无疑问,很多时
MySQL左连接时 返回的记录条数 比 左边表 数量多
2019-12-14

编程热搜

目录