第一章.选择与过滤练习
# 1.查询工资大于12000的员工姓名和工资SELECT last_name,salaryFROM employeesWHERE salary>12000;# 2.查询员工号为176的员工的姓名和部门号SELECT last_name,department_idFROM employeesWHERE employee_id=176;# 3.选择工资不在5000到12000的员工的姓名和工资SELECT last_name,salaryFROM employeesWHERE salary NOT BETWEEN 5000 AND 12000;# 4.选择在20或50号部门工作的员工姓名和部门号SELECT last_name,department_idFROM employeesWHERE department_id IN (20,50);#department_id=20 or department_id=50# 5.选择公司中没有管理者的员工姓名及job_idSELECT last_name,job_idFROM employeesWHERE manager_id IS NULL;#6.选择公司中有奖金的员工姓名,工资和奖金SELECT last_name,salary,commission_pctFROM employeesWHERE commission_pct IS NOT NULL;# 7.选择员工姓名的第三个字母是a的员工姓名SELECT last_nameFROM employeesWHERE last_name LIKE '__a%';# 8.选择姓名中有字母a和e的员工姓名SELECT last_nameFROM employees#where last_name like '%a%e%' or last_name like '%e%a%';WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
第二章.多表查询练习
# 1.显示所有员工的姓名,部门号和部门名称。SELECT e.`first_name`,e.`department_id`,d.`department_name`FROM employees e LEFT JOIN departments dON e.`department_id`=d.`department_id`;# 2.查询90号部门员工的job_id和90号部门的location_idSELECT e.`department_id`,e.`job_id`,d.`location_id`FROM employees e JOIN departments dON e.`department_id` = d.`department_id`WHERE e.`department_id`=90;# 3.选择所有有奖金的员工的 last_name , department_name , location_id , citySELECT e.`commission_pct`,e.`last_name`,d.`department_name`,d.`location_id`,l.`city`FROM employees e JOIN departments dON e.`department_id`=d.`department_id`JOIN locations lON d.`location_id`=l.`location_id`WHERE e.`commission_pct` IS NOT NULL;# 4.选择city在Toronto工作的员工的 last_name , job_id , #department_id , department_name SELECT e.`last_name`,e.`job_id`,e.`department_id`,d.`department_name`,l.`city`FROM employees e JOIN departments dON e.`department_id`=d.`department_id`JOIN locations lON d.`location_id`=l.`location_id`WHERE l.`city`='Toronto';# 5.选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,#结果类似于下面的格式employees Emp# manager Mgr#kochhar 101 king 100SELECT e1.first_name "employees",e1.employee_id "Emp#", e2.first_name "manager",e2.employee_id "Mgr#"FROM employees e1 JOIN employees e2ON e1.manager_id=e2.employee_id;
第三章.单行函数练习
# 1.显示系统时间(注:日期+时间)SELECT NOW();# 2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)SELECT employee_id,first_name,salary,salary*1.2 "new salary"FROM employees;# 3.将员工的姓名按首字母排序,并写出姓名的长度(length)SELECT first_name,LENGTH(first_name)FROM employeesORDER BY first_name;-- 4.做一个查询,产生下面的结果-- <last_name> earns <salary> monthly but wants <salary*3> Dream Salary-- King earns 24000 monthly but wants 72000SELECT CONCAT(last_name," earns ",TRUNCATE(salary,0)," monthly but wants ", TRUNCATE(salary*3,0))FROM employees;-- 5. 使用case-when,按照下面的条件:-- job grade-- AD_PRES A-- ST_MAN B-- IT_PROG C-- SA_REP D-- ST_CLERK E-- 产生下面的结果-- Last_name Job_id Grade-- king AD_PRES ASELECT last_name,job_id,CASE job_id WHEN 'AD_PRES' THEN 'A' WHEN 'ST_MAN' THEN 'B' WHEN 'IT_PROG' THEN 'C' WHEN 'SA_REP' THEN 'D' WHEN 'ST_CLERK' THEN 'E' END AS "GRADE"FROM employees;
第四章.分组函数练习
#1.where子句可否使用组函数进行过滤? 不能#2.查询公司员工工资的最大值,最小值,平均值,总和SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary)FROM employees;#3.查询各job_id的员工工资的最大值,最小值,平均值,总和SELECT job_id,MAX(salary),MIN(salary),AVG(salary),SUM(salary)FROM employeesGROUP BY job_id;#4.选择具有各个job_id的员工人数SELECT job_id,COUNT(job_id)FROM employeesGROUP BY job_id;# 5.查询员工最高工资和最低工资的差距(DIFFERENCE)SELECT MAX(salary)-MIN(salary) AS "DIFFERENCE"FROM employees;# 6.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,# 没有管理者的员工不计算在内SELECT manager_id,MIN(salary)FROM employeesWHERE manager_id IS NOT NULLGROUP BY manager_idHAVING MIN(salary)>=6000;# 7.查询所有部门的名字,location_id,员工数量和工资平均值SELECT d.`department_name`,d.`location_id`, COUNT(e.`employee_id`),AVG(e.`salary`)FROM employees e JOIN departments dON e.`department_id`=d.`department_id`GROUP BY d.`department_name`,d.`location_id`;
第五章.子查询练习
# 1.查询和Zlotkey相同部门的员工姓名和工资SELECT department_id,first_name,salaryFROM employeesWHERE department_id=( SELECT department_id FROM employees WHERE last_name='Zlotkey');# 2.查询工资比公司平均工资高的员工的员工号,姓名和工资。SELECT employee_id,first_name,salaryFROM employeesWHERE salary > ( SELECT AVG(salary) FROM employees);#3*.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资SELECT e.`employee_id`,e.`first_name`,e.`salary`FROM employees e JOIN ( SELECT department_id,AVG(salary) a_s FROM employees GROUP BY department_id) aON e.`department_id`=a.department_id AND e.`salary`>a.a_s;#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名SELECT employee_id,first_nameFROM employeesWHERE department_id IN ( SELECT department_id FROM employees WHERE first_name LIKE '%u%')# 5.查询在部门的location_id为1700的部门工作的员工的员工号SELECT employee_idFROM employeesWHERE department_id IN ( SELECT department_id FROM employees WHERE location_id=1700);# 6.查询管理者是King的员工姓名和工资SELECT first_name,salaryFROM employeesWHERE manager_id IN ( SELECT employee_id FROM employees WHERE last_name='King');# 7. 查询工资最低的员工信息: last_name, salarySELECT last_name, salaryFROM employeesWHERE salary =( SELECT MIN(salary) FROM employees );