难度:中等
获取所有员工当前的(dept_manager.to_date=‘9999-01-01’)manager,如果员工是manager的话不显示(也就是如果当前的manager是自己的话结果不显示)。输出结果第一列给出当前员工的emp_no,第二列给出其manager对应的emp_no。
CREATE TABLEdept_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 TABLEdept_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
));
select e.emp_no, m.emp_no
from dept_emp as e left join dept_manager as m
on e.dept_no=m.dept_no
where m.to_date='9999-01-01'
and e.emp_no <> m.emp_no;
这题难度不大,简单的两表关联,加上where的两个筛选条件。
难度:中等
获取所有部门中当前(dept_emp.to_date = ‘9999-01-01’)员工当前(salaries.to_date=‘9999-01-01’)薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary
CREATE TABLEdept_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 TABLEsalaries
(
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 dept_no, d.emp_no, max(salary) as salary
from dept_emp as d join salaries as s
on d.emp_no = s.emp_no
where d.to_date = '9999-01-01'
and s.to_date='9999-01-01'
group by dept_no;
这题难度也不大,多表关联+group by语句就可以轻松通过了。
难度:较难
获取select * from employees对应的执行计划
explain select * from employees;
这题我是真的学到了,在SQLite数据库中,可以用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表的细节。
难度:较难
将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
(注:该数据库系统是sqllite,字符串拼接为 || 符号,不支持concat函数)
CREATE TABLEemployees
(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 (last_name || ' ' || first_name) as Name
from employees;
由于本题的环境是sqllite,不支持concat函数,而支持||,||的用法很简单,相当于python里字符拼接的+,另外提供一下mysql语句中该题的答案:
select concat(last_name, ' ', first_name) as Name
from employees
难度:较难
创建一个actor表,包含如下列信息(注:sqlite获取系统默认时间是datetime(‘now’,‘localtime’))
create table actor(
actor_id smallint(5) not null primary key,
first_name varchar(45) not null,
last_name varchar(45) not null,
last_update timestamp not null default (datetime('now','localtime'))
);
本题就是创建一个表,难度也很小,注意的就是设置actor_id字段为primary key以及设置last_update的default值