java中利用oracle查询两次_ORACLE复杂查询之连接查询

一、传统的连接查询

1、交叉连接:返回笛卡尔积

7855320751bc812e0e3f88c6c648ff4e.png

WHERE中限定查询条件,可以预先过滤掉掉不符合条件的记录,返回的只是两个表中剩余记录(符合条件的记录)的笛卡尔积。

2、内连接:参与连接的表地位平等,不分主次。两表均可能有丢弃。

(1)等值连接:表间记录的连接是通过相等的字段值为条件建立起来的。

830364a5f02c742ed692dddd6067bf4e.png

(2)非等值连接:与等值连接类似。如果表间记录的连接条件使用除“=”以外的其它比较运算符(>,>=,,!以及BETWEEN…AND等)比较被连接的字段值。注意“BETWEEN (较小值)AND (较大值)”对应闭区间,

3、外连接:参与连接的表分主次。主表不丢弃,从表可能有丢弃。

(1)左外连接:主表在左,从表一侧(右侧)使用“(+)”。

33aa8b46bacf5e579065b08aa0ad715d.png

(2)右外连接:同理。

4、自连接:同一个表上的连接查询,令一个表与其自身连接。

注:SELECT子句中的字段别名可以中间使用AS,可以省略;但表名与表别名之间不允许使用AS。

二、SQL92连接语法

在SQL92标准中,除支持前述传统的连接语法之外,还定义了一组新的连接语法体系--在FROM子句中指定连接条件(之前是在WHERE子句中),二者功能几乎完全相互覆盖,只是语法格式有所不同、且SQL92中增加了一种全外连接。SQL92连接语法基本格式如下:

829e95cdc8d91e84d8fb5f652a39f202.png

注意:连接条件仍是由被连接表中的字段和比较运算符、逻辑运算符等构成的表达式,使用关键字ON或USING等。

连接类型可分为交叉连接、内连接、外连接三种,并可再细分(下图):

1680cb8216557d998640cfa86f7f53e9.png

(1)交叉连接的关键字是CROSS JOIN,返回笛卡尔积。例:

fe3076592fcef927c7d63dd8e364fec8.png

(2)等值连接、非等值连接用关键字:[INNER] JOIN,并且用ON代替WHERE指定连接条件及其他查询限定条件;

938139f4e2955fa271a26b750f92056b.png

等值连接可以使用USING子句指定用于等值连接的字段(参照字段)。

1c78f4565f43406e5400583599c1e047.png

自然连接的关键字是NATURAL [INNER] JOIN,基于两个表中的全部同名字段建立等值连接。如果类型不一致会出错。

b3ad61ff1238ad33ffa3a673b9568846.png

注意:USING和NATURAL不允许在参照字段(包括SELECT列表中出现的参照字段)上使用表名或表别名作为前缀。此外,ON子句的等值连接不会去除查询结果集中的重复字段,但USING或NATURAL中则会自动去掉重复字段。例如:

56b2b9996eeb5636bb0cbcb1582161e0.png

(3)左外连接(右外连接同理):主表在左,关键字是LEFT [OUTER] JOIN,ON代替WHERE指定连接条件;

e61f9eece6ded829ec3d5255f5f3d916.png

相当于前述传统方式中的从表侧加入“(+)”:

1a02088b7f4a3b29fe80332555b0abb3.png

全外连接:关键字是FULL [OUTER] JOIN,ON代替WHERE指定连接条件。

284ce014b379d5cdd7e35b7038467856.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值