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)都在员工姓名和姓氏字段中显示为空。