对于oracle sql左连接的一点认识

我们在连表的时候,可能有这样的需求,比如我要查询歌曲的信息,有张Song表,但是我需要返回的额数据不仅仅是Song的信息,可能还有专辑的信息,这时候我们就需要使用到左连接。左连接就是不管右边表有没有对应的 都要展示出左边的表的数据。左边的表就是我们要连接的主表。
有这样的sql:
SELECT /+ parallel(10)/
DISTINCT AL.ALBUM_ID,AL.ALBUM_NAME,(SELECT to_char(WM_CONCAT(T.ARTIST_ID ||’:’ || T.ARTIST_NAME))
FROM MUSIC_R_ARTIST MR, ARTIST T
WHERE M.MUSIC_ID = MR.MUSIC_ID(+)
AND MR.ARTIST_ID = T.ARTIST_ID AND MR.ARTIST_TYPE = 1) ARTIST_ID,
M.MUSIC_ID,M.LENGTH,M.MUSIC_NAME,M.SINGER_NAME,M.RANK_NUM,M.PUBLISH_YEAR
FROM
MUSIC M,
MUSIC_R_ARTIST R,
ALBUM AL,
ALBUM_R_MUSIC RM,
ARTIST_R_TYPE AR
where
M.MUSIC_ID = R.MUSIC_ID(+)
AND M.MUSIC_ID = RM.MUSIC_ID(+)
AND AL.ALBUM_ID= RM.ALBUM_ID
AND R.ARTIST_ID = AR.ARTIST_ID
AND M.STATUS = 1
AND AR.TYPE_ID = 1
(+)就是左连接的表示,(+)在右边就标志着左边的表示左连接的表,
当然还有一种写法left join A on A.id = M.id and… 他们的区别就死后者可以写多个连接条件。前者只能写一个连接条件。

在此之前,我喜欢这样去写sql,当然我知道主表是music表。应该返回所有music表中满足条件的数据所以只要是跟M.MUSIC_ID相关的条件,我都会加上(+)标识,但是我忽略了AND AL.ALBUM_ID= RM.ALBUM_ID AND R.ARTIST_ID = AR.ARTIST_ID 这两条语句,没加外连接标识,也可能到时song表的数据某些查不出来。AND AL.ALBUM_ID(+) = RM.ALBUM_ID AND R.ARTIST_ID = AR.ARTIST_ID(+) 这样加上该出来的就出来了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值