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

    Customers 表:

    1. +----+-------+
    2. | Id | Name |
    3. +----+-------+
    4. | 1 | Joe |
    5. | 2 | Henry |
    6. | 3 | Sam |
    7. | 4 | Max |
    8. +----+-------+

    Orders 表:

    +----+------------+
    | Id | CustomerId |
    +----+------------+
    | 1  | 3          |
    | 2  | 1          |
    +----+------------+
    

    例如给定上述表格,你的查询应返回:

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

    解决思路:查询CustomersOrders 然后将Customers表中id不在Orders中的数据查询出来。
    我的SQL:

    SELECT
        c. NAME AS Customers
    FROM
        Customers c
    WHERE
        c.id NOT IN (
            SELECT
                o.CustomerId
            FROM
                orders o
        )
    

    其他SQL:或者使用Left join 然后用Where条件过滤掉Customerid不是NUll的数据 留下是NULL的

    SELECT Name AS Customers
    FROM Customers c
        LEFT JOIN Orders o ON c.Id = o.CustomerId
    WHERE o.CustomerId IS NULL
    

    推荐使用第二种。因为我刚开始用SQL 所以还是第二种好一点,明了、