-- 多表连接查询
-- 定义: 两张或两张以上的表 通过关联关系,联合查询并获取多表的字段信息
-- 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
)