美文网首页
牛客网SQL实战练习——1~5

牛客网SQL实战练习——1~5

作者: 西红柿炒番茄007 | 来源:发表于2020-03-11 11:15 被阅读0次

    牛客网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
    

    欢迎关注微信公众号:蛋炒番茄
    同步更新!!!

    相关文章

      网友评论

          本文标题:牛客网SQL实战练习——1~5

          本文链接:https://www.haomeiwen.com/subject/hprqjhtx.html