前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql语句中(+)的作用

sql语句中(+)的作用

作者头像
职场亮哥
发布2020-10-10 11:16:15
1.3K0
发布2020-10-10 11:16:15
举报
文章被收录于专栏:职场亮哥

演示示例

说明:以下示例中,表a是员工表,有a,b,c,d四个员工,性别都是男性m。表b是工资表,有a,b,d四个员工,工资对应的是1000,2000,4000。然后分别演示带(+)符号的和不带(+)符号的,结果如下。

代码语言:javascript
复制
SQL> select * from a;

NAME                 SEX
-------------------- -----
a                    m
b                    m
c                    m
d                    m

SQL> select * from b;

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
d                          4000

SQL> select a.name,b.money from a,b where a.name=b.name(+);

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
d                          4000
c

SQL> select a.name,b.money from a,b where a.name=b.name;

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
d                          4000

可见,带(+)号时,a表中的所有人都在,即使工资为空。不带(+)时,a表中的没有出现工资为空的员工c。

对(+)号的解释

**(+) 表示外连接。**条件关联时,一般只列出表中满足连接条件的数据。如果条件的一边出现(+),则另一边的表就是主表,主表中的所有记录都会出现,即使附表中有的记录为空

(+)的扩展:SQL表连接

SQL表连接分类

内连接,外连接,交叉连接,其中外连接包括左连接和右连接。

SQL表连接示例

内连接

代码语言:javascript
复制
SQL> select a.name,b.money from a,b where a.name=b.name;

SQL> select a.name,b.money from a inner join b on a.name=b.name;

左连接

代码语言:javascript
复制
SQL> select a.name,b.money from a,b where a.name=b.name(+);

SQL> select a.name,b.money from a left join b on a.name=b.name;

右连接

代码语言:javascript
复制
SQL> select a.name,b.money from a right join b on a.name=b.name;

SQL> select a.name,b.money from a,b where a.name(+)=b.name;

交叉连接

代码语言:javascript
复制
SQL> select a.name,b.money from a full join b on a.name=b.name;

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
c
d                          4000

SQL> select a.name,b.money from a,b where a.name(+)=b.name(+);
select a.name,b.money from a,b where a.name(+)=b.name(+)
                                              *
第 1 行出现错误:
ORA-01468: 一个谓词只能引用一个外部联接的表

所以(+)只是表示外连接,并不表示交叉连接。

参考:

SQL Server 数据库 (+) 这个是什么意思

SQL表连接查询(inner join、full join、left join、right join)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 演示示例
  • 对(+)号的解释
  • (+)的扩展:SQL表连接
    • SQL表连接分类
      • SQL表连接示例
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档