美文网首页MySQL
MySQL 表连接

MySQL 表连接

作者: RicherYY | 来源:发表于2020-04-13 21:30 被阅读0次

    内连接

    MySQL中INNER JOIN表示一个表中的一行数据和另一个表中的数据进行匹配。简单来说就是想查两个表的数据,如果不用内连接的话查出的数据会有重复。产生笛卡儿积,所以要使用内连接。

    用法

    假设查询两个表的时候t1和t2

    SELECT 
        column_list
    FROM 
        t1
    INNER JOIN t2 ON join_condition;
    

    例子

    数据库的ER图

    [图片上传失败...(image-dcfd3c-1586784611965)]

    • 查询products表中的productCodeproductName列的值。
    • 查询productlines表产品线的描述textDescription列的值.
    SELECT 
        t1.productCode, 
        t1.productName, 
        t2.textDescription
    FROM
        products t1
            INNER JOIN
        productlines t2 ON t1.productline = t2.productline;
    

    查询结果

    [图片上传失败...(image-441d5f-1586784611966)]

    补充

    USING

    由于两个表的连接列是使用相同一个列:productline,因此可以使用以下语法

    SELECT 
        productCode, 
        productName, 
        textDescription
    FROM
        products
            INNER JOIN
        productlines USING (productline);
    

    结果一样


    联表查询

    SELECT 
       t1.productCode, 
       t1.productName, 
       t2.textDescription
    FROM
        products t1,
        productlines t2
    WHERE
    t1.productline = t2.productline;
    

    结果一样

    左连接 LEFT JOIN

    左连接就是两个表或者多个表以上的数据,进行对比。左表和右表不匹配时值可以为空

    用法

    SELECT 
        t1.c1, 
        t1.c2, 
        t2.c1, 
        t2.c2
    FROM
        t1
            LEFT JOIN
        t2 ON t1.c1 = t2.c1;
    
    

    例子

    两个表的ER 图如下所示

    [图片上传失败...(image-b3d9fe-1586784611966)]

    • 订单(orders)表中的每个订单必须属于客户(customers)表中的客户。
    • 客户(customers)表中的每个客户在订单(orders)表中可以有零个或多个订单。
    SELECT
     c.customerNumber,
     c.customerName,
     o.orderNumber,
     o.status
    FROM
     customers c
    LEFT JOIN orders o ON c.customerNumber = o.customerNumber;
    

    结果

    [图片上传失败...(image-4b6227-1586784611966)]

    可以看到结果集中有的客户订单号为NULL也就是说有,有的客户根本没有买过任何东西,没有任何订单。

    补充

    USING

    SELECT
     c.customerNumber,
     customerName,
     orderNumber,
     status
    FROM
     customers c
    LEFT JOIN orders USING (customerNumber);
    

    结果一样

    使用MySQL LEFT JOIN子句来查找不匹配的行

    当您想要找到右表中与不匹配的左表中的行时,LEFT JOIN子句非常有用。要查询两个表之间的不匹配行,可以向SELECT语句添加一个WHERE子句,以仅查询右表中的列值包含NULL值的行。

    例如,要查找没有下过订单的所有客户,请使用以下查询:

    SELECT 
        c.customerNumber, 
        c.customerName, 
        o.orderNumber, 
        o.status
    FROM
        customers c
            LEFT JOIN
        orders o ON c.customerNumber = o.customerNumber
    WHERE
        orderNumber IS NULL;
    

    结果

    [图片上传失败...(image-74a095-1586784611966)]

    相关文章

      网友评论

        本文标题:MySQL 表连接

        本文链接:https://www.haomeiwen.com/subject/dydomhtx.html