问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle SQL语句怎么关联一张表 没有对应数据的就显示为空

发布网友 发布时间:2022-04-30 07:47

我来回答

5个回答

懂视网 时间:2022-04-30 12:09

  我们可以通过引用两个表的方式,从两个表中获取数据:

  谁订购了产品,并且他们订购了什么产品?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

 

结果集:

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

 

  这个方式看起来很直观,也是我们经常比较常用的,但没办法解决上面的问题,但是我们可以使用下面的join方式解决。


方式2:join

不同的 SQL JOIN

  除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。

  下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行
  •  


     

    1)、SQL INNER JOIN 关键字

      在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

     

     

    INNER JOIN 关键字语法

     

    SELECT column_name(s)
    FROM table_name1
    INNER JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name

     

      注释:INNER JOIN 与 JOIN 是相同的。

    内连接(INNER JOIN)实例

      现在,我们希望列出所有人的定购。

      您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

    结果集:

    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678

      INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

     


     

    2)、SQL LEFT JOIN 关键字

      LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。(可以解决上面的问题)

    LEFT JOIN 关键字语法

    SELECT column_name(s)
    FROM table_name1
    LEFT JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name

      注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

    左连接(LEFT JOIN)实例

      现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。

      您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    LEFT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

     

    结果集:

    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678
    Bush George  

      LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。


     

    3)、SQL RIGHT JOIN 关键字

      RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

    RIGHT JOIN 关键字语法

    SELECT column_name(s)
    FROM table_name1
    RIGHT JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name

     

      注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

    右连接(RIGHT JOIN)实例

      现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。

      您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    RIGHT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

    结果集:

    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678
        34764

      RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。


     

    4)、SQL FULL JOIN 关键字

    只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

    FULL JOIN 关键字语法

    SELECT column_name(s)
    FROM table_name1
    FULL JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name

      注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

    全连接(FULL JOIN)实例

      现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。

      您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    FULL JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

     

    结果集:

    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678
    Bush George  
        34764

    FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。

     

      致谢:感谢您的耐心阅读!

     

    oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题

    标签:

    热心网友 时间:2022-04-30 09:17

    给你个思路,写一个split函数,根据逗号分隔,可以返回一个类似表的数据,然后在外连接即可。

    热心网友 时间:2022-04-30 10:35

    你可以用临时表
    create table #temp
    (no int)
    insert into #temp values(101)
    insert into #temp values(105)
    insert into #temp values(203)

    select b.name, a.no

    from #temp a
    left join msg b on a.no=b.no

    drop table #temp
    以上是sql server中语句
    oracle有啥不同之处就不知道了~

    热心网友 时间:2022-04-30 12:09

    Oracle不太了解,LZ可以去了解下with as的用法,说不定可以实现
    http://blog.csdn.net/a9529lty/article/details/4923957/

    热心网友 时间:2022-04-30 14:01

    为什么不入库,入库了用左外连接不就可以了吗?追问当数据量大时 我想复制粘贴省事,入库的话 有什么语句或办法可以快速入库?换了数据库比如MySQL 也都会有导入工具的支持的?所以觉得麻烦……

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 夸字旁一个包读什么 夸加个包念什么 瓜字加偏旁 gmt+08:00是什么意思? 给包 字加部首可以变成什么新字 瓜加偏旁念什么? (夸包)合在一起怎么念 瓜加个包念什么?救解,急啊!!!!!《红楼梦》里贾宝玉在晴雯死后写给晴雯的《芙蓉女儿诔》当中有这 微信能正常使用,但qq、浏览器等需要联网使用的软件无法连接网络,是怎么回事? 懒惰的反义词??? 懒惰的反义词是情况对吗 懒惰的反义词英语 30厘米的鱼缸怎么造景 雨林缸造景教程是什么? 祁建荣在拉萨那曲干什么? 充值号码是什么意思 充值号码是什么意思充 中国联通充值号是什么? 钢琴和双排键选哪一个 双排键的全称叫什么? 瓜加失是什么字 梦见自己貌似生了一个大头病的孩子 午睡时梦见自己生了个大头儿子 在西安,到底去哪看桃花啊 大茧蛹子和小金丝蛹哪个营养价值更高 基站延迟20ms 基站延迟太高怎么办 网速慢,3G网络怎么玩,打游戏,基站延迟,如何解决 王者荣耀基站延迟怎么解决 打王者荣耀显示基站延迟太高 总是卡 我这个基站延迟怎么解决? 怎么解决三星s7玩王者荣耀基站延迟的问题? 4g基站延迟高怎么办 昨天晚上做梦梦见自己家的房子连根倒塌了,我和孩子还有其他人都跑出来了,没有伤到人,是怎么回事? 法宣在线帐号怎样注销 如何删除法宣在线账号 葱花鸡蛋饼怎么做 简单早餐 周公解梦 梦到去到原来住过的楼房倒塌,然后自己跑出来了!什么意思呀! 法宣在线手机版怎么退出统 梦见自己在房子里房子开始倒塌、但我跑出去了、还叫别人和我一起跑