-- ======================
-- create表
-- ======================
CREATE TABLE employees (
employee_id int,
name varchar(15),
department_id int
);
CREATE TABLE departments (
department_id int,
department_name varchar(15)
);
CREATE TABLE salaries (
employee_id int,
salary int
);
-- ======================
-- insert数据
-- ======================
INSERT INTO employees(employee_id, name, department_id)
VALUES (1, 'Alice', 101),
(2, 'Bob', 102),
(3, 'Charlie', 103);
INSERT INTO departments(department_id, department_name)
VALUES (101, 'HR'),
(102, 'IT'),
(103, 'Finance');
INSERT INTO salaries(employee_id, salary)
VALUES (1, 50000),
(2, 60000),
(3, 70000);
-- ======================
-- query查询
-- ======================
-- 1、员工表
SELECT * FROM employees;
-- 2、部门表
SELECT * FROM departments;
-- 3、薪资表
SELECT * FROM salaries;
-- 4、查询所有员工 + 部门名称
SELECT
e.employee_id,
e.name,
d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
-- 5、查询所有员工 + 部门 + 薪资
SELECT
e.employee_id,
e.name,
d.department_name,
s.salary
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
INNER JOIN salaries s
ON e.employee_id = s.employee_id;
-- 6、子查询:查询所有员工 + 部门 + 薪资,【子查询先把 salaries 表筛选出来当作临时表,再与其它表 INNER JOIN(子查询在 FROM 中,派生表)】
SELECT e.employee_id,
e.name,
d.department_name,
s.salary
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
INNER JOIN (
SELECT employee_id, salary
FROM salaries
) s
ON e.employee_id = s.employee_id;
-- 7、子查询:查询薪资高于平均薪资的员工 + 部门名称 + 薪资
SELECT
e.employee_id,
e.name,
d.department_name,
s.salary
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
INNER JOIN salaries s
ON e.employee_id = s.employee_id
WHERE s.salary > (
SELECT AVG(salary)
FROM salaries
);
-- 8、子查询:查询在IT部门工作的员工,【先执行子查询找出 IT 部门的 department_id,再用结果过滤员工(子查询在 WHERE 中)】
SELECT
employee_id,
name
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE department_name = 'IT'
);
-- 9、子查询:查询所有员工的工资【每个员工记录都用子查询找对应的薪资(子查询在 SELECT 中,标量子查询)】
SELECT
employee_id,
name,
(SELECT salary FROM salaries WHERE salaries.employee_id = employees.employee_id) AS salary
FROM employees;
-- 10、把employees表里employee_id为3的department_id更新为104
UPDATE employees
SET department_id = 104
WHERE employee_id = 3;
-- 11、再次查看员工表
SELECT * FROM employees;
-- 12、删除employees表里employee_id为3的数据
DELETE FROM employees
WHERE employee_id = 3;
-- 13、再次查看员工表
SELECT * FROM employees;