暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MYSQL之牛客网实战笔试题(三)

奈奈八尾 2021-04-19
253

本次更新的内容为中级题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)


文章转载自奈奈八尾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论