• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LOFLY
终其一生,编织快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

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;

posted @ 2024-07-22 11:16  编织快乐  阅读(22)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3