今天做專案遇到乙個需求就是通過乙個登陸字段查詢該用具有的許可權,然後根據許可權顯示對應的頁面。
sql語句:
select * from elec_role_popedom a
left outer join elec_user_role b
on a.roleid = b.roleid
inner join elec_user c
on b.userid = c.userid
where c.isduty = '1';
在這條語句中用了左連線和內連線。以前在學校的時候自己系統的自學過oracle,但是由於上班很少用這些,有些淡忘了。所以今天遇到了這個問題,我把這幾個區別弄明白了。
左外連線也叫左連線(left outer join也可以簡寫為left join)
顯示左表的所有資料,然後根據條件與右表進行匹配,如果有匹配的就加在左表的後面,如果有多條匹配資料,則顯示多條。
沒有的話,該行的右表就以null值填充。
右連線(right outerjoin 也可以簡寫為right join)
顯示右表的所有資料,然後根據條件與左表匹配,如果有匹配的就加在左表的後面,如果有多條匹配資料,則顯示多條。
沒有的話,該行以null值填充。(和左連線類似)
何為左表、右表呢 ?在join的左邊就稱為左表,右邊就稱為右表
全連線
full join 或 full outer join(mysql用不了,但是可以 左連線+union+右連線 實現)
完整外部聯接返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。
如果表之間有匹配行,則整個結果集行包含基表的資料值。
交叉連線 cross join
交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。
內連線 inner join (簡寫為 join)
兩個表只查詢出滿足條件的行數。
自連線把乙個表當兩個表看,取兩個別名,進行查詢。
select * from table_1 a,table_1 b where a.[name]=b.[name] --連線的兩表是同乙個表,別稱不一樣
自連線一般用於有上下級關係的查詢。
以上是我對這幾個概念的理解,花了哥一上午時間去測試,由於把建表語句和測試語句寫在上面會顯得很亂所以就這能寫一下自己的心得體會了。
SQL 左外連線,右外連線,全連線,內連線,自連線
左連線 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 select a.rid,a.picname,b.trpid,b.rid,b.picname,b.picurl from tc restaurants a left join tc restaurants pictures b on a.r...
左連線,右連線,內連線,自連線
最近公司在招人,同事問了幾個自認為資料庫可以的應聘者關於庫連線的問題,回答不盡理想 現在在這寫寫關於它們的作用 假設有如下表 乙個為投票主表,乙個為投票者資訊表 記錄投票人ip及對應投票型別,左右連線實際說是我們聯合查詢的結果以哪個表為準 1 如右接連 right join 或 right oute...
內連線,左外連線,右外連線,全連線
1.內連線我們通常用的連線,表表連線只顯示交集資料 2.外連線分左外連線 table1 left outer join on table2 和右外連線table1 right outer join on table2 和全連線 table1 full outer join on table2 2.1...