mysql语句左外链_sql中的左外连查询的两种写法

昨天要在前台页面的表格中新增加一列,调用接口的时候发现没有这列数据,需要修改后台接口,后台接口添加一列,然后进行连表查询,将新增匹配的数据添加到结果表中,但是新列数据全为空,导致结果中之前表格的数据也出不来,添加外连接即可;

一. 什么是外连接?

外连接(Outer Join);

outer join会返回每个满足第一个(顶端)输入与第二个(底端)输入的连接的行;

同时它还会返回任何在第二个输入中没有匹配行的第一个输入中的行;

上面这句话,并不好消化,写个栗子用用好理解;

1.2 外连接有哪几种?

外连接分为三种:

左外连接(简称左连);

左边的表不加限制,数据全部显示,右边匹配的表数据不全的,用null替代;

右外连接(右连);

右边的表不加限制,数据全部显示,左边匹配的表数据不全的,用null替代;

全外连接(全连);

左右两边的表都不限制,即两边的表,数据全显示,没有数据的用null替代;

在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录, 那么在相关联的结果集行中列显示为空值(NULL);

1.3 使用SQL语法表示:

// 左 / 右 / 全 外连接

LEFT / RIGHT / FULL (OUTER) JOIN

注意:

通常我们省略outer 这个关键字。 写成:left / right / full join;

SQL语法不区分大小写,对大小写不敏感;

二. 详细说一下左外连接

left join是以左表的记录为基础的,它的结果集是左表中的数据,在加上左表和右表匹配的数据;

直白点说就是,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,同时右表中没有记录的地方均用NULL替代;

2.1 (左外连接标准写法)写法1:

select * from leftTable l left join rightTable r on l.id = r.id;

leftTable l 左表名称,后跟的是表的别名,可写可不写,如果写了话,后面可以用别名来代替左表名称,同理是右表;

from 表1... left join 表2... on 关联匹配条件;

left join必须跟在from语句后,必须带on;

同理,右外连接,全外连接,写法同上,只用修改连接关键字即可;

2.2(使用"(+)"表示)写法2:

对于外连接, 也可以使用(+)来表示,(+)放在哪边(左、右)表示另一边外连接;

2.2.1(+)的使用及注意事项:

(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用;

当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符;

(+)操作符只适用于列,而不能用在表达式上;

(+)操作符不能与or和in操作符一起使用;

(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接;

2.2.2 用(+)来实现(左、右)外连,看栗子, 这样理解+号比较好理解,栗子如下:

即 你可以把 +当做 补充,也就是说哪个表有加号,哪个表就是匹配表,这个表就是用来作补充的;

所以加号写在右表,左表就是全部显示,故是左连接;

// 左连

select * from table1 a, table2 b where a.id=b.id(+);

同理,加号写左表,就是右连接;

// 右连

select * from table1 a, table2 b where a.id(+)=b.id;

注意:

(+)号必须放到where后面;

(+)只能表示左外连接或右外连接,不能表示全外连接,即:

(+)要么放左边,要么放右边;

(+)不能两边都放;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值