1.创建测试表
-- Create table create table TABLE_A ( FIELD_AA VARCHAR2(10), FIELD_AB VARCHAR2(10) ) -- Create table create table TABLE_B ( FIELD_BA VARCHAR2(10), FIELD_BB VARCHAR2(10) )
2.插入测试数据
insert into TABLE_A (FIELD_AA, FIELD_AB) values ('1', 'a'); insert into TABLE_A (FIELD_AA, FIELD_AB) values ('3', 'b'); insert into TABLE_A (FIELD_AA, FIELD_AB) values ('4', 'c'); commit; insert into TABLE_B (FIELD_BA, FIELD_BB) values ('1', 'x'); insert into TABLE_B (FIELD_BA, FIELD_BB) values ('2', 'y'); insert into TABLE_B (FIELD_BA, FIELD_BB) values ('4', 'z'); commit;
3. 连接介绍
3.1内连接
-- 内连接(查询出两个表相匹配的记录) select * from table_a inner join table_b on table_a.field_aa = table_b.field_ba; -- 相同写法 select * from table_a, table_b where table_a.field_aa = table_b.field_ba;
3.2左外连接
-- 左连接(显示左表<驱动表>中的所有数据,此例中为table_a) select * from table_a left join table_b on table_a.field_aa = table_b.field_ba ; -- 相同写法 select * from table_a, table_b where table_a.field_aa = table_b.field_ba(+) ;
3.3右外连接
-- 右连接(显示右表<被驱动表>中的所有数据,此例中为table_b) select * from table_a right join table_b on table_a.field_aa = table_b.field_ba; -- 相同写法 select * from table_a, table_b where table_a.field_aa(+) = table_b.field_ba;
3.4全外连接
-- 全外连接(等值连接的基础上将左表和右表的未匹配数据都加上) select * from table_a full join table_b on table_a.field_aa = table_b.field_ba; -- 全外连接的等价写法,对同一表先做左连接,然后右连接 select * from table_a left join table_b on table_a.field_aa = table_b.field_ba union select * from table_a right join table_b on table_a.field_aa = table_b.field_ba;
3.5带条件的连接写法与差异
-- 带条件的左连接 select * from table_a left join table_b on table_a.field_aa = table_b.field_ba and table_b.field_bb = 'y'; -- 先过滤再连接(先把table_b表中符合条件的数据过滤出来,之后再跟table_a进行left join操作) select * from table_a left join table_b on table_a.field_aa = table_b.field_ba where table_b.field_bb = 'y'; -- 先连接再过滤(也就是说先按照left jion的on条件关联出一个虚拟表,之后再对这个虚拟表进行where后的过滤操作) select * from table_a, table_b where table_a.field_aa = table_b.field_ba(+) and table_b.field_bb = 'y'; -- 先连接再过滤
相关推荐
本文将深入探讨Oracle的JOIN用法,包括内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)以及自然连接(NATURAL JOIN),并结合实例进行说明。 1. **内连接(INNER JOIN)**: 内连接返回两个表中满足特定...
在SQL查询语句中,连接(JOIN)是一种非常重要的操作,用于从两个或多个表中获取数据。其中,`LEFT JOIN`是一种常用的连接类型,它返回左表的所有记录以及右表中匹配的记录。如果不匹配,则结果中的右表部分为NULL值...
在Oracle数据库中,连接(JOIN)是用于合并两个或多个表的数据的关键操作。当我们需要从相关的表中获取信息时,JOIN语句就显得尤为重要。在本文中,我们将深入探讨Oracle JOIN的操作及其在实际应用中的重要性。 ...
右连接(Right Outer Join) 右连接与左连接类似,但它返回右表中的所有记录,并将左表中的记录匹配到右表中。如果左表中没有匹配的记录,将以 null 值代替。 内连接(Inner Join) 内连接返回两个表中公共的记录...
连接可以分为三类:对等连接(EQUIJOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。 * 对等连接:只显示连接的表中存在而且相等的记录。传统的写法也是一种对等连接。 * 左连接:将进行...
根据连接的方式不同,可以分为内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN)等几种类型。 #### 二、连接查询类型详解 ##### 1. INNER JOIN (内连接) 内连接是最常用...
外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。与内连接不同,外连接会包括不满足连接条件的一侧或两侧表中的所有行。 #### 示例代码解析: ```sql SELECT...
外连接分为三种类型:左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。本篇文章将深入探讨这三种外连接的概念、语法以及它们在实际应用中的作用。 1. 左外连接(Left ...
例如,通过左连接和右连接的组合,可以实现全连接(Full Join),获取两个表的所有记录。同时,还可以结合使用WHERE子句和聚合函数(如COUNT, SUM, AVG等)来过滤和统计数据。 了解并熟练掌握这些连接方式,对于...
3. **连接类型**:不同的连接类型(如INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)对性能有显著影响。理解每个连接类型的工作原理并根据需求选择合适的连接方式是关键。 4. **子查询与连接的比较**:在某些情况...
本文将详细介绍Oracle中常见的几种表连接方式及其应用场景,包括内连接(Inner Join)、外连接(Outer Join)、左连接(Left Join)、右连接(Right Join)等,并通过具体的例子来帮助理解每种连接的特点与区别。...
接下来,我们讨论OUTER JOIN,它分为LEFT JOIN、RIGHT JOIN和FULL JOIN。OUTER JOIN的目的是返回所有匹配的行以及至少一方表中的非匹配行。 - LEFT JOIN(或LEFT OUTER JOIN)返回左表中的所有行,即使右表中没有...
- `(+)` 符号在Oracle的旧版本中被用来表示外连接,但在9i及以后的版本中,更推荐使用标准的 `LEFT JOIN`、`RIGHT JOIN` 或 `FULL JOIN` 语法,因为它们更清晰且易于理解。 理解并熟练运用这些连接类型对于处理复杂...
外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)以及全外连接(Full Outer Join)。它们不仅返回满足连接条件的行,还会返回非匹配行。 **左外连接(Left Outer Join)** 左外连接返回左表的...
2.1 左外连接(Left Outer Join) 左外连接返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,那么结果将为空。例如: SQL> Select a.id,a.name,b.name from dave a left outer join bl b ...