数据库操作练习1

来源:互联网 发布:网络推手阿建推网红 编辑:程序博客网 时间:2024/04/30 09:31

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

题目描述

查找最晚入职员工的所有信息
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`));

输入描述:

输出描述:

emp_nobirth_datefirst_namelast_namegenderhire_date100081958-02-19SaniyaKalloufiM1994-09-15 
Sql1:

select * from employees order by hire_date desc limit 1;

LIMIT m,n : 表示从第m+1条开始,取n条数据;
LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写。
本题limit 0,1 表示从第(0+1)条数据开始,取一条数据,即取出最晚入职员工。

Sql2:

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

上述查询为子查询,先找出 hire_date 字段的最大值,再把该值当成  employees 表的 hire_date 查询条件。 从employees中选出最大的值

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

题目描述

查找入职员工时间排名倒数第三的员工所有信息
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`));

输入描述:

输出描述:

emp_nobirth_datefirst_namelast_namegenderhire_date100051955-01-21KyoichiMaliniakM1989-09-12

Sql1:

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

Sql2:

网友说可能有多个,而且要去重于是:

select * from employees where hire_date=(select distinct hire_date from employees order by hire_date desc limit 2,1);

Sql3:

先取倒数第三个,然后排序(升序)取第一个

select * from (select * from employees order by hire_date desc limit 3) order
by hire_date asc limit 1;

3. 查找各个部门当前领导当前薪水详情以及其对应部门编号dept_no

题目描述

查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_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`));

输入描述:

输出描述:

emp_nosalaryfrom_dateto_datedept_no10002725272001-08-029999-01-01d00110004740572001-11-279999-01-01d00410005946922001-09-099999-01-01d00310006433112001-08-029999-01-01d00210010944092001-11-239999-01-01d006
select salaries.emp_no, salaries.salary, salaries.from_date, salaries.to_date, dept_manager.dept_nofrom salaries inner join dept_manager on dept_manager.emp_no=salaries.emp_no where salaries.to_date='9999-01-01'and dept_manager.to_date='9999-01-01'