今天sql练习遇到的问题

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
发布了71 篇原创文章 · 获赞 14 · 访问量 5613

猜你喜欢

转载自blog.csdn.net/flying_hengfei/article/details/102810325