1. 程式人生 > 資料庫 >資料庫-多表連線查詢

資料庫-多表連線查詢

-- 多表連線查詢

-- 定義: 兩張或兩張以上的表 通過關聯關係,聯合查詢並獲取多表的欄位資訊
-- 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 條件

-- 以right右邊的表為主表, 查詢右邊表的所有記錄。
-- 查詢學生資訊
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
)