SQLite RIGHT JOIN
SQLite RIGHT JOIN
在本教程中,您将学习如何使用 SQLite RIGHT JOIN 从两个相关表中检索数据。
SQLite RIGHT JOIN 子句简介
RIGHT JOIN 子句返回右表的所有行以及左表中匹配的行。对于左表中不匹配的行,它使用 NULL 值。
语法格式:
SELECT
select_list
FROM
table1
RIGHT JOIN table2 ON table1.column_name1 = table2.column_name2;
RIGHT JOIN 子句将返回右表(table2)中的所有行以及左表(table1)中的匹配行。
对于右表(table2)中没有与左表(table1)匹配的行,它对左表(table1)的列使用 NULL 值。
如果table1和table2有相同的column_name,则可以使用USING语法:
SELECT
select_list
FROM
table1
RIGHT JOIN table2 USING (column_name);
注意: USING (column_name)和ON table.column_name = table2.column_name是等价的。
要从右表(table2)中查找在左表(table1)中没有匹配行的行,您可以检查 WHERE 子句中的 column_name 是否为 NULL,如下所示:
SELECT
select_list
FROM
table1
RIGHT JOIN table2 USING (column_name)
WHERE
column_name IS NULL;
SQLite RIGHT JOIN 子句的例子
首先,创建新表 departments 和employees:
CREATE TABLE departments (
department_id INTEGER PRIMARY KEY,
department_name TEXT NOT NULL
);
CREATE TABLE employees (
employee_id INTEGER PRIMARY KEY,
employee_name TEXT NOT NULL,
department_id INTEGER,
FOREIGN KEY(department_id)
REFERENCES departments(department_id) ON DELETE CASCADE
);
在这些表中,employees 表具有引用 entities 表的 entities_id 列的 entities_id 列。此关系是通过外键约束建立的。
其次,在部门departments和员工employees表中插入行:
INSERT INTO departments (department_name )
VALUES ('HR'),
('IT');
INSERT INTO employees (employee_name , department_id )
VALUES
('John', 1),
('Jane', 2),
('Alice', NULL);
在此示例中,为了清楚起见,我们仅使用三行。
第三,使用 RIGHT JOIN 检索所有员工及其各自的部门:
SELECT
employee_name,
department_name
FROM
departments
RIGHT JOIN employees ON employees.department_id = departments.department_id;
输出:
employee_name department_name
------------- ---------------
John HR
Jane IT
Alice null
由于employees 表和departments 表都有department_id 列,因此可以使用USING 子句:
SELECT
employee_name,
department_name
FROM
departments
RIGHT JOIN employees USING (department_id);
最后,使用 WHERE 子句中的 IS NULL 条件查找所有没有部门的员工:
SELECT
employee_name,
department_name
FROM
departments
RIGHT JOIN employees ON employees.department_id = departments.department_id
WHERE
department_name IS NULL;
浙公网安备 33010602011771号