今天做項目遇到一個需求就是通過一個登陸字段查詢該用具有的權限,然後根據權限顯示對應的頁面。
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] --連接的兩表是同一個表,別稱不一樣
自連接一般用於有上下級關係的查詢。
以上是我對這幾個概念的理解,花了哥一上午時間去測試,由於把建表語句和測試語句寫在上面會顯得很亂所以就這能寫一下自己的心得體會了。