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