-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmultiTableExample.sql
More file actions
95 lines (79 loc) · 2.69 KB
/
multiTableExample.sql
File metadata and controls
95 lines (79 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
多表查询
f5刷新;f9执行选中的语句
*/
-- 部门表
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
-- 员工表
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1),
salary DOUBLE,
join_date DATE,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES dept(id)
);
INSERT INTO dept( NAME ) VALUE( '划水部' );
INSERT INTO dept( NAME ) VALUE( '打架部' );
INSERT INTO dept( NAME ) VALUE( '嘴炮部' );
-- 插入,dept_id不能插
-- insert into emp( name , gender , salary , join_date , dept_id) values("孙悟空",'男',7200,'2013-02-24',1);
INSERT INTO emp( NAME , gender , salary , join_date ) VALUES("孙悟空",'男',7200,'2013-02-24');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('猪八戒','男',3600,'2010-12-02');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('唐僧','男',9000,'2008-08-08');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('白骨精','女',5000,'2015-10-07');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('蜘蛛精','女',4500,'2011-03-14');
-- 在emp的中插入数据后,emp表的外检就可以插入了
INSERT INTO emp(NAME,gender,salary,join_date , dept_id) VALUES('牛魔王','男',8000,'2011-05-23' , 1);
-- 1. 隐式内连接
-- 查询所有员工信息和对应的部门信息
SELECT * FROM emp e, dept d
WHERE e.dept_id = d.id;
-- 查询员工表的名称,性别。部门表的名称
SELECT e.name , e.gender , d.name
FROM emp e , dept d
WHERE e.dept_id = d.`id`
-- 2. 显示内连接
SELECT *
FROM emp e INNER JOIN dept d ON e.dept_id = d.`id`;
SELECT * FROM emp e JOIN dept d ON e.dept_id = d.id;
-- 3.左外链接:查询的是左表以及交集的数据
-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
SELECT e.* , d.name
FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;
-- 4. 右外连接:查询的是右表所有数据以及其交集部分。
SELECT *
FROM dept d RIGHT JOIN emp e ON e.dept_id = d.id;
-- 5. 子查询:查询工资最高员工信息
SELECT *
FROM emp e WHERE e.salary = (
SELECT MAX(salary)
FROM emp
);
-- 查询员工工资小于平均工资的人
SELECT *
FROM emp e
WHERE e.salary < (
SELECT AVG(salary)
FROM emp
);
-- 查询'划水部'和'嘴炮部'所有的员工信息
SELECT *
FROM emp e
WHERE e.dept_id IN (
SELECT id
FROM dept
WHERE NAME = '划水部' OR NAME = '嘴炮部'
);
-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
SELECT *
FROM dept t1 , ( SELECT * FROM emp WHERE emp.join_date > '2011-11-11' ) t2
WHERE t1.id = t2.dept_id;
-- 内连接
SELECT *
FROM emp e , dept d
WHERE e.dept_id = d.id AND e.join_date > '2011-11-11';