Oracle是目前市场上应用最广泛的关系数据库管理系统。而外连接是Oracle中一种非常重要的查询方法,使用它可以将多个表中符合条件的记录进行关联,从而实现数据的合并。在本文中,我们将一步步探讨Oracle中外连接的用法和示例。
1.左外连接
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.key = table2.key;
上面的SQL语句表示将table1表中的数据与table2表中key字段相同的记录进行左匹配,结果中不仅包含table1表中符合条件的记录,也包含table2表中所有key字段与table1匹配的记录。
例如,我们有两个表分别存储学生和考试成绩信息。
table1-学生信息表
S_ID S_NAME S_GENDER S_AGE 1 张三 男 20 2 李四 女 21 3 王五 男 20
table2-成绩信息表
S_ID C_NAME C_SCORE 1 语文 80 1 数学 90 2 英语 85
现在我们需要查询每个学生的成绩,如果有学生没有考试成绩,也要显示出来。可以使用以下SQL语句实现:
SELECT table1.S_NAME,table2.C_NAME,table2.C_SCORE FROM table1 LEFT OUTER JOIN table2 ON table1.S_ID = table2.S_ID;
执行以上语句后,我们得到以下结果:
S_NAME C_NAME C_SCORE 张三 语文 80 张三 数学 90 李四 英语 85 王五 null null
从结果可以看出,王五同学没有考试成绩,所以左外连接后结果显示为null。
2.右外连接
SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.key = table2.key;
右外连接与左外连接相反,将以第二个表为基础(右边表)进行匹配,结果中包含第二个表符合条件的所有记录以及有匹配记录的第一个表的记录。
以学生信息表和成绩信息表为例,我们需要查看每个考试的成绩以及参加考试的学生信息。如果有参加考试但是学生信息表中没有对应记录的学生,也要显示出来。这个需求可以通过以下SQL语句实现:
SELECT table1.S_NAME,table2.C_NAME,table2.C_SCORE FROM table1 RIGHT OUTER JOIN table2 ON table1.S_ID = table2.S_ID;
执行以上SQL语句后,我们得到以下结果:
S_NAME C_NAME C_SCORE 张三 语文 80 张三 数学 90 李四 英语 85 null 历史 70
结果中最后一行,是成绩信息表中历史科目对应的成绩,因为没有匹配上学生信息表中的记录,所以学生姓名为null。
3.全外连接
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.key = table2.key;
当我们需要使用两个表的全部数据进行关联时,可以使用全外连接。在Oracle中,全外连接有一些局限性,不能使用*代替所有列名,必须明确列出每个表中需要查询的字段名。
接下来我们使用学生信息表和成绩信息表作为示例进行全外连接:
SELECT table1.S_NAME,table2.C_NAME,table2.C_SCORE FROM table1 FULL OUTER JOIN table2 ON table1.S_ID = table2.S_ID;
执行以上SQL语句后,我们得到以下结果:
S_NAME C_NAME C_SCORE 张三 语文 80 张三 数学 90 李四 英语 85 王五 null null null 历史 70
结果中每一行都包含一个学生的成绩信息,如果没有匹配信息,相应的字段显示null。
总结
使用外连接可以很方便地进行多个表之间的关联查询,从而实现数据的合并。在Oracle中,左、右和全外连接均可以通过JOIN关键字来实现。在使用全外连接时,需要格外注意查询的字段名,以避免查询结果不准确。