1、下载联系数据集
github下载mysql 测试数据库 employees
https://github.com/datacharmer/test_db
按照说明下载全部文件。
2、导入数据集
参见https://github.com/datacharmer/test_db说明
先创建一个数据库 employees,切换到对应下载文件的目录下,执行以下命令。
命令如示
//mysql -u账号 -p密码 -D数据库名 < sql文件绝对路径
3、练习题
单表查询
(1)查询所有的部门信息
select * from departments;
(2)查询开发部门的部门信息(编号)
select * from departments where dept_name='Development';
(3)查询所有在1988年入职的员工信息,按入职时间从早到晚排序
select * from employees where hire_date BETWEEN '1998-01-01' AND '1998-12-31' ORDER BY hire_date ;
(4)查询所有在1998年入职的信息,按入职时间从早到晚排序,只要当年前10个新入职的员工
select * from employees where hire_date BETWEEN '1998-01-01' AND '1998-12-31' ORDER BY hire_date limit 10 ;
只要第10-15个
select * from employees where hire_date BETWEEN '1998-01-01' AND '1998-12-31' ORDER BY hire_date limit 9,6 ;
(5)查询1998年入职员工的工资信息,按工资从高到低排序,只要当年工资最高的前10个员工信息
select e.emp_no,first_name,last_name,salary from employees e left join salaries s on e.emp_no=s.emp_no where e.hire_date BETWEEN '1998-01-01' AND '1998-12-31' ORDER BY s.salary desc limit 10;
只要第10到20个
select e.emp_no,first_name,last_name,salary from employees e left join salaries s on e.emp_no=s.emp_no where e.hire_date BETWEEN '1998-01-01' AND '1998-12-31' ORDER BY s.salary desc limit 9,11;
(6)公司抽奖,只有员工名称中含有Mary,就中奖了
select * from employees where first_name like '%Mary%' or last_name like '%Mary%';
(7)公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名
select emp_no,first_name,last_name from employees WHERE emp_no in (10025,10223,10252);
(8)公司抽奖,找出工资表中员工编号以23结尾或含有25的员工工号
select DISTINCT(emp_no) from salaries where emp_no like '%23' or emp_no like '%25%';
(9)统计员工入职以来,调薪次数有17次以上的员工编号
select emp_no,count(emp_no) from salaries GROUP BY emp_no HAVING count(emp_no)>17;
(10)统计员工入职以来,调薪次数有17次以上的员工,并且员工编号中包含25的所有员工编号信息
select emp_no,count(emp_no) from salaries GROUP BY emp_no HAVING count(emp_no)>17 and emp_no like '%25%';
(11)查询公司的最高/平均/总和/最低薪资
select max(salary) from salaries;
select min(salary) from salaries;
select avg(salary) from salaries;
select sum(salary) from salaries;
多表查询
(1)查询development部的所有员工信息
select * from dept_emp e left JOIN departments d on e.dept_no=d.dept_no where d.dept_name='Development'
(2)查询development部的工资最高的前10位员工信息
select * from salaries left JOIN dept_emp on dept_emp.emp_no=salaries.emp_no left join departments on departments.dept_no=dept_emp.dept_no where departments.dept_name='Development' ORDER BY salaries.salary desc LIMIT 10;
(3)取出部门历任管理者
select * from departments LEFT JOIN dept_manager on departments.dept_no=dept_manager.dept_no;
(4)计算各个部门的平均工资并排序,给出平均工资、部门名称
select avg(s.salary),dp.dept_name from salaries s left JOIN dept_emp d on s.emp_no=d.emp_no LEFT JOIN departments dp on dp.dept_no=d.dept_no GROUP BY d.dept_no ORDER BY avg(s.salary) DESC;