如下數據表
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,
emp_no
PRIMARY KEY (,
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
));`
1、查找所有已經分配部門的員工的last_name和first_name
輸出描述
last_name | first_name | dept_no |
---|---|---|
Facello | Georgi | d001 |
省略 | 省略 | 省略 |
select last_name, first_name, dept_no
from employees, dept_emp
where employees.emp_no = dept_emp.emp_no;
2、查找所有員工的last_name和first_name以及對應部門編號dept_no,也包括展示沒有分配具體部門的員工
輸出描述
last_name | first_name | dept_no |
---|---|---|
Facello | Georgi | d001 |
省略 | 省略 | 省略 |
Sluis | Mary | NULL(在sqlite中此處爲空,MySQL爲NULL) |
解析:由於有些員工可能沒有分配部門號,需要用左外連接就好了,即返回左表中所有的行,即便右表沒有滿足的條件
select last_name, first_name from employees
join dept_no from dept_emp where dept_emp.emp_no = employees.emp_no;
3、查找最晚入職員工的所有信息
輸出描述
emp_no | birth_date | first_name | last_name | gender | hire_date |
---|---|---|---|---|---|
10018 | 1980-09-01 | Ssmith |
select * FROM employees order by hire_date desc limit 0,1;
4、查找入職員工時間排名倒數第三的員工所有信息
SELECT * FROM employees order by hire_date desc limit 2,1;
5、查找employees表所有emp_no爲奇數,且last_name不爲Mary的員工信息,並按照hire_date逆序排列
select * from employees
where emp_no % 2 == 1
and last_name != 'Mary'
order by hire_date desc;