資料庫-多表連線查詢
-- 多表連線查詢
-- 定義: 兩張或兩張以上的表 通過關聯關係,聯合查詢並獲取多表的欄位資訊
-- 1、內連線
-- 根據兩張表的關聯條件,獲取它們共有的部分 , 取交集
-- 語法: select * from 表1 inner join 表2 on 條件(有關係的兩張表的欄位)
-- 或 select * from 表1 ,表2 where 條件1
-- 查詢學生所在的 系部資訊
select * from t_student;
select * from t_dept;
insert into t_student(sid ,sname ,sscore ) values(1000,'李全權',500);
select * from t_student inner join t_dept on t_student.did = t_dept.did
select * from t_student t1,t_dept t2 where t1.did = t2.Did
-- 查詢學生 系名, 和 系主任
select * from t_man;
select sname ,dname ,mname from t_student as t1
inner join t_dept as t2 on t1.did = t2.did
inner join t_man as t3 on t3.mid = t2.mid
-- 2、外連線
-- 2.1 左外連線 select * from 表1 left join 表2 on 條件
-- 以left左邊的表為主表關聯查詢,查詢關聯的記錄,如果不能關聯上的返回null記錄
-- 查詢學生資訊 和他的系資訊
select * from t_student t1 left join t_dept t2 on t1.did = t2.did
select * from t_student t1
left join t_dept t2 on t1.did = t2.did
left join t_man t3 on t3.mid = t2.mid
-- 2.2 右外連線 select * from 表1 right join 表2 on 條件
-- 查詢學生資訊
select * from t_student t1 right join t_dept t2 on t1.did = t2.did
-- 等價於 以下的左外連線
select * from t_dept t1 left join t_student t2 on t1.did = t2.did ;
-- 2.3 全外連線 ,關聯兩張表所有的記錄 (MySql 不支援 ,Oracle支援 )
select * from t_student t1 full join t_dept t2 on t1.did = t2.did ;
27 (26+1)
7 (5+2)
-- 最終 26+1 +2 =29
-- 2.4 自連線(自己表關聯自己表 ) 或 笛卡爾積連線 :
-- 自連線
select t1.id ,t1.name ,t1.pid , t2.name as pname from baseinfo t1 , baseinfo t2
where t1.pid = t2.id
-- 兩張表之間沒有關聯條件
select * from t_student t1 ,t_dept ;
查詢各個部門員工工資大於平均工資(平均工資包括所有員工)的人數
select deptno , count(*) from emp
where sal > (
select avg(sal) from emp
)
group by deptno
查詢出有3個以上下屬的員工資訊 --
select * from emp order by mgr ;
select * from emp where empno in (
select mgr from emp group by mgr
having count(*)>=3
)