本次更新的内容为中级题7道,依然以题目+考核知识点+解题代码的内容输出。
话不多说,上题:
#3.查找各个部门领导薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序
考点:left join,inner join
解法一:
SELECT s.*,
d.dept_no
FROM dept_manager d
LEFT JOIN salaries s ON d.emp_no=s.emp_no
ORDER BY s.emp_no;
解法二:
SELECT s.*,
d.dept_no
FROM dept_manager d
INNER JOIN salaries s ON d.emp_no=s.emp_no
ORDER BY s.emp_no;
#5.查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工
考点:left join
SELECT e.last_name,
e.first_name,
d.dept_no
FROM employees e
LEFT JOIN dept_emp d ON e.emp_no=d.emp_no;
#11.获取所有的员工和员工对应的经理,如果员工本身是经理的话则不显示
考点:join,了解笛卡尔积
解法一:
SELECT d1.emp_no,
d2.emp_no as manager
FROM dept_emp d1
INNER JOIN dept_manager d2 ON d1.dept_no=d2.dept_no
WHERE d1.emp_no!=d2.emp_no
解法二:
SELECT d1.emp_no,
d2.emp_no as manager
FROM dept_emp d1,dept_manager d2
WHERE d1.dept_no=d2.dept_no and d1.emp_no!=d2.emp_no
#16.统计出各个title类型对应的员工薪水对应的平均工资avg。结果给出title以及平均工资avg,并且以avg升序排序
考点:join,加上round更好
#此题需要新建表titles,建表和插入数据如下:
drop table if exists titles;
CREATE TABLE titles (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
INSERT INTO titles VALUES(10001,'Senior Engineer','1986-06-26','9999-01-01');
INSERT INTO titles VALUES(10003,'Senior Engineer','2001-12-01','9999-01-01');
INSERT INTO titles VALUES(10004,'Senior Engineer','1995-12-01','9999-01-01');
INSERT INTO titles VALUES(10006,'Senior Engineer','2001-08-02','9999-01-01');
INSERT INTO titles VALUES(10007,'Senior Staff','1996-02-11','9999-01-01');
SELECT t.title,
round (avg(s.salary),2) as avgsalary
FROM titles t
LEFT JOIN salaries s ON t.emp_no=s.emp_no
GROUP BY t.title
ORDER BY avgsalary;
#19.查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工
考点:连接多张表
SELECT e.last_name,
e.first_name,
d2.dept_name
FROM employees e
LEFT JOIN dept_emp d1 ON e.emp_no=d1.emp_no
LEFT JOIN departments d2 ON d1.dept_no=d2.dept_no
#22.统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序
考点:join 的使用
SELECT d1.dept_no,
d1.dept_name,
count(s.salary) as sum
FROM departments d1
INNER JOIN dept_emp d2 ON d1.dept_no=d2.dept_no
INNER JOIN salaries s ON d2.emp_no=s.emp_no
GROUP BY d1.dept_no
ORDER BY d1.dept_no;
#29.使用join查询方式找出没有分类的电影id以及名称(此题需要插入数据,建议登录牛客网)
考点:is null和join联合使用,not in和join联合使用
解法一:
SELECT f.film_id,
f.title
FROM film f
LEFT JOIN film_category fc ON f.film_id=fc.film_id
LEFT JOIN category c ON fc.category_id=c.category_id
WHERE c.name is null;
解法二:
SELECT film_id,
title
FROM film
WHERE film_id not in (SELECT f.film_id
FROM film f
INNER JOIN film_category fc ON f.film_id=fc.film_id
INNER JOIN category c ON fc.category_id=c.category_id)