多表:
主讲:
1、内连接(基本链接和隐藏链接)
2、左链接(左外链接)
3、右链接(右外链接)
4、全链接(全外链接)
==================
建表数据
1、讲解过程先建立两个表dept 和emp
dept表:
deptno部门编号
dname 部门名称
create table dept(
deptno int primary key,--所在部门
dname varchar(14), -- 部门名称
loc varchar(13)-- 部门地址
)default charset=utf8 ;
select * from dept
insert into dept values (10,'会计部','纽约');
insert into dept values (20,'技术部','达拉斯');
insert into dept values (30,'销售部','芝加哥');
insert into dept values (40,'运营部','波士顿');
#员工表emp
create table emp(
empno int primary key, -- 员工编号
ename varchar(10), -- 员工姓名
job varchar(9), -- 员工工作
mgr int, -- 员工直属领导编号
hiredate date, -- 入职时间
sal double, -- 工资
comm double, -- 奖金
deptno int, -- 所在部门
foreign key (deptno) references dept(deptno)) default charset=utf8; -- 关联dept表
insert into emp values(7369,'smith','职员',7566,"1980-12-17",800,null,20);
insert into emp values(7499,'allen','销售员',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'ward','销售员',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'jones','经理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'martin','销售员',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'blake','经理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'clark','经理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'scott','职员',7566,'1987-07-03',3000,2000,20);
insert into emp values(7839,'king','董事长',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'turners','销售员',7698,'1981-09-08',1500,50,30);
insert into emp values(7876,'adams','职员',7566,'1987-07-13',1100,null,20);
insert into emp values(7900,'james','职员',7698,'1981-12-03',1250,null,30);
insert into emp values(7902,'ford','销售员',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'miller','职员',7782,'1981-01-23',1300,null,10);
关联关系两个表deptno相等
========================================
1、笛卡尔积查询(了解)
根据两张表相乘得到的结果,比如左边4条数据,右边6条,查出来就是4*6=24条,这种查询数据含有大量错误。
格式:select * from 表1,表2;
2、内连接(普通内连接,隐藏内连接)
查询两个表共有的关联数据
2.1普通内连接:
格式:select * from 表1 inner join 表2 on 表1.关联字段1=表2.关联字段2
eg: select * from dept inner join emp on dept.deptno=emp.deptno
select dname from dept inner join emp on dept.deotno=emp.deptno where id =1789
2.1 隐藏内连接
格式:select * from 表1 ,表2 where 表1.关联字段=表2.关联字段2
select * from dept ,emp where dept.deptno=emp.deptno
3、左连接
以坐表为主(显示完整的坐表),右表关联的数据有就显示,没有就以null显示
eg: select * from dept left join emp on dept.deptno=emp.deptno
4、右连接
以右表数据为主(显示整个右表)坐表右关联的数据就显示,没有就以null值显示。
eg:select * from emp right join dept on dept.deptno=emp.deptno
5、左表独有数据
左表中独有的数据显示(方法,左独有,以右表字段为空查询)
select * from dept left join mep on dept.deptno=emp.deptno where dame is null;
6、右 表独有
select * from emp right join emp on dept.deptno=emp.deptno where deptno is null
7、左表独有数据+右表独有数据:
左表独有+union + 右表独有
8、全链接
方法一:左独有+右独有+内连接
方法二:左链接+右独有
方法三:左独有+右链接
|
-
|