1. 程式人生 > >牛客網數據庫SQL實戰(1-5)

牛客網數據庫SQL實戰(1-5)

eat 數據表 key rom spa 數據庫 varchar ast 查找

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

技術分享圖片

select * from employees where hire_date=(select max(hire_date) from employees);
select 
* from employees order by hire_date desc limit 1;

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

技術分享圖片

select * from employees order by hire_date desc limit 2,1;
select * from employees where hire_date = (select hire_date from employees order 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`));

技術分享圖片

select s.* ,d.dept_no
from salaries as s 
join dept_manager as d 
on s.emp_no = d.emp_no
where s.to_date = ‘9999-01-01‘
and d.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 e.last_name , e.first_name , d.dept_no
from employees e , dept_emp d
where e.emp_no = d.emp_no;

SELECT ep.last_name, ep.first_name, dp.dept_no 
FROM employees ep 
INNER JOIN dept_emp dp
ON ep.emp_no = dp.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 e.last_name, e.first_name, d.dept_no 
FROM employees e 
LEFT JOIN dept_emp d
ON e.emp_no = d.emp_no;

註意:
  INNER JOIN 兩邊表同時有對應的數據,即任何一邊缺失數據就不顯示。
  LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據。
  RIGHT JOIN 會讀取右邊數據表的全部數據,即便左邊表無對應數據。

牛客網數據庫SQL實戰(1-5)