MySQL—内连接和外连接区别

MySQL—内连接和外连接区别区别内连接(innerjoin):取出两张表中匹配到的数据,匹配不到的不保留 外连接(outerjoin):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL示例表users表mysql>select*fromusers;+—-+——-+|id|name|+—-+——-+|1|john||2…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

区别

  • 内连接(inner join):取出两张表中匹配到的数据,匹配不到的不保留
  • 外连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL

示例表

users表

mysql> select * from users;
+----+-------+
| id | name  |
+----+-------+
|  1 | john  |
|  2 | May   |
|  3 | Lucy  |
|  4 | Jack  |
|  5 | James |
+----+-------+
5 rows in set (0.00 sec)

topics表

mysql> select * from topics;
+----+---------------------------------------+---------+
| id | title                                 | user_id |
+----+---------------------------------------+---------+
|  1 |  Hello world                          |       1 |
|  2 | PHP is the best language in the world |       2 |
|  3 | Laravel artist                        |       6 |
+----+---------------------------------------+---------+
3 rows in set (0.00 sec)

内连接(inner join)

  • 示例
mysql> select * from users as u inner join topics as t on u.id=t.user_id;
+----+------+----+---------------------------------------+---------+
| id | name | id | title                                 | user_id |
+----+------+----+---------------------------------------+---------+
|  1 | john |  1 |  Hello world                          |       1 |
|  2 | May  |  2 | PHP is the best language in the world |       2 |
+----+------+----+---------------------------------------+---------+
2 rows in set (0.00 sec)

inner可以省略,as是给表起别名,也可以省略

mysql> select * from users u join topics t on u.id=t.user_id;
+----+------+----+---------------------------------------+---------+
| id | name | id | title                                 | user_id |
+----+------+----+---------------------------------------+---------+
|  1 | john |  1 |  Hello world                          |       1 |
|  2 | May  |  2 | PHP is the best language in the world |       2 |
+----+------+----+---------------------------------------+---------+
2 rows in set (0.00 sec)

以上两句等价于

mysql> select * from users,topics where users.id=topics.user_id;
+----+------+----+---------------------------------------+---------+
| id | name | id | title                                 | user_id |
+----+------+----+---------------------------------------+---------+
|  1 | john |  1 |  Hello world                          |       1 |
|  2 | May  |  2 | PHP is the best language in the world |       2 |
+----+------+----+---------------------------------------+---------+
2 rows in set (0.00 sec)

外连接(outer join)

  • 左外连接(left outer join):以左边的表为主表
  • 右外连接(right outer join):以右边的表为主表

以某一个表为主表,进行关联查询,不管能不能关联的上,主表的数据都会保留,关联不上的以NULL显示

通俗解释就是:先拿出主表的所有数据,然后到关联的那张表去找有没有符合关联条件的数据,如果有,正常显示,如果没有,显示为NULL

示例

mysql> select * from users as u left join topics as t on u.id=t.user_id;
+----+-------+------+---------------------------------------+---------+
| id | name  | id   | title                                 | user_id |
+----+-------+------+---------------------------------------+---------+
|  1 | john  |    1 |  Hello world                          |       1 |
|  2 | May   |    2 | PHP is the best language in the world |       2 |
|  3 | Lucy  | NULL | NULL                                  |    NULL |
|  4 | Jack  | NULL | NULL                                  |    NULL |
|  5 | James | NULL | NULL                                  |    NULL |
+----+-------+------+---------------------------------------+---------+
5 rows in set (0.00 sec)

等价于以下,只是字段的位置不一样

mysql> select * from topics as t right join users as u on u.id=t.user_id;
+------+---------------------------------------+---------+----+-------+
| id   | title                                 | user_id | id | name  |
+------+---------------------------------------+---------+----+-------+
|    1 |  Hello world                          |       1 |  1 | john  |
|    2 | PHP is the best language in the world |       2 |  2 | May   |
| NULL | NULL                                  |    NULL |  3 | Lucy  |
| NULL | NULL                                  |    NULL |  4 | Jack  |
| NULL | NULL                                  |    NULL |  5 | James |
+------+---------------------------------------+---------+----+-------+
5 rows in set (0.00 sec)

左外连接和右外连接是相对的,主要就是以哪个表为主表去进行关联

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/178383.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • react中postMessage与addEventListener的使用

    react中postMessage与addEventListener的使用有时候两个页面之间不是父子组件的情况下,信息交互很难搞,看到有人用postmessage来进行消息交互,我也试了一下,哎呀妈真香!!!1、首先在需要发送消息的界面中使用postMessage使用的是React+TypeScript,逻辑是更新提交的时候刷新打开当前页面的父窗口,postMessage用法如下:if(window.opener&&window.opener.location&&window.opener.location.href){

  • IDEA汉化官方插件

    IDEA汉化官方插件直接在IDEA内下载即可输入Chinese下载完成后重启IDEA

  • 机房收费系统——再回首「建议收藏」

    机房收费系统——再回首「建议收藏」机房收费系统——再回首

  • 远程连接oracle01017,sqlplus远程sys用户登录ora 01017的解决方法

    远程连接oracle01017,sqlplus远程sys用户登录ora 01017的解决方法UsingORAPWDWhenyouinvokethispasswordfilecreationutilitywithoutsupplyinganyparameters,youreceiveamessageindicatingtheproperuseofthecommandasshowninthefollowingsampleoutput…

  • 360天擎无密码退出和卸载一样吗_奇安信天擎退出密码

    360天擎无密码退出和卸载一样吗_奇安信天擎退出密码无密码退出删除配置(360Safe\EntClient\conf\EntBase.dat)**注:**删除时提示权限不够无法删除,使用360自带的文件粉碎机将文件粉碎即可无密码退出360天擎(重新打开程序时EntBase.dat会再次生成)修改配置(将EntBase.dat中uipass、qtpass两项值置空)**注:**修改时提示权限不够无法修改,需先关闭【设置】【防护中心】【自我保护】功能卸载只能通过修改配置(将EntBase.dat中uipass、qtpass两项值置空)

  • Java中的三种注释类型「建议收藏」

    Java中的三种注释类型「建议收藏」注释:用于说明解释程序的文字就是注释。Java中的注释有三种:单行注释多行注释文档注释(Java特有)注释的作用有什么?主要就是提高了代码的阅读性,是调试程序的重要方法。当然,写注释也是一种良好编程习惯。可以将自己的思想通过注释先整理出来,再用代码去体现。来看看具体的使用吧!单行注释格式://注释文字多行注释格式:/*注释文字*/下面给出单行注释和多行注释的示例://单行注释publicclassHelloWorld{/* 程序入口

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号