Oracle 示例使用左连接查询(oracle 中的左连接)

Oracle 示例:使用左连接查询

[Oracle] 数据库中,左连接是一种常见用法,被广泛用于实现数据报表查询、统计等操作。本篇文章将介绍Oracle数据库中如何使用左连接查询。

什么是左连接?

左连接是指从左表中取出所有的数据记录,并以其为基础,寻找右表中匹配的记录。对于右表中未找到匹配项的记录,会将其设为空。因此左连接查询的结果并不会削减左表记录,而是将右表记录与左表相匹配并显示出来。

左连接查询的语法:

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name;

表名称之间的逗号表示多个表,而左连接使用的是 LEFT JOIN 语句。两个表之间连接的通常是主键和外键,而连接条件则使用 ON 语句指定。

例如:

SELECT customers.CustomerName, orders.OrderID

FROM customers

LEFT JOIN orders

ON customers.CustomerID=orders.CustomerID

ORDER BY customers.CustomerName;

上述语句中,我们连接了两个表 customers 和 orders。条件是 customers 表的 CustomerID 等于 orders 表的 CustomerID。查询结果只显示指定的两个字段(CustomerName 和 OrderID),同时按照客户名称排序。

示例:

我们以 HR 数据库中的 employees 和 departments 两个表为例,来演示使用左连接查询的例子。

1. 我们使用以下命令创建两个表:

CREATE TABLE employees (

employee_id INT NOT NULL,

first_name VARCHAR2(20),

last_name VARCHAR2(25) NOT NULL,

eml VARCHAR2(25) NOT NULL,

phone_number VARCHAR2(20),

hire_date DATE NOT NULL,

job_id VARCHAR2(10) NOT NULL,

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

manager_id INT,

department_id INT NOT NULL

);

CREATE TABLE departments (

department_id INT NOT NULL,

department_name VARCHAR2(30) NOT NULL,

manager_id INT,

location_id INT NOT NULL

);

2. 接着,向这两个表中分别插入一些数据:

INSERT INTO employees VALUES (1, ‘John’, ‘Smith’, ‘john.smith@oracle.com’, ‘123-456-7890’, SYSDATE, ‘IT_PROG’, 5000, NULL, NULL, 60);

INSERT INTO employees VALUES (2, ‘Jane’, ‘Doe’, ‘jane.doe@oracle.com’, ‘234-567-8901’, SYSDATE, ‘ST_CLERK’, 2300, NULL, 1, 50);

INSERT INTO employees VALUES (3, ‘Mike’, ‘Johnson’, ‘mike.johnson@oracle.com’, ‘345-678-9012’, SYSDATE, ‘IT_PROG’, 5000, NULL, 1, 60);

INSERT INTO employees VALUES (4, ‘Amy’, ‘Williams’, ‘amy.williams@oracle.com’, ‘456-789-0123’, SYSDATE, ‘SA_REP’, 8000, 0.15, 2, 80);

INSERT INTO employees VALUES (5, ‘David’, ‘Davis’, ‘david.davis@oracle.com’, ‘567-890-1234’, SYSDATE, ‘IT_PROG’, 5000, NULL, 2, 60);

INSERT INTO departments VALUES (50, ‘Shipping’, 121, 1700);

INSERT INTO departments VALUES (60, ‘IT’, 103, 1400);

INSERT INTO departments VALUES (80, ‘Sales’, 145, 2500);

3. 我们使用以下查询语句,以 departments 表为基础,查询与之连接的 employees 表中的数据,把空缺的数据设为空:

SELECT departments.department_name, employees.first_name, employees.last_name

FROM departments

LEFT JOIN employees

ON departments.department_id=employees.department_id

ORDER BY departments.department_name;

查询结果如下:

DEPARTMENT_NAME FIRST_NAME LAST_NAME

IT John Smith

IT Mike Johnson

IT David Davis

Sales Amy Williams

Shipping Jane Doe

可见,通过使用 LEFT JOIN 关键字和 ON 语句,我们成功地使用了左连接查询。查询结果中所有的部门都被列出,不曾匹配成功的记录(如部门 50)都在员工姓名和姓氏字段中显示为空。


数据运维技术 » Oracle 示例使用左连接查询(oracle 中的左连接)