oracle 连接查询(内、外连接、自连接、子查询)

时间:2024-10-12 06:57:49

内连接
一般使用inner join来实现。其中inner关键字可以省略
同时必须在from子句之后定义一个on子句,用来指定连接条件

外连接
1 左外连接:关键字为left outer join或left join
2 右外连接:关键字为right outer join或right join
3 完全外连接:关键字为full outer join 或 full join

补充说明:
1)外连接除了会把满足连接条件的记录查出来外,还可以把不满足连接条件的查出来。
2)外连接分为左外连接、右外连接和全外连接。
左外连接 LEFT OUTER JOIN:以JOIN左侧表作为驱动表(所有记录都会查出来),那么当该表中某条记录不满足链接条件时,来自右侧表中的字段全部填NULL.
右外连接 RIGHT OUTER JOIN:以JOIN右侧表作为驱动表(所有记录都会查出来),那么当该表中某条记录不满足链接条件时,来自左侧表中的字段全部填NULL.
全外连接 FULL OUTER JOIN:就是左右表不满足的都会查出来。

自连接
自连接是一种特殊的连接查询,数据的来源是一个表,即关联关系来自于单张表的多个列
自连接是为了解决同类型数据但又存在上下级关系的树状结构数据时使用。

关联查询
从多张表中查询对应记录的信息。
关联查询的重点在于这些表中的记录的对应关系,这个关系也称为连接条件

当两张表有同名字段时,SELECT子句中必须明确指定该字段来自哪张表,在关联查询中,表名也可以添加别名。

关联查询时要添加查询条件,否在会出现笛卡儿积
笛卡尔积通常是一个毫无意义的结果集,他的记录数是所有参与查询的表的记录数乘积的结果。
要避免出现。数据量大时极易出现内存溢出等现象。
N张表关联查询要有至少N-1个查询条件。
不满足连接条件的记录是不会在关联查询中被查询出来的

子查询
子查询是一条SELECT语句,但它是嵌套在其他SQL中,为的是给该SQL提供数据以支持其执行操作。

此处是说的其他SQL,而不是查询语句中,子查询是可以嵌套在其它各种SQL的,比如DDL,就可以通过子查询创建一张查询出来数据的表。
子查询可分为单行子查询、多行子查询及多列子查询。
单行单列子查询:常用于过滤条件,可以配合>、=、<、>=、<=使用
多行单列子查询:常用于过滤条件,判断=时用in,判断>、>=等时用ANY、ALL
多行多列子查询:常当作一张表看待

–一、内连接、外连接练习10.29

–1、查询所有工种为CLERK的员工的姓名及其部门名称