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
));
代码:
select *
from employees
where hire_date=
(
select max(hire_date) from employees
);
个人认为最晚入职日期当天可能不止一人,上面代码更加好。
当然也有人用:
select * from employees order by hire_date desc limit 1;
limit用法:
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset;
-
LIMIT设置两个参数时候,前一个参数表示偏移,后一个表示最多查出的数据条数。
-
默认偏移量为0,以下代码等价:
SELECT * FROM table LIMIT 10; SELECT * FROM table LIMIT 0,10;
-
SELECT * FROM table LIMIT 0,-1;
-1表示数据库表最后一行,这条语句可以查询全部数据行。
2.查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序
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
));
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
));
select s.emp_no,s.salary
from salaries as s
order by emp_no desc;
上述代码显示没有通过所有测试用例,我再一仔细读题,发现“入职” 二字,要找的是入职时的薪水,因为员工工资是有涨幅的。!!!!!满满的都是坑啊。
正确代码:
select s.emp_no,s.salary
from salaries as s
group by s.emp_no having min(from_date)
order by emp_no desc;