【SQL实战(一)】

写在前面

秋招开始,理想的岗位都要求有SQL能力,所以本系列主要分享一些关于SQL的笔试题目,可能在某些地方看到大同小异的题目其实掌握基础知识,实战就是练习。让SQL成为自带属性。本系列不断更,遇到好的题会实时更新,请持续关注。。。
喜欢可以关注收藏点赞,欢迎私信回答问题。

题目篇

第一题

题目描述
查找最晚入职员工的所有信息,目前所有的数据里员工入职的日期都不是同一天

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);

第二题

题目描述
查找入职员工时间排名倒数第三的员工所有信息,目前所有的数据里员工入职的日期都不是同一天

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

order by hire_date desc limit 2,1;

2:为查询结果的索引值(默认从0开始),当i=0时可省略i
1:为查询结果返回的数量
2与1之间使用英文逗号","隔开

limit 2,1 等价于 limit 3

第三题

题目描述

查找各个部门当前(dept_manager.to_date=‘9999-01-01’)领导当前(salaries.to_date=‘9999-01-01’)薪水详情以及其对应部门编号dept_no(注:请以salaries表为主表进行查询,输出结果以salaries.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`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL, -- '部门编号'
`emp_no` int(11) NOT NULL, --  '员工编号'
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

输出描述

在这里插入图片描述

select s., d.dept_no from dept_manager d, salaries s where
d.emp_no=s.emp_no
and d.to_date=‘9999-01-01’
and s.to_date=‘9999-01-01’
order by emp_no;

第四题

题目描述

查找所有已经分配部门的员工的last_name和first_name以及dept_no(请注意输出描述里各个列的前后顺序)

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 e.last_name, e.first_name, d.dept_no

FROM employees AS e, dept_emp AS d

WHERE e.emp_no = d.emp_no;

第五题

题目描述

查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括暂时没有分配具体部门的员工(请注意输出描述里各个列的前后顺序)

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 e.last_name, e.first_name, d.dept_no

from employees as e

left join dept_emp as d

on e.emp_no = d.emp_no;

【SQL高级(三)】【SQL 连接(JOIN)】中有介绍LEFT JOIN

猜你喜欢

转载自blog.csdn.net/qq_42893334/article/details/107094589