1.  查找最晚入职员工的所有信息

CREATE TABLE `employees` (
`emp_no` int() NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar() NOT NULL,
`last_name` varchar() NOT NULL,
`gender` char() NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

解答:limit 的使用,

通常 limit offset,rows

一般是用于select语句中用以从结果集中拿出特定的一部分数据。

offset是偏移量,表示我们现在需要的数据是跳过多少行数据之后的,可以忽略;rows表示我们现在要拿多少行数据。默认是0。

select * from employees order by hire_date desc limit 

注释:limit 的使用

2.  查找入职员工时间排名倒数第三的员工所有信息

CREATE TABLE `employees` (
`emp_no` int() NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar() NOT NULL,
`last_name` varchar() NOT NULL,
`gender` char() NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

解答:同上limit 的使用,倒数第三就是跳2条数据。

select * from employees order by hire_date desc limit ,

3.  查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no

CREATE TABLE `dept_manager` (
`dept_no` char() NOT NULL,
`emp_no` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int() NOT NULL,
`salary` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

解答:坑点有薪水详情,并不是只有薪水值,剩余的就是利用where连接两个表。

select salaries.* ,dept_manager.dept_no from salaries,dept_manager
where dept_manager.to_date='9999-01-01'
and salaries.to_date='9999-01-01'
and salaries.emp_no = dept_manager.emp_no

4.  查找所有已经分配部门的员工的last_name和first_name

CREATE TABLE `dept_emp` (
`emp_no` int() NOT NULL,
`dept_no` char() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int() NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar() NOT NULL,
`last_name` varchar() NOT NULL,
`gender` char() NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

解答:两个表连接,其中右边表值为NULL的元组不显示

select employees.last_name,employees.first_name,dept_emp.dept_no
from employees inner join dept_emp
on employees.emp_no=dept_emp.emp_no

5.  查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工

CREATE TABLE `dept_emp` (
`emp_no` int() NOT NULL,
`dept_no` char() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int() NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar() NOT NULL,
`last_name` varchar() NOT NULL,
`gender` char() NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

解答:两个表连接,左边的表的数据全部显示即使右边表有值为NULL,需要用到外连接。有几种表连接的方式,

inner join 两边表同时有对应的数据,即任何一边缺失数据就不显示。
left join 会读取左边数据表的全部数据,即便右边表无对应数据。
right join 会读取右边数据表的全部数据,即便左边表无对应数据。

加一个on 和 where 用法的问题,有人说join为什么不用where在后面加选择条件

因为where会直接对于生成好的临时表进行过滤的。这时已经没有left  join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

select employees.last_name,employees.first_name,dept_emp.dept_no
from employees left join dept_emp on dept_emp.emp_no=employees.emp_no;

6.  查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序

CREATE TABLE `employees` (
`emp_no` int() NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar() NOT NULL,
`last_name` varchar() NOT NULL,
`gender` char() NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
CREATE TABLE `salaries` (
`emp_no` int() NOT NULL,
`salary` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

解答:入职的情况为  employees.hire_date = salaries.from_date,然后就是逆序函数order by的使用。

select employees.emp_no, salaries.salary
from employees, salaries
where employees.emp_no = salaries.emp_no
and employees.hire_date = salaries.from_date
order by employees.emp_no desc

7.  查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t

CREATE TABLE `salaries` (
`emp_no` int() NOT NULL,
`salary` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

解答:首先看题知道输出的涨幅次数为t,所以要用as语句将count(emp_no)的值转换为t,由于count()函数不可用于where语句中,故使用having语句来限定t>15的条件

select emp_no,count(emp_no) as t from salaries
group by emp_no
having t>=

8.  找出所有员工当前(to_date='9999-01-01')具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示

CREATE TABLE `salaries` (
`emp_no` int() NOT NULL,
`salary` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

解答:使用了distinct 去重。

select distinct salary from salaries where to_date='9999-01-01' order by salary desc

9.  获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'

CREATE TABLE `dept_manager` (
`dept_no` char() NOT NULL,
`emp_no` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int() NOT NULL,
`salary` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

解答:两个表连接选择选择直接where选择就行了。

select dept_manager.dept_no, dept_manager.emp_no, salaries.salary from salaries,dept_manager
where dept_manager.emp_no = salaries.emp_no
and salaries.to_date = '9999-01-01'
and dept_manager.to_date = '9999-01-01'

10.  获取所有非manager的员工emp_no

CREATE TABLE `dept_manager` (
`dept_no` char() NOT NULL,
`emp_no` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int() NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar() NOT NULL,
`last_name` varchar() NOT NULL,
`gender` char() NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

解答:选择那些emp_no不在dept_manager中出现的就是员工

select emp_no from employees
where emp_no not in (select emp_no from dept_manager);

11.  获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'。结果第一列给出当前员工的emp_no,第二列给出其manager对应的manager_no。

CREATE TABLE `dept_emp` (
`emp_no` int() NOT NULL,
`dept_no` char() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char() NOT NULL,
`emp_no` int() NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

解答:

select dept_emp.emp_no,dept_manager.emp_no as manager_no
from dept_emp ,dept_manager
where dept_emp.emp_no != dept_manager.emp_no
and dept_emp.dept_no = dept_manager.dept_no
and dept_emp.to_date='9999-01-01'
and dept_manager.to_date='9999-01-01'

牛客网数据库SQL实战 1-11的更多相关文章

  1. 牛客网数据库SQL实战解析(11-20题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  2. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  3. 牛客网数据库SQL实战解析(41-50题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  4. 牛客网数据库SQL实战解析(31-40题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  5. 牛客网数据库SQL实战解析(21-30题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  6. 牛客网数据库SQL实战解析(1-10题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  7. 牛客网数据库SQL实战(21-25)

    21.查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序CREATE TABLE `employees` (`emp_no` i ...

  8. 牛客网数据库SQL实战(16-20)

    16.统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg.CREATE TABLE `salaries` (`emp_no` int(11) NOT N ...

  9. 牛客网数据库SQL实战(11-15)

    11.获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'.结果第一列给出当前员工的emp_no,第二列给出其manager ...

  10. 牛客网数据库SQL实战(6-10)

    6.查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT NULL ...

随机推荐

  1. J20170507-ts

    プロンプト n. 提示 オブジェクト n. 对象 アスタリスク *  アンパサンド      & スラッシュ       / イテレータ    n 迭代器 差し詰め 当前 スペル spell ...

  2. c++常见面试题30道

    1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数.malloc与free是C++/C语言的标准库函数,new ...

  3. Centos 配置 Mysql 主从双向同步

    配置之前,请先阅读mysql主从复制: Mysql-主从复制 原:  主从环境: 主服务器:192.168.153.130 从服务器:192.168.153.131 1.从数据库创建同步用户,将主数据 ...

  4. WOJ1019 所有的M数

    题目链接: WOJ1019 题目分析: 单调栈维护,读一个进来,如果前面的比它大就弹出来,然后压栈里(反正它在最右边) 压进栈里输出它前面那个数就好了 O(n)扫一遍就能过 真的水得不能再水的题了-- ...

  5. IOS-关闭(退)键盘事件--转

    方法: 1.手势(触背景)关闭键盘 -(void)tapBackground //在ViewDidLoad中调用{    UITapGestureRecognizer * tap = [[UITapG ...

  6. python中函数参数

    默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]):                    #默认参数时列 ...

  7. 用NPOI从Excel到DataTable

    NPOI功能强大,不用装Excel,就可以操作表格中数据----Excel.Sheet------>DataTable private IWorkbook workbook = null; pr ...

  8. new几种用法

    在 C# 中,new 关键字可用作运算符.修饰符或约束. new 运算符 用于创建对象和调用构造函数. new 修饰符 用于向基类成员隐藏继承成员. new 约束 用于在泛型声明中约束可能用作类型参数 ...

  9. 外文翻译 《How we decide》多巴胺的预言 第三节

    这是第二章的最后一节. 书的导言 本章第一节 本章第二节 本节阅读感言:自我批评是自我提升的妙方. 多巴胺是我们感情的源泉.多巴胺相关的神经系统在不断的记录着我们主观意识没有注意到的一个个模式,将它们 ...

  10. python绘图工具包 matplotlib 中文乱码问题

    环境: python2.7 windows 8.1 解决: 改配置文件,把字体改为支持中文的字体. 找到python安装目录下的 \Lib\site-packages\matplotlib\mpl-d ...