行子查询
子查询返回的结果是一行(可以是多列),这种子查询被称为 行子查询。
常用的操作符:= , <> , IN , NOT IN
例题:
行子查询
1. 查询与 “吴涛” 的薪资及直属领导相同的员工信息;
a. 查询 “吴涛” 的薪资及直属领导
1 | select salary , managerid from emp where name = '吴涛'; |
查询的结果:12000,1
b. 查询与 “吴涛” 的薪资及其直属领导相同的员工信息;
1 | select * from emp where salary = 12000 and managrerid = 1 ; |
1 | select * from emp where (salary,managrerid) = (12000,1) |
1 | select * from emp where (salary,managrerid) = (select salary , managerid from emp where name = '吴涛') |
这三种方法结果都是一样的
表子查询
返回的结果是多行多列
常用操作符:IN
示例:
1. 查询与 ”吴涛“ , ”刘涛“ 的职位和薪资相同的员工信息
步骤:
a. 查询 ”吴涛“ , ”刘涛“ 的职位和薪资
1 | select job , salary from emp where name = '吴涛' or '刘涛'; |
b. 查询与 吴涛“ , ”刘涛“ 的职位和薪资相同的员工信息
1 | select * from emp where (job,salary) in (select job , salary from emp where name = '吴涛' or '刘涛'); |
2. 查询入职日期是“2006-01-02” 之后的员工信息,及其部门信息
a. 入职时间是“2006-01-01”之后的员工信息
1 | select * from emp where entrydate > '2006-01-01' |
b. 查询这部分员工,对应的部门信息
1 | select e.*, d.* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept = d.id; |
3. 查询所有员工的工资等级
运用到两张表:emp , salgrade (存储薪资等级信息)
条件:e.salary >= s.local and e.salary <= s.hlsal
1 | select e.*, s.grade from emp e, salgrade s where e.salary >= s.local and e.salary <= s.hlsal; |
– 验证可以加 : s.local, s.hlsal
1 | select e.*, s.grade, s.local,s.hlsal from emp e, salgrade s where e.salary >= s.local and e.salary <= s.hlsal; |
– 简写
1 | select e.*, s.grade, s.local,s.hlsal from emp e, salgrade s where e.salary between s.local and s.hlsal; |
grade
:薪资等级(整数)local
:薪资范围下限(整数)hlsal
:薪资范围上限(整数)