牛客网SQL实战练习(1)
来源:互联网 发布:工作照软件 编辑:程序博客网 时间:2024/05/20 23:02
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
));
解析:这个题很简单,关键是对入职时间做以逆序(desc)排序而后选出第一条信息
select * from employees order by hire_date desc limit 1
或者判断入职时间是employees中hire_date最大的
select * from employees where hire_date =(select max(hire_date) from 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
));
解析:这个题可以以入职时间做以逆序(desc)排序而后选出第一条信息
select * from employeesorder by hire_date desc limit 2,1
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
));
解析:两个表连接加上对两个表的to_date进行限制,其中连接表可以用left join连接,或者基本的逗号连接都可
select salaries.*,dept_manager.dept_no from salaries, dept_managerwhere salaries.emp_no = dept_manager.emp_noand salaries.to_date = "9999-01-01"and dept_manager.to_date = "9999-01-01";
select salaries.*,dept_manager.dept_nofrom salaries left join dept_manager on (salaries.emp_no=dept_manager.emp_no)where dept_manager.to_date='9999-01-01' and salaries.to_date='9999-01-01'
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 b.last_name,b.first_name,a.dept_no from dept_emp a,employees b where a.emp_no=b.emp_no
其中连结表时可以用inner join
select employees.last_name, first_name, dept_emp.dept_no from dept_emp inner join employees where dept_emp.emp_no = employees.emp_no;
5.查找所有员工的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 employees.last_name,employees.first_name,dept_emp.dept_no from employees left join dept_emp on employees.emp_no=dept_emp.emp_no
总结:前五道题涉及order by,limit,inner join,left join等用法,做这些题时,在基础方法解决时,可以根据w3c中的提供的手册进行尝试改进方法,这样可以更好的掌握SQL语言。
- 牛客网SQL实战练习(1)
- SQL实战练习【1】
- 数据库 SQL实战练习
- sql入门到【实战】练习~
- 数据库SQL实战练习(上)
- Erlang实战练习(一)
- SQL语言 - where语句练习(1)
- 牛客网:数据库sql实战
- SQL基础练习1
- SQL语言练习1
- SQL语句练习1
- oracle sql 练习1
- sql语句练习1
- SQL练习1
- sql上机练习1
- sql练习1
- 框架整合搭建实战练习记录1
- 常用sql语句练习-1
- Arcgis for Android离线数据下载
- 原根
- 51nod 1163 最高的奖励
- java-菱形实现
- 1. 打印100~200 之间的素数 2. 输出乘法口诀表 3. 判断1000年---2000年之间的闰年
- 牛客网SQL实战练习(1)
- RMQ模板
- CentOS使用nmcli配置网络
- Segmentation fault (Core dumped)
- hdu 1387 Team Queue
- superset和kylin搭配查不出数据的处理
- Alien Security (BFS+DFS)
- 【BigHereo 4】-----对MQ的一些思考(四)
- epoll机制