一、表格
员工表
sid:员工编号、name:姓名、age:年龄、woektime_start 入职时间,incoming工资
dept2 部门编号
部门表
dept1 部门编号,dept_name 部门名称
二、建表语句
CREATE table dept(
dept1 VARCHAR(6),
dept_name VARCHAR(20))
default charset=utf8;
INSERT into dept VALUES ('101','财务');
INSERT into dept VALUES ('102','销售');
INSERT into dept VALUES ('103','IT技术');
INSERT into dept VALUES ('104','行政');
CREATE table emp (
sid VARCHAR(6),name VARCHAR(20),
age TINYINT(2),woektime_start VARCHAR(10),
incoming SMALLINT(10),dept2 VARCHAR(6)
)default charset=utf8;
insert into emp VALUES ('1789','张三',35,'1980/1/1',4000,'101');
insert into emp VALUES ('1674','李四',32,'1983/4/1',3500,'101');
insert into emp VALUES ('1776','王五',24,'1990/7/1',2000,'101');
insert into emp VALUES ('1568','赵六',57,'1970/10/11',7500,'102');
insert into emp VALUES ('1564','荣七',64,'1963/10/11',8500,'102');
insert into emp VALUES ('1879','牛八',55,'1971/10/20',7300,'103');
insert into emp VALUES ('1880','老九',55,'1971/10/20',8000,'105');
drop table dept ; drop table emp ; select * from dept; select * from emp ;
三、讲解多表连接
(1)2个表或者更多的表中查询我们要的数据
(2)多表连接的关系
a、内连接
b、左连接
c、右连接
e、左独有数据
f、右独有数据
g、全外连接
比如: a 表:1,2,3 b 表:1,2,4
内连接:两个表相同部分,可以做桥接的部分
显示左边12和右边12关联 显示:12,不显示3,4
左连接:左表为主
显示左边1,2,3,右边12 关联123 4不显示
右连接:右表为主
显示右边1,2,4全部显示,左边12 关联124, 3不显示
左独有数据:显示3
右独有数据:显示4
全外连接:显示1,2,3,4
四、详解讲解连接的关系
1、内连接
(1)隐藏内连接 ,
格式:select * from 表1,表2 where 表1.关联字段=表2.关联字段
案例:select * from dept ,emp where dept.dept1=emp.dept2
(2)普通内连接 inner jion...on...
格式:select * from 表1 INNER JOIN 表2 on 表1.关联字段=表2.关联字
案例:select * from dept INNER JOIN emp on dept.dept1=emp.dept2
3、左连接 left join
格式:select * from 表1 left JOIN 表2 on 表1.关联字段=表2.关联字
案例:select * from dept left JOIN emp on dept.dept1=emp.dept2
4、右连接 right join
格式:select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字
案例:select * from dept right JOIN emp on dept.dept1=emp.dept2
5、左独有数据
格式:select * from 表1 left JOIN 表2 on 表1.关联字段=表2.关联字 where 右表字段 is null
案例:select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null
6、右独有数据
格式:select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字 where 左表字段 is null
案例:select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept_name is null
7、全外连接:
==(1)内连接+左独有数据+右独有数据
案例:select * from dept INNER JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept left JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept right JOIN emp on dept.dept1=emp.dept2;
图片
==
(2)左连接+右独有数据
案例:select * from dept left JOIN emp on dept.dept1=emp.dept2
union
select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept_name is null ;
(3)右连接+左独有数据
案例:select * from dept right JOIN emp on dept.dept1=emp.dept2
union
select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null
四、总结:
多表:
普通内连接:select * from 表1 inner join 表2 on 表 1.关联字段=表2.关联字段
隐藏内连接:select * from 表1,表2 where 表 1.关联字段=表2.关联字段
左连接:select * from 表1 left join 表2 on 表 1.关联字段=表2.关联字段
右连接 :select * from 表1 right join 表2 on 表 1.关联字段=表2.关联字段
左独有数据:select * from 表1 left join 表2 on 表 1.关联字段=表2.关联字where 表2中的字段 is null
右独有数据:select * from 表1 right join 表2 on 表 1.关联字段=表2.关联字
where 表1 中的字段 isnull
全外连接:union
(1)左独有+右独有+内连接
(2)左连接+右独有
(3)右连接+左独有
五、作业
1、It技术部入职员工的员工号
图片
2、财务部门的收入总和;
select sum(incoming) FROM dept a INNER JOIN emp b on a.dept1=b.dept2 where dept_name="财务"