美文网首页我爱编程
【MySQL必知必会】第15章:

【MySQL必知必会】第15章:

作者: 100gle | 来源:发表于2018-04-09 16:38 被阅读23次

    15.1 联结

    SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表,但在掌握联结之前需要了解一下的名词概念:

    关系表

    关系表是指包含了共同关联列的众多表格,一般表格的数量大于等于2

    主键和外键

    • 主键指一个表中的唯一标识字段(简单理解为身份证ID)
    • 外键是指的是一个表中的某列是另一个表中的主键值

    15.2 创建联结

    简单联结

    基本的联结通过WHERE子句就可以进行创建:

    SELECT vend_name, prod_name, prod_price
    FROM vendors, products
    WHERE vendors.vend_id = products.vend_id
    ORDER BY vend_name, prod_name;
    
    • 在这里通过WHERE以及完全限定列名来建立起两个表格中的vend_id的联结,并且将结果返回
    • 为了保证返回结果的准确性,在使用WHERE子句时需要保证其正确

    笛卡尔积

    没有联结条件的表返回的结果为笛卡尔积,即检索出的行的数目N是第一个表中的行树n乘以第二个表中的行数m
    可以近似理解为,当第一列中只有5个值($n=5$),第二列中有10个值($m=10$),那么返回的笛卡尔积就是50($N=nm=510$),此时返回的行数就50行

    15.3 内联结

    使用WHERE语句来进行联结是等值联结(即一一对应),等值联结也称为内联结,但是其并不使用WHERE子句,而是使用其他语法:

    SELECT vend_name, prod_name, prod_price
    FROM vendors INNER JOIN products
    ON vendors.vend_id = products.vend_id;
    
    • 这里INNER JOIN表明了两个表之间的关系,然后通过ON来传递条件(实际与WHERE传递)相同
    • 虽然使用WHERE子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结件;不过有时候这样做也影响性能

    15.4 多表联结

    SELECT语句中可联结的表的数目没有限制,创建联结也基本类似:

    SELECT prod_name, vend_name, prod_price, quantity
    FROM orderitems, products, vendors
    WHERE products.vend_id = vendors.vend_id
        AND orderitems.prod_id = products.prod_id
        AND order_num = 20005;
    
    • 这里通过WHERE和AND的灵活组合,可以指定多个联结条件
    • 但是正如前面提到的,使用过多的联结会导致性能下降,这就需要减少不必要联结的表

    相关文章

      网友评论

        本文标题:【MySQL必知必会】第15章:

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