一、基本查询回顾
1、查询工资高于500或岗位为manager的员工,并且名字首字母是J
2、按部门编号升序,工资降序排序
3、用年薪降序排序
4、显示工资最高的员工名字和岗位(使用了子查询)
5、查询工资高于平均工资的员工
6、按部门查询最高工资和平均工资
7、显示平均工资低于2000的部门和他的平均工资
8、显示每种岗位员工数,平均工资
二、多表查询
两表结合语法
select * from table1, table2; 这一步是把两表中的行数据进行自由组合拼接,也叫笛卡尔积
select * from table1, table2 where table1.column=table2.column 这一步是用两个表中相同的值进行筛选,来获得有效的合并数据。
举例
(1)显示部门是10号的部门名,员工名和工资
(2)显示各个员工姓名,工资和工资级别
三、自连接
对同一张表进行笛卡尔积,但是要注意要重命名。
找FORD的领导
四、在where子句中的子查询
指嵌套在其他sql语句中的select语句
1、单列子查询
显示SMITH同一部门的员工
2、多行子查询
(1)查询和10号部门的工作岗位相同的员工名字,岗位工资部门号,不包括10号部门
in 判断一个列值是否在一个集合中
(2)显示工资比部门30号所有员工工资高的员工姓名,工资,部门号
all 比集合中所有数据都....
(3)显示工资比部门30号任意员工工资高的员工姓名,工资,部门号
any 比集合中任意一个....
3、多列子查询
查询和SMITH部门岗位完全相同的员工,不包括SMITH
五、在from子句中的子查询
1、显示每个高于自己部门平均工资的员工
思路:先拿到每个部门平均工资和员工表笛卡尔积,通过比较即可。
2、查找每个部门工资最高的人
思路:先拿到最高工资表和员工表笛卡尔积,通过比较即可。
3、显示每个部门的信息(部门名,编号,地址)和人员数量
思路:先拿到部门的人员数和部门表笛卡尔积,通过比较即可。
注意
1、进行子查询就要取别名。
2、可以把临时表进行取别名。
六、合并查询
工资大于2500或职位是MANAGER的员工
union 取两个结果的并集,自动去掉重复值
union all 取两个结果的并集,不去掉重复值