牛客网SQL实战练习——1~5
声明:练习牛客网SQL实战题目,整理笔记。
1.查找最晚入职员工的所有信息
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
分析:查找最晚入职员工的所有信息,就是入职时间hire_date的值最大。故选取hire_date的值最大的员工的所有信息即可。
答案:
select * from employees
where hire_date =
(select max(hire_date) from employees)
2.查找入职员工时间排名倒数第三的员工所有信息
分析:这里我们使用到了limit函数,具体用法为:limit后的第一个参数是输出记录的初始位置,第二个参数偏移量,偏移多少,输出的条目就是多少。
答案:
select *
from employees
order by hire_date DESC LIMIT 2,1
3.查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号
dept_no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
分析:本题涉及两个表格,salaries与dept_manager。两个表中具有相同的匹配值emp_no,内部链接INNER JOIN关键字选择两个表中具有匹配值的记录。
答案:
select s.*,d.dept_no
from salaries as s inner join dept_manager as d
on s.emp_no=d.emp_no
where s.to_date='9999-01-01' and d.to_date='9999-01-01'
4.查找所有已经分配部门的员工的last_name和first_name以及dept_no
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
分析:本题思路同题3,同样使用内连接inner join
答案:
select e.last_name,e.first_name,d.dept_no
from dept_emp as d inner join employees as e
where e.emp_no=d.emp_no
5.查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工(问题代码同题4)
分析:本题同样涉及两个表格enployees和dept_emp.要求查找所有员工的last_name和first_name以及对应部门编号dept_no,即employees表中的所有员工都要查找,employees在左边,故采用左连接left join on
答案:
select e.last_name,e.first_name,d.dept_no
from employees as e
left join dept_emp as d
on e.emp_no=d.emp_no
欢迎关注微信公众号:蛋炒番茄
同步更新!!!