SQL右连接示例
时间:2020-02-23 14:41:05 来源:igfitidea点击:
本文解释了SQL右连接语法,并给出了一个如何使用右连接的示例
Right join返回右表中的所有值,加上左表中匹配的值。如果左表中没有右表中给定记录的匹配项,则结果值将返回为NULL。
右连接和右外部连接在术语上是相同的。
右连接语法
此查询将返回左表(表A)中的所有记录,而不管右表(表B)中是否有匹配的记录
SELECT Table_A.column1, Table_B.column2... FROM Table_A A RIGHT 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` RIGHT JOIN `ORDER` ON `CUSTOMER`.id = `ORDER`.customer_id;