MYSQL语句三:多表查询

一、表格

员工表

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)普通内连接

格式:

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="财务"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值