原文: https://javatutorial.net/sql-right-join-example

本文介绍了 SQL RIGHT JOIN语法,并提供了有关如何使用RIGHT JOIN的示例

右连接返回右表中的所有值,以及左表中的匹配值。 如果左表中没有与右表中给定记录匹配的结果,则返回的结果将为NULL

RIGHT JOINRIGHT OUTER JOIN的术语相同。

您可以使用以下链接查看不同类型的 SQL JOIN

  1. 内连接
  2. 左连接
  3. 右连接
  4. 外连接

右连接视觉表示

SQL 右连接示例 - 图1

SQL 右连接

右连接语法

该查询将返回左表(表 A)中的所有记录,无论这些记录中的任何一个在右表(表 B)中是否匹配

  1. SELECT Table_A.column1, Table_B.column2...
  2. FROM Table_A A
  3. RIGHT JOIN Table_B B
  4. ON A.Key = B.Key

右连接示例

我们将创建 3 个表

  1. CUSTOMER
  2. PRODUCT
  3. ORDER

客户可以订购产品。 在ORDER表中,我们保存了客户 ID 和客户已订购的每种产品的数量。

SQL 右连接示例 - 图2

数据库图显示客户,产品和订单关系

使用以下 SQL 脚本创建三个表。

创建CUSTOMER

  1. CREATE TABLE `CUSTOMER` (
  2. `id` INT NOT NULL,
  3. `name` VARCHAR(45) NOT NULL,
  4. PRIMARY KEY (`id`));

创建PRODUCT

  1. CREATE TABLE `PRODUCT` (
  2. `id` INT NOT NULL,
  3. `name` VARCHAR(45) NOT NULL,
  4. `price` DECIMAL(7,2) NOT NULL,
  5. PRIMARY KEY (`id`));

创建ORDER

  1. CREATE TABLE `ORDER` (
  2. `id` INT NOT NULL,
  3. `date` DATETIME NOT NULL,
  4. `customer_id` INT NOT NULL,
  5. `product_id` INT NOT NULL,
  6. `quantity` INT NOT NULL,
  7. PRIMARY KEY (`id`),
  8. INDEX `product_id_idx` (`product_id` ASC) VISIBLE,
  9. INDEX `customer_id_idx` (`customer_id` ASC) VISIBLE,
  10. CONSTRAINT `customer_id`
  11. FOREIGN KEY (`customer_id`)
  12. REFERENCES `CUSTOMER` (`id`),
  13. CONSTRAINT `product_id`
  14. FOREIGN KEY (`product_id`)
  15. REFERENCES `PRODUCT` (`id`));

CUSTOMER表中插入数据

  1. INSERT INTO `CUSTOMER` (`id`, `name`) VALUES ('1', 'Jon Snow');
  2. INSERT INTO `CUSTOMER` (`id`, `name`) VALUES ('2', 'Daenerys Targaryen');
  3. INSERT INTO `CUSTOMER` (`id`, `name`) VALUES ('3', 'Sansa Stark');
  4. INSERT INTO `CUSTOMER` (`id`, `name`) VALUES ('4', 'Arya Stark');
  5. INSERT INTO `CUSTOMER` (`id`, `name`) VALUES ('5', 'Jorah Mormont');
  6. INSERT INTO `CUSTOMER` (`id`, `name`) VALUES ('6', 'Bronn of the Blackwater');

PRODUCT表中插入数据

  1. INSERT INTO `PRODUCT` (`id`, `name`, `price`) VALUES ('1', 'Dragon', '5000');
  2. INSERT INTO `PRODUCT` (`id`, `name`, `price`) VALUES ('2', 'Castle', '1000');
  3. INSERT INTO `PRODUCT` (`id`, `name`, `price`) VALUES ('3', 'Sword', '5');

ORDER表中插入数据

  1. INSERT INTO `ORDER` (`id`, `date`, `customer_id`, `product_id`, `quantity`) VALUES ('1', '2019-01-08 00:00:00', '2', '1', '3');
  2. INSERT INTO `ORDER` (`id`, `date`, `customer_id`, `product_id`, `quantity`) VALUES ('2', '2019-01-22 00:00:00', '6', '3', '1');
  3. INSERT INTO `ORDER` (`id`, `date`, `customer_id`, `product_id`, `quantity`) VALUES ('3', '2019-02-15 00:00:00', '6', '2', '1');
  4. INSERT INTO `ORDER` (`id`, `date`, `customer_id`, `product_id`, `quantity`) VALUES ('4', '2019-02-16 00:00:00', '1', '3', '1');

数据库表

现在这就是我们表中的内容:

SQL 右连接示例 - 图3

客户表

SQL 右连接示例 - 图4

产品表

SQL 右连接示例 - 图5

订单表

右连接表

现在,让我们使用RIGHT JOIN连接这些表

该查询返回客户详细信息和购买日期

  1. SELECT `CUSTOMER`.id, `CUSTOMER`.name, `ORDER`.date
  2. FROM `CUSTOMER`
  3. RIGHT JOIN `ORDER`
  4. ON `CUSTOMER`.id = `ORDER`.customer_id;

SQL 右连接示例 - 图6

右连接结果集

免责声明:上面显示的示例已经在 MySQL 上进行了测试。 根据您的 SQL 数据库,CREATE TABLE语法可能有所不同。