leetcode(mysql) 从不订购的客户

                                              从不订购的客户

 

1、题目:  

   某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

    Customers 表:

        +----+-------+
        | Id | Name  |
        +----+-------+
        | 1  | Joe   |
        | 2  | Henry |
        | 3  | Sam   |
        | 4  | Max   |
        +----+-------+
    Orders 表:

        +----+------------+
        | Id | CustomerId |
        +----+------------+
        | 1  | 3          |
        | 2  | 1          |
        +----+------------+
    例如给定上述表格,你的查询应返回:

        +-----------+
        | Customers |
        +-----------+
        | Henry     |
        | Max       |
        +-----------+

2、解题步骤:

    (1) 创建表:             

CREATE TABLE `customers`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `Name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '客户姓名',
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '客户表' ROW_FORMAT = Dynamic;
CREATE TABLE `orders`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `customerId` int(11) DEFAULT NULL COMMENT '客户Id',
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic;


    (2) 插入数据:

INSERT INTO `customers` VALUES (1, 'Joe');
INSERT INTO `customers` VALUES (2, 'Henry');
INSERT INTO `customers` VALUES (3, 'Sam');
INSERT INTO `customers` VALUES (4, 'Max');
INSERT INTO `orders` VALUES (1, 3);
INSERT INTO `orders` VALUES (2, 1);

    (3) 查询SQL:   

        a、方案一:数据量小的时候建议使用。      

SELECT *
FROM customers
WHERE Id NOT IN (
	SELECT customerId
	FROM orders
);


        b、方案二:数据量大的时候建议使用。

SELECT a.*
FROM customers a
	LEFT JOIN orders b ON a.Id = b.customerId
WHERE b.customerId IS NULL;


    (4) 运行结果:
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值