一、内连接
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进行追加
案例:
有一张部门表和一张员工表如下:
![](https://img-blog.csdnimg.cn/direct/04189e9f264d4ef3bf560247664853d1.png)
![](https://img-blog.csdnimg.cn/direct/7449008a504a439ba6717944d9979650.png)
例:查找名字为"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;