找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
多表:

主讲:
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、全链接
方法一:左独有+右独有+内连接

方法二:左链接+右独有

方法三:左独有+右链接











QQ截图20210813205309.png
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册