员工信息查询

如下数据表

CREATE TABLEdept_emp(
emp_noint(11) NOT NULL,
dept_nochar(4) NOT NULL,
from_datedate NOT NULL,
to_datedate 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));`

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;

你可能感兴趣的:(sql实战)