SQL

前言:内连接只返回满足连接条件的数据行,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。外连接分为左外连接、右外链接、全外连接三种。

 

1、查询最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里,员工的入职日期都不是同一天

select * from employees where hire_date=(
select max(hire_date) from employees
);

2、查询入职员工时间排名第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天。

select * from employees
order by hire_date desc
limit 2,1

注:limit接受两个整数参数a b,a表示从a+1行开始去,b表示需要取的行数

3、查找在当前时刻(to_date=‘9999-01-01’),各个部门的经理的薪水详情以及其对应部门编号dept_no。(题目隐含要求:最后输出的emp_no是按照从小到大的顺序排列的)

select a.* , b.dept_no
from salaries a
join dept_manager b on a.emp_no = b.emp_no
where b.to_date='9999-01-01' and a.to_date='9999-01-01'
order by a.emp_no asc

4、查找所有已经分配部门的员工的last_name,first_name以及dept_no

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

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

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

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

select emp_no,salary
from salaries
group by emp_no having salary <= min(salary)
order by emp_no desc;

7、查找薪水变动次数超过15次的员工号以及变动的次数t

select emp_no,count(from_date) as t
from salaries
group by emp_no -- 聚合函数,得用having
having count(from_date) > 15

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

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

9、获取所有非manager的员工的emp_no

select a.emp_no
from employees a left join dept_manager b on a.emp_no=b.emp_no
where b.emp_no is NULL

10、获取所有员工当前的(dept_manager.to_date='9999-01-01')emp_no,如果员工就是manager的话,不显示,输出当前员工的emp_no和manager的emp_no。

select a.emp_no,b.emp_no as manager_no
from dept_emp a join dept_manager b on a.dept_no=b.dept_no
where a.to_date='9999-01-01' and b.to_date='9999-01-01' and a.emp_no <> b.emp_no

12、获取所有部门中当前(dept_emp.to_date='9999-01-01')员工当前(salaries.to_date='9999-01-01')薪水最高的相关信息,给出dept_no,emp_no以及对应的salary,按部门升序。

select a.dept_no,a.emp_no,max(b.salary)
from dept_emp a inner join salaries b on a.emp_no=b.emp_no
where a.to_date = '9999-01-01' and b.to_date='9999-01-01' -- 不是聚合函数,可以用where
group by a.dept_no

13、从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。

 select title,count(title) as t
from titles
group by title
having t >= 2

14、从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。注意对于重复的emp_no进行忽略(即emp_no重复的title不计算,title对应的数目t不增加)。

 select title,count(distinct emp_no) as t
from titles
group by title

15、查找employees表所有emp_no为奇数,且last_name不为Mary(注意大小写)的员工信息,并按照hire_date逆序排列(题目不能使用mod函数)

 select *
from employees
where last_name <> 'Mary' and emp_no%2=1
order by hire_date desc;


 

posted @ 2020-10-12 16:49  小吴的日常  阅读(102)  评论(0)    收藏  举报