SQL7 查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t
select emp_no,t from (select emp_no,count(salary) t from salaries group by emp_no) s where s.t > 15
select emp_no,count(salary) t from salaries group by emp_no having t > 15
解题思路:count(*) 为计算全部数据的行数地意思,在GROUP BY子句后面包含了一个HAVING子句。HAVING类似于WHERE(唯一的差别是WHERE过滤行,HAVING过滤组)
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
SQL8 找出所有员工当前薪水salary情况
select distinct salary from salaries order by salary desc
distinct : 去除重复值
SQL10 获取所有非manager的员工emp_no
select emp_no from employees where emp_no not in (select distinct e.emp_no from employees e ,dept_manager d where e.emp_no = d.emp_no)
in 操作符允许我们在 where 子句中规定多个值。
not in 不在某个范围内的值。
select distinct e.emp_no from employees e left join dept_manager d on e.emp_no = d.emp_no where d.dept_no is null
解题思路:employees作为主表,使用左联结,限定条件为d.dept_no为空,选出在employees但不在dept_manager中的emp_no记录。