数据库DML语句之多表连接查询

一、内连接

1、内连接查询语句基本写法

简写:

select * from A1 ,B1 where A1.id=B1.id;  

等价于:

select * from A1 inner join B1 on A1.id=B1.id;(inner可以省略,但是不建议)

说明:

如果对多个表进行连接查询,但在where子句中没有给出连接条件(称无条件连接),则oracle将构成一个笛卡尔积,对所有表的全部行进行组合,产生大量的行(m*n行)。总而言之,多表查询就是在笛卡尔积的基础上找出表与表之间的关系进行筛选。

笛卡尔积:
A=(a,b) B=(1,2)  A*B = (1,a),(1,b),(2,a),(2,b)

2、什么时候用到多表查询:

1,当查询的数据来自于两张表或以上,就要用到多表查询

2,确定用多表连查,找到多张表的相同字段,在where后面用等号进行连接,如果有还有条件用and进行追加

案例:

有一张部门表和一张员工表如下:

部门表
员工表
例:查找名字为"ALLEN"的职工所在的部门号、部门名和部门所在地
select e.ename,e.deptno,d.dname,d.loc 
from emp e,dept d
where d.deptno=e.deptno and e.ename='ALLEN';

 3、自连接

1.什么是自连接:就是和自己进行连接查询,给一张表取两个不同的别名,然后附上连接条件

2、自连接的基本格式:

select 列名 from 表名 表别名1,表名 表别名2 where 条件;

例:查出比"JONES"工资高的职工的工资、工种的情况
select b.sal,b.job from emp a,emp b
where a.ename= 'JONES' and a.sal < b.sal;

4、外连接

1、外连接分类:左连接、右连接

左连接:左表为主表,左表每一行都显示(即使没有匹配到)。

select * from A1 left join B1 on A1.id=B1.id;

右连接:右表为主表,右表每一行都显示(即使没有匹配到)。

select * from A1 right join B1 on A1.id=B1.id;

例:显示出所有部门的编号、部门的名称和其职工的姓名与工种。(部门要全部显示出来)
select d.deptno,d.dname,e.ename,e.job
from dept d left join emp e on d.deptno=e.deptno;

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值