Oracle数据库中两张表的关联查询

在Oracle数据库中,关联查询是一种常见的操作,用于从多个表中获取数据,关联查询的基本思想是将两个或多个表中的数据进行连接,以便在一个查询结果中显示这些数据,关联查询可以分为内连接、左外连接、右外连接和全外连接等几种类型。

Oracle数据库中两张表的关联查询
(图片来源网络,侵删)

下面,我们将通过一个实际的例子来介绍如何在Oracle数据库中进行两张表的关联查询,假设我们有两个表:员工表(employees)和部门表(departments),它们之间的关系是:一个部门可以有多个员工,一个员工只能属于一个部门。

1、准备工作

我们需要创建这两个表,以下是创建员工表和部门表的SQL语句:

CREATE TABLE employees (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  age NUMBER,
  department_id NUMBER
);
CREATE TABLE departments (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  location VARCHAR2(50)
);

接下来,我们需要向这两个表中插入一些数据:

INSERT INTO employees (id, name, age, department_id) VALUES (1, '张三', 30, 1);
INSERT INTO employees (id, name, age, department_id) VALUES (2, '李四', 28, 1);
INSERT INTO employees (id, name, age, department_id) VALUES (3, '王五', 32, 2);
INSERT INTO employees (id, name, age, department_id) VALUES (4, '赵六', 25, 2);
INSERT INTO departments (id, name, location) VALUES (1, '人事部', '北京');
INSERT INTO departments (id, name, location) VALUES (2, '技术部', '上海');

2、内连接查询

内连接(INNER JOIN)是最常用的关联查询类型,它会返回两个表中具有匹配关系的记录,以下是一个内连接查询的示例:

SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

这个查询将返回员工表和部门表中具有匹配关系的记录,即员工的所属部门,查询结果如下:

EMPLOYEE_NAME | DEPARTMENT_NAME
|
张三          | 人事部
李四          | 人事部
王五          | 技术部
赵六          | 技术部

3、左外连接查询

左外连接(LEFT OUTER JOIN)会返回左表中的所有记录,以及右表中与左表匹配的记录,如果右表中没有匹配的记录,则返回NULL值,以下是一个左外连接查询的示例:

SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
LEFT OUTER JOIN departments d ON e.department_id = d.id;

这个查询将返回员工表中的所有记录,以及与之匹配的部门表中的记录,查询结果如下:

EMPLOYEE_NAME | DEPARTMENT_NAME
|
张三          | 人事部
李四          | 人事部
王五          | 技术部
赵六          | 技术部
NULL          | NULL

可以看到,最后一个记录的员工没有所属部门,因此部门名称为NULL。

4、右外连接查询

右外连接(RIGHT OUTER JOIN)与左外连接类似,但它会返回右表中的所有记录,以及左表中与右表匹配的记录,如果左表中没有匹配的记录,则返回NULL值,以下是一个右外连接查询的示例:

SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
RIGHT OUTER JOIN departments d ON e.department_id = d.id;

这个查询将返回部门表中的所有记录,以及与之匹配的员工表中的记录,查询结果如下:

EMPLOYEE_NAME | DEPARTMENT_NAME
|
张三          | 人事部
李四          | 人事部
王五          | 技术部
赵六          | 技术部
NULL          | NULL

可以看到,最后一个记录的部门没有员工,因此员工名称为NULL。

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/331478.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
酷盾叔订阅
上一篇 2024-03-13 23:05
下一篇 2024-03-13 23:07

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入