SQL左连接示例

时间:2020-02-23 14:41:04  来源:igfitidea点击:

本文解释了SQL左连接语法,并给出了一个如何使用左连接的示例

Left join返回左表中的所有值,加上右表中匹配的值。如果右表中与左表中的给定记录不匹配,则结果值将返回为NULL。

左连接和左外部连接在术语上是相同的。

左连接语法

此查询将返回左表(表A)中的所有记录,而不管右表(表B)中是否有匹配的记录

SELECT Table_A.column1, Table_B.column2...
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

左连接示例

我们将创建3个表

  • 客户

  • 产品

  • 命令

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

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

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

创建客户表

CREATE TABLE `CUSTOMER` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));

创建产品表

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

创建订单表

CREATE TABLE `ORDER` (
`id` INT NOT NULL,
`date` DATETIME NOT NULL,
`customer_id` INT NOT NULL,
`product_id` INT NOT NULL,
`quantity` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `product_id_idx` (`product_id` ASC) VISIBLE,
INDEX `customer_id_idx` (`customer_id` ASC) VISIBLE,
CONSTRAINT `customer_id`
  FOREIGN KEY (`customer_id`)
  REFERENCES `CUSTOMER` (`id`),
CONSTRAINT `product_id`
  FOREIGN KEY (`product_id`)
  REFERENCES `PRODUCT` (`id`));

在客户表中插入数据

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

在产品表中插入数据

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

在订单表中插入数据

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

数据库表

现在我们的表是这样的:

  • 客户表

  • 产品表

  • 订单表

左连接表

现在,让我们用 左连接连接这些表

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

SELECT `CUSTOMER`.id, `CUSTOMER`.name, `ORDER`.date
FROM `CUSTOMER`
LEFT JOIN `ORDER` 
ON `CUSTOMER`.id = `ORDER`.customer_id;