利用Oracle中的表连接查询数据(oracle中不同表连接)
利用Oracle中的表连接查询数据
在数 据库查询中,表连接是一种主要的查询方式,常常被用来从多张表中获取数据。Oracle 数据库的表连接功能非常强大,支持多种不同的连接方式,使得我们能够快速、准确地查询所需要的数据。
在 Oracle 中,表连接有两种基本类型:内连接和外连接。内连接(或等值连接)通过比较两个或多个表之间的共同数据,建立表之间的联系。外连接则不仅包括内连接所包含的数据,还包括某个表中不匹配的数据。
下面我们来通过一个实例来学习如何在Oracle中使用表连接查询数据。
假设有两张表——学生信息表和学生课程成绩表——它们的数据如下:
学生信息表(student_info):
| 学生编号 | 学生姓名 | 学生性别 | 学生年龄 |
| ——– | ——– | ——– | ——– |
| 001 | 张三 | 男 | 18 |
| 002 | 李四 | 女 | 19 |
| 003 | 王五 | 男 | 20 |
| 004 | 赵六 | 女 | 21 |
学生课程成绩表(student_course):
| 学生编号 | 课程编号 | 课程名称 | 课程成绩 |
| ——– | ——– | ——– | ——– |
| 001 | 1001 | 数学 | 80 |
| 001 | 1002 | 英语 | 85 |
| 002 | 1001 | 数学 | 90 |
| 002 | 1002 | 英语 | 85 |
| 003 | 1001 | 数学 | 92 |
现在我们想要查询学生的所有信息以及他们所选的课程和成绩,我们就需要使用表连接。
我们需要使用 INNER JOIN 操作符将这两张表连接起来,并指定学生编号为连接条件。代码如下:
“`sql
SELECT *
FROM student_info
INNER JOIN student_course
ON student_info.学生编号 = student_course.学生编号;
该查询会返回下面的结果:
| 学生编号 | 学生姓名 | 学生性别 | 学生年龄 | 课程编号 | 课程名称 | 课程成绩 || -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| 001 | 张三 | 男 | 18 | 1001 | 数学 | 80 || 001 | 张三 | 男 | 18 | 1002 | 英语 | 85 |
| 002 | 李四 | 女 | 19 | 1001 | 数学 | 90 || 002 | 李四 | 女 | 19 | 1002 | 英语 | 85 |
| 003 | 王五 | 男 | 20 | 1001 | 数学 | 92 |
从上面的结果中,我们可以看到学生信息表和学生课程成绩表已经成功地连接了起来,而且连接的条件是学生编号。
如果我们不仅要查询所有学生的信息,还要包括没有选课程的学生信息,那么我们需要使用外连接。外连接有两种类型:左外连接和右外连接。左外连接可以包括左边表(student_info)的所有数据,不匹配的数据值为空值;右外连接则可以包括右边表(student_course)的所有数据,不匹配的数据值也为空值。
现在,我们来使用左外连接查询所有学生信息以及他们的选课情况。代码如下:
```sqlSELECT *
FROM student_infoLEFT OUTER JOIN student_course
ON student_info.学生编号 = student_course.学生编号;
该查询返回的结果与 INNER JOIN 不同,它包含了所有学生信息,而不仅仅是选课的学生信息。在没有匹配的记录中,课程编号和课程成绩的值都是空值。代码执行后的结果如下:
| 学生编号 | 学生姓名 | 学生性别 | 学生年龄 | 课程编号 | 课程名称 | 课程成绩 |
| ——– | ——– | ——– | ——– | ——– | ——– | ——– |
| 001 | 张三 | 男 | 18 | 1001 | 数学 | 80 |
| 001 | 张三 | 男 | 18 | 1002 | 英语 | 85 |
| 002 | 李四 | 女 | 19 | 1001 | 数学 | 90 |
| 002 | 李四 | 女 | 19 | 1002 | 英语 | 85 |
| 003 | 王五 | 男 | 20 | 1001 | 数学 | 92 |
| 004 | 赵六 | 女 | 21 | NULL | NULL | NULL |
可以看到,结果中包括了所有学生的信息,不仅仅是选课的学生信息。
在 Oracle 中,表连接是一项非常强大的功能,它可以让我们在大量的数据中快速定位所需要的信息。同时,在查询过程中,我们也需要尽量避免使用过多的连接操作,因为过多的操作会导致查询效率下降,甚至可能会引起系统的崩溃。