数据库-多表连接查询

-- 多表连接查询

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

上一篇:c#实现窗体淡入淡出的几种方法


下一篇:我的Java程序如何在.jar文件中存储文件?