1. 用sql语句搜索表中某一个字段最大的记录
今天碰到一个这样的问题,一时间没反应上来,自习想想之后将他解决啦
语法:
select * from 表名 where 字段名 in (select max(字段名) from 表名 )
其实就是先将表中的这一字段的最大值查找出来,然后用条件语句,进行查找
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 in(select max(hire_date) from employees )
2.查找入职员工时间排名倒数第三的员工所有信息
select * from employees order by hire_date desc limit 2,1;
--先将员工根据入职时间进行倒序排列,之后运用limit语句 查出第三条记录
“limit start,end” 函数是查询起止位置之间的元素 [start,end)\
下面两个问题有关联接表
3.查找各个部门当前(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`));
实例:
select
a.*,
b.dept_no
from
salaries a,
dept_manager b
where
b.to_date='9999-01-01'
and
a.to_date='9999-01-01'
and
a.emp_no=b.emp_no;
4.查找所有已经分配部门的员工的last_name和first_name和部门编号
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_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`));
实例:
select
a.last_name,
a.first_name,
b.dept_no
from
employees a
inner join
dept_emp b
on
a.emp_no = b.emp_no