查询工资比zws工资高的员工
select *from employee
where salary >(
select saraly
from employee
where name='zws');
查询最低工资大于50号部门最低工资的部门id和其最低工资
1查询50号部门的最低工资
select Min(saraly)from employee
where id =50;2查询每个部门的最低工资
select Min(saraly),id
from employee
group by id;3筛选2,满足min(saraly)>1
select Min(saraly),id
from emloyee
group by id
having Min(saraly)>(
select Min(saraly)from employee
where id =50;)
多行子查询
in:/not in
等于列表中的一个
any/some
和子查询返回的某一个值比较,满足任意一个
all
和返回的所有值比较,都满足
返回其他部门中比job_id为It部门任一工资低的员工信息
select *from employee
where saraly<any(
select distanct saraly
from employee
where job_id ='It') and job_id <>'It';
from后面的查询必须给表起一个别名
查询每个部门的平均工资的工资等级
select ag_dep.*,g.grand_level
from(select avg(salary)from employee group by departmnet_id) ag_dep
inner join job_grands g
on ag_dep.ag
between lowest_sal and highest_sal;
相关子查询(exists后面)
该查询与前面最大的不同是:
先执行外查询,再根据内查询去过滤结果集
所有相关子查询更快
select exists(select employee_id from employee);//结果为1
如果exists后面存在,结果就为1,否则为0
案例1
查询员工的部门名
select department_name
from department d
where exists(
select *from employee e
where d.department_id = e.employee_id
);
分页查询
语法:
select 查询条件
from 表1 【join type】 join 表2 on 连接条件
where 筛选条件
group by
having 分组后筛选
order by 排序
limit offset(起始索引,从0开始),size(条目数)
SELECT*FROM review limit 0,5;
union联合查询
将多个查询结果合并成一个结果,常用于没有直接关联的表的查询,但查询信息一致
查询语句1
union
查询语句2
...
注意事项:
1.要求多条查询语句的查询列数一致
2.要求多条查询语句的每一条的类型和顺序最好一致
3.union会自动去掉重复项,如果不想去掉重复项,改为 union all
引入案例
查询部门编号>90或邮箱包含a的员工信息
select *from employee where email like '%a%'
union
select *from employee where department_id>90;
查询中国国家和美国国家中用户年龄大于12岁的用户信息
select cid,cname,cage from u_c where cage>12
union
select aid,aname,aage from u_a where aage>12;