题目参考牛客网
1.查找入职员工时间排名倒数第三的员工所有信息
题目:employees表
示例
-
desc用法
(1)查看表结构的详细信息:desc table_name;
(2)降序排列数据:order by information desc
升序排列数据:order by information asc
-
distinct:对表中一个或者多个字段重复的数据进行过滤,只在select中使用
select distinct expression...
-
limit (搜索表结构中的某些部分的数据)
limit 0,10 等价于 limit 10
:从头开始取表中的前10条信息
limit 5,10 等价于 limit 10 offset 5
:检索表中第6~15行数据 -
题解:
法1:
select * from employees
where hire_date = (
select distinct hire_date
from employees
order by hire_date desc
limit 2,1 );
法2:
select * from employees
where hire_date = (
select distinct hire_date
from employees
order by hire_date desc
limit 1 offset 2);
2.查找各个部门领导薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列
题目:salaries表:
有一个各个部门的领导表dept_managr:
示例
- 题解:
select salaries.emp_no,salaries.salary,salaries.from_date,salaries.to_date,dept_manager.dept_no
from salaries,dept_manager
where salaries.emp_no = dept_manager.emp_no
and salaries.to_date='9999-01-01'
and dept_manager.to_date='9999-01-01'
order by salaries.emp_no
3.查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t
题目:salaries表:示例:
-
group by :根据给定数据列的每个成员对查询结果进行分组统计
(1)分组查询可以在形成组和计算列函数之前具有消除非限定行的标准where子句。必须在GROUP BY子句之前指定WHERE子句
(2)GROUP BY子句之后使用Having子句
(3)WHERE过滤行,HAVING过滤组 -
题解:
select emp_no,count(emp_no) as t
from salaries
group by emp_no
having t>15
4.获取所有的员工和员工对应的经理,如果员工本身是经理的话则不显示
题目:有一个员工表dept_emp简况如下:
有一个部门经理表dept_manager简况如下:
示例:
-
内连接:inner join 【返回table_1和table_2的交集】
select * from table_1 inner join table_2 on table_1.id = table_2.id;
-
左连接:left join【返回table_1中所有记录和table_2中满足条件的记录,且table_1中有记录但table_2中没有的记录记为NULL】
select * from table_1 left join table_2 on table_1.id = table_2.id;
-
右连接:right join【返回table_2中所有记录和table_1中满足条件的记录,且table_2中有记录但table_1中没有的记录记为NULL】
select * from table_1 right join table_2 on table_1.id = table_2.id;
-
题解:
select dept_emp.emp_no,dept_manager.emp_no as manager
from dept_emp inner join dept_manager
on dept_emp.dept_no=dept_manager.dept_no
and dept_emp.emp_no != dept_manager.emp_no;