對於oracle sql左連線的一點認識

2021-08-08 19:47:09 字數 1267 閱讀 9148

我們在連表的時候,可能有這樣的需求,比如我要查詢歌曲的資訊,有張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(+) 這樣加上該出來的就出來了。

內連線 左連線 左外連線 右連線的區別

一 測試例子 存在如下兩張表 年級與班級,表內容如下 班級表 二 內連線與自然連線 1 自然連線 對於select from gradeclass gc where gc.grade id in select id from grade 其結果如下圖 其查詢是把符合條件中的班級表內容全部查詢出來 而...

左連線 左外連線 右外連線

在之前,我對mssql中的內連線和外連線所得出的資料集不是很清楚。這幾天重新溫習了一下sql的書本,現在的思路應該是很清楚了,現在把自己的理解發出來給大家溫習下。希望和我一樣對sql的連線語句不太理解的朋友能夠有所幫助。發這麼菜的教程,各位大大們別笑話偶了,呵 d 有兩個表a和表b。表a結構如下 a...

oracle左連線沒用 Oracle左連線,右連線

以下的文章主要是通過 的方式來引出oracle join的正確用法,其在實際中的應用比例還是佔為多數的,如果你對這一新開發的技術,心存好奇的話,以下的文章將會揭開它的神秘面紗。希望你在瀏覽完之後會有所收穫。8i create table dali.test1 a int,b int create t...