牛客网数据库SQL实战 1-11
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的更多相关文章
- 牛客网数据库SQL实战解析(11-20题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(51-61题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(41-50题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(31-40题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(21-30题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(1-10题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战(21-25)
21.查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序CREATE TABLE `employees` (`emp_no` i ...
- 牛客网数据库SQL实战(16-20)
16.统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg.CREATE TABLE `salaries` (`emp_no` int(11) NOT N ...
- 牛客网数据库SQL实战(11-15)
11.获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'.结果第一列给出当前员工的emp_no,第二列给出其manager ...
- 牛客网数据库SQL实战(6-10)
6.查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT NULL ...
随机推荐
- hdoj4027【线段树】
题意: 给你一个序列,然后给出m个命令, 每个命令有两种:①:在区间内实现开方:②:求一个区间和: 思路: 一开始没思路啊,这个开方又不像加加减减一起来就好了,开方只能自己玩啊,但是仔细一想一个数也才 ...
- 2016 Multi-University Training Contest 1Abandoned country
qaq,现在内心真是各种草泥马.怪自己见识短浅...哎... 题意: 给你一幅图,然后求一个最小花费使得所有的点都连通(这就是最小生成树啊),然后在这棵树上[如果我要从任意起点到任意终点,这两个点不同 ...
- js的NaN变量
js中,我们经常在parseInt函数的时候遇到NaN变量,这个变量到底是什么呢? w3c上这样解释: NaN 属性是代表非数字值的特殊值.该属性用于指示某个值不是数字.可以把 Number 对象设置 ...
- IT兄弟连 JavaWeb教程 经典案例3
案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则重定向到main.html,否则重定向到login.html. 案例实 ...
- 第十篇 .NET高级技术之委托
委托是一种可以指向方法的数据类型,可以声明委托类型变量. 声明委托的方式:delegate返回值类型 委托类型名(参数) 比如delegate void MyDel(int n) 注意这里的除了前 ...
- Ubuntu 18.04 LTS 安装后 各种问题以及解决方案
1. root的初始密码,默认是不知道的,需要进行设置 a. 进入终端自己的用户 b. 输入 sudo passwd回车 c. 输入新密码,回车,重复,回车,搞定 d. su 一下,就可以了 2. ...
- SPRING-BOOT系列之简介
来自:51CTO的学习视频,本博客作为一个知识点记录以及代码验证 spring boot 特点 1. 为基于spring的开发提供更快的入门体验 2. 创建可以独立运行的spring应用 3. 直接嵌 ...
- HDU 1221 Rectangle and Circle 考虑很多情况,good题
http://acm.hdu.edu.cn/showproblem.php?pid=1221 114 92 31 95 13 96 3 这题只需要判断圆和矩形是否相交,然后在里面是不算相交的. 那么就 ...
- CentOS 7.2安装pip
CentOS 7.2默认安装的python版本为python2.7.5,我的系统里面默认是没有安装pip 的,搜了下网上各路大侠的解决办法,如下: 使用yum安装python-pip,但是报错,说没有 ...
- SOLRJ单机-添加文档,删除,查询操作
单机solrJ不需要占用太多的服务器和资源,本机使用solr-6.3.0,也不需要配置tomcat. 一.新建一个java工程需要依赖的jar包如下: solr-solrj-6.3.0.jar; c ...