博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【360天】我爱刷题系列119(2018.01.31)
阅读量:7124 次
发布时间:2019-06-28

本文共 1419 字,大约阅读时间需要 4 分钟。

叨叨两句

  1. ~

SQL习题014

1

题目描述

查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_noy以及其对应的薪水涨幅growth,并按照growth进行升序
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));
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));

本题思路是先分别用两次LEFT JOIN左连接employees与salaries,建立两张表,分别存放员工当前工资(sCurrent)与员工入职时的工资(sStart),再用INNER JOIN连接sCurrent与sStart,最后限定在同一员工下用当前工资减去入职工资。方法一:内层用LEFT JOIN,外层用INNER JOIN(内层也可以改用 INNER JOIN)SELECT sCurrent.emp_no, (sCurrent.salary-sStart.salary) AS growthFROM (SELECT s.emp_no, s.salary FROM employees e LEFT JOIN salaries s ON e.emp_no = s.emp_no WHERE s.to_date = '9999-01-01') AS sCurrentINNER JOIN (SELECT s.emp_no, s.salary FROM employees e LEFT JOIN salaries s ON e.emp_no = s.emp_no WHERE s.from_date = e.hire_date) AS sStartON sCurrent.emp_no = sStart.emp_noORDER BY growth方法二:内外都层用FROM并列查询SELECT sCurrent.emp_no, (sCurrent.salary-sStart.salary) AS growthFROM (SELECT s.emp_no, s.salary FROM employees e, salaries s WHERE e.emp_no = s.emp_no AND s.to_date = '9999-01-01') AS sCurrent,(SELECT s.emp_no, s.salary FROM employees e, salaries s WHERE e.emp_no = s.emp_no AND s.from_date = e.hire_date) AS sStartWHERE sCurrent.emp_no = sStart.emp_noORDER BY growth

转载地址:http://kveel.baihongyu.com/

你可能感兴趣的文章
Java通过NIO实现快速文件拷贝的代码
查看>>
怎么样启用红米手机5的ROOT权限
查看>>
Hdoop日记Day10---RPC机制
查看>>
基于.NET的WebSocket实例:在线聊天室
查看>>
jdk8u144安装在centos7上
查看>>
每个java初学者都应该搞懂的问题
查看>>
集合Set、List、Map的遍历方法
查看>>
2017《JAVA技术》预备作业
查看>>
使用qmake生成Makefile
查看>>
博客首写
查看>>
jQuery Ajax使用实例
查看>>
TeamViewer远程唤醒主机实战教程(多图)
查看>>
IntelliJ IDEA 配置Tomcat 运行Web项目
查看>>
装饰器实现用户验证登录
查看>>
【转】验证码绕过
查看>>
文件夹无法删除,提示:该项目不在******,请确认该项目的位置,然后重试。...
查看>>
第三期 行为规划——14.计划计算时间
查看>>
Linux Chromium安装Adobe Flash Player
查看>>
java 判断两个时间段是否有交集
查看>>
LeetCode: 56. Merge Intervals(Medium)
查看>>