多表查询连接

一对多:多的一方建立外键指向一方的主键

多对多:建立中间表,包含两个外键连接两个表的主键

一对一:拆分单表,任意一方加入外键关联主键,设置外键唯一unique

多表查询:

笛卡尔积:两个集合的所有组合情况,设置外键条件

select * from emp , dept where emp.dept_id = dept.id;

内连接:查询A ,B交集数据

查询员工姓名和关联部门的名称
隐式内连接:
select emp.name , dept.name  from emp , dept where emp.dept_id = dept.id;
显示内连接:3张以上速度快一点
select emp.name , dept.name from emp inner join dept on emp.dept_id = dept.id;

外连接:左外连接:查询左表和交集数据;右外连接:查询右表和交集数据

查询emp的所有数据和对应部门信息
select emp.* , dept.name from emp left join dept on emp.dept_id = dept.id
查询dept的所有数据和对应员工信息
select dept.* , emp.* from emp right join dept on emp.dept_id = dept.id

自连接:表与自身的连接查询,自连接使用表别名

查询员工和所属领导名称
select a.name , b.name from emp a , emp b where a.mangerid=b.id; //必须取别名
查询员工和所属领导名称,没有领导也要
select a.name  '员工', b.name '领导' from emp a left join emp b on a.mangerid=b.id;

联合查询 union

查询薪资低于5000和年龄大于50的员工
select name from emp where salary<5000
union all select name from emp where age>50;//可以重复

字段列表一致,字段类型一致
union all不去重
union 去重

子查询:sql内嵌套查询

查询销售部的员工信息
标量子查询
select * from emp where  dept_id = (select id from dept where name = '销售部');


列子查询
常见操作符 
in 范围多选一
not in 不在范围内
any 返回列表任意一个满足即可
some 等同any
all 所有值都满足

查询销售部和市场部的所有员工信息
select id from dept where name ='销售部' or name ='市场部'
根据部门id,查询员工信息
select * from emp where dept_id in (select id from dept where name ='销售部' or name ='市场部');



查询财务部人员工资
select salary from emp where dept_id = (select id from dept where name = '财务部');
比财务部工资都高的人员工资
select name from emp where salary > all (select salary from emp where dept_id = (select id from dept where name = '财务部'));


行子查询
常见操作符:=,<>(不等于),in,not,in

查询与 张无忌和直属领导薪资 相同的员工信息
select * from emp where (salary,managerid) = (select salary,managerid form emp where name='张无忌');

表子查询:in

查询与阿波罗和必胜客职位和薪资相同的员工信息

select *from emp where (job,salary) in (select job,salary from emp where name = '阿波罗' or name = '必胜客');

查询入职日期是 2022年之前的员工和部门信息

select e.*,d.* from (select * from emp where entrydate <'2022') e left join dept d on e.dept_id= d.id;  //e员工信息,d部门信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值