1. 程式人生 > >資料庫操作練習1

資料庫操作練習1

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_date
100081958-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_date
100051955-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_no
10002725272001-08-029999-01-01d001
10004740572001-11-279999-01-01d004
10005946922001-09-099999-01-01d003
10006433112001-08-029999-01-01d002
10010944092001-11-239999-01-01d006
select salaries.emp_no, salaries.salary, salaries.from_date, salaries.to_date, dept_manager.dept_no
from 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'