mysql 筆記13 聯表查詢

2021-10-09 09:19:09 字數 2061 閱讀 2312

7種join理論

實際操作

select a.*,b.name as rolename from `users` a left join `roles` b on b.id=a.role_id

查詢使用者擁有的許可權

select * from role_node as a left join `nodes` as b on a.node_id=b.id where a.role_id=(select role_id from `users` where `id`=4)

或者select c.name from `users` a left join `role_node` b on a.role_id=b.role_id left join `nodes` as c on b.node_id=c.id where a.id=4 ;

在實際開發中

最常用的就是left join

其次right join、inner join

內連線(兩表的共有部分)

select * from tbl_dep d inner join tbl_emp e on d.id=e.deptid;

左連線(左表的全部,右表不滿足補null)

select * from tbl_dep d left join tbl_emp e on d.id=e.deptid;

右連線(右表的全部,左表不滿足的補null)

select * from tbl_dep d right join tbl_emp e on d.id=e.deptid;

特殊的左連線,(顯示為左表的獨有的資料)

說明:查詢tbl_dep 表中跟tbl_emp 表無關聯關係的資料,即tbl_dep 獨佔,且tbl_emp 表的顯示列補null;

select * from tbl_dep d left join tbl_emp e on d.id=e.deptidwhere e.deptidis null;

特殊的右連線(顯示為右表的獨有的資料 )

說明:查詢tbl_emp 表中跟tbl_dep 表無關聯關係的資料,即tbl_emp 獨佔,且tbl_dep 表的顯示列補null;

select * from tbl_dep d right join tbl_emp e on d.id=e.deptidwhere d.idis null;

全連線(顯示全部資料)(mysql 不支援 full outer join)

union :有去重的功能。

select * from tbl_dep d left join tbl_emp e on d.id=e.deptidunion

select * from tbl_dep d right join tbl_emp e on d.id=e.deptid;

顯示兩表的獨有的資料

select * from tbl_dep d left join tbl_emp e on d.id=e.deptidwhere e.deptidis null union

select * from tbl_dep d right join tbl_emp e on d.id=e.deptidwhere d.idis null;

MySQL聯表查詢

顯示所有員工名字 emp.ename 員工工資 emp.sal 及所在部門的名字 dept.dname 笛卡爾積 emp num dept num 聯表查詢時一定要帶上關聯條件 select ename,sal,dname from emp,dept where emp.deptno dept.de...

MySQL聯表查詢及聯表刪除的方法

mysql聯表查詢及聯表刪除都是經常需要用到的操作,下面對mysql聯表查詢和聯表刪除都作了詳細的介紹分析,希望對您有所幫助。mysql聯表查詢 reference mysql manul 3.2.7.select語法13.2.7.1.join語法 13.2.7.2.union語法 eg1 mysq...

zf聯表查詢

zf支援聯表查詢,並且會經常遇到聯表查詢,具體 寫法如下 select this select select from this name,array id name select distinct select joinleft jobname,jobname.enterprise id this...