#随堂练习
SELECT max(salary),MIN(salary),AVG(salary),SUM(salary)
FROM employees
SELECT job_id,MAX(salary),MIN(salary),AVG(salary)
FROM employees
GROUP BY job_id;
SELECT job_id ,COUNT(job_id)
FROM employees
GROUP BY job_id;
#SELECT(MAX(salary)-MIN(salary))
#AS salary FROM employees
SELECT MAX(salary),MIN(salary),MAX(salary)-MIN(salary)
FROM employees;
SELECT department_id ,MIN(salary)
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY employee_id
HAVING MIN(salary)>=6000;
SELECT department_name,location_id,COUNT(*),AVG(salary)
FROM employees e RIGHT JOIN departments d
ON e.department_id=d.department_id
GROUP BY department_name,location_id
ORDER BY AVG(salary) DESC;
SELECT employee_id,salary,department_name,location_id
FROM employees e RIGHT JOIN departments d
ON e.department_id=d.department_id;
#子查询
#需求:谁的工资比Abel的高?
#方式1:
SELECT salary
FROM employees
WHERE last_name='Abel';
SELECT last_name,salary
FROM employees
WHERE salary>11000;
#方式2:自连接
SELECT e2.last_name,e2.salary
FROM employees e1,employees e2
WHERE e2.salary>e1.salary #多表连接条件
AND e1.last_name='Abel';
#方式3:子查询
SELECT last_name,salary
FROM employees
WHERE salary> (
SELECT salary
FROM employees
WHERE last_name='Abel'
);
#称谓的规范:外查询(或主查询)、内查询(或子查询)
/*
子查询(内查询)在主查询之前一次执行完成
子查询的结果被主查询(外查询)使用
注意事项
子查询要包含在括号内
将子查询放在比较条件的右侧
单行操作符对应单行子查询,多行操作符对应多行子查询
*/
SELECT last_name,salary
FROM employees
WHERE (
SELECT salary
FROM employees
WHERE last_name='Abel'
)
/*
子查询的分类
角度1:从内查询返回的结果条目数
单行子查询 vs 多行子查询(工资大于6000的姓名)
角度2:内查询是否被执行多次
相关子查询 vs 不相关子查询
比如
相关子查询的需求:查询工资大于本部门平均的员工信息
不相关子查询的需求:查询工资大于本公司平均工资的员工信息
*/