zoukankan      html  css  js  c++  java
  • sql语句中(+)的作用

    演示示例

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

    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表连接示例

    内连接

    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;
    

    左连接

    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;
    

    右连接

    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;
    

    交叉连接

    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)


    记得帮我点赞哦!

    精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!

    resource-introduce

    念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。

    我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。

    听我说,进步多,程序人生一把梭

    如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。

    职场亮哥文章列表:更多文章

    wechat-platform-guide-attention

    本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!

  • 相关阅读:
    elasticsearch常用命令
    logstash向elasticsearch写入数据,如何指定多个数据template
    rsync 实现文件同步 (重要数据通过rsyncr把数据同步到不同的两台服务器上,这样可以防止服务器的硬盘故障导致数据丢失) 客户端同步时如果要排某个目录
    rdesktop 指定服务器的分频率
    /etc/sudoers 配置
    su 和 su
    rdesktop 源码安装
    通过show variables like ‘general_log%’可以看查询日志
    密钥登陆服务器 失败
    log_output参数是指定日志的存储方式
  • 原文地址:https://www.cnblogs.com/CHLL55/p/13693989.html
Copyright © 2011-2022 走看看