zoukankan      html  css  js  c++  java
  • SQL 必知必会·笔记<10>联结表

    可伸缩(scale)

    能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序 称为可伸缩性好(scale well)。

    联结(JOIN)

    联结(JOIN)是一种机制,用来在一条SELECT 语句中关联表,因此称为联结

    创建联结

    创建联结非常简单,指定要联结的所有表以及关联它们的方式即可:

    1 SELECT vend_name, prod_name, prod_price
    2 FROM Vendors, Products
    3 WHERE Vendors.vend_id = Products.vend_id;

    警告:完全限定列名

    在引用的列可能出现歧义时,必须使用完全限定 列名(用一个句点分隔表名和列名)。如果引用一个没有用表名限制的 具有歧义的列名,大多数DBMS 会返回错误。

    1. WHERE子句的重要性

    使用WHERE 子句建立联结关系似乎有点奇怪,但实际上是有个很充分的 理由的。要记住,在一条SELECT 语句中联结几个表时,相应的关系是 在运行中构造的

    笛卡儿积(cartesian product)

    由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目 将是第一个表中的行数乘以第二个表中的行数。

    注意:不要忘了WHERE 子句

    要保证所有联结都有WHERE 子句,否则DBMS 将返回比想要的数据多 得多的数据。同理,要保证WHERE 子句的正确性。不正确的过滤条件 会导致DBMS 返回不正确的数据。

    提示:叉联结

    有时,返回笛卡儿积的联结,也称叉联结(cross join)。

    2. 内联结

    基于两个表之间的相等测试的等值联接。这种联结也称为内联结(inner join

    和之前简单等值语法相同的内联查询:

    1 SELECT vend_name, prod_name, prod_price
    2 FROM Vendors INNER JOIN Products
    3 ON Vendors.vend_id = Products.vend_id;

    3. 联结多个表

    SQL 不限制一条SELECT 语句中可以联结的表的数目。创建联结的基本 规则也相同。首先列出所有表,然后定义表之间的关系。例如:

    1 SELECT prod_name, vend_name, prod_price, quantity
    2 FROM OrderItems, Products, Vendors
    3 WHERE Products.vend_id = Vendors.vend_id
    4 AND OrderItems.prod_id = Products.prod_id
    5 AND order_num = 20007;

    注意:性能考虑

    DBMS 在运行时关联指定的每个表,以处理联结。这种处理可能非常 耗费资源,因此应该注意,不要联结不必要的表。联结的表越多,性 能下降越厉害。

    提示:多做实验

    可以看到,执行任一给定的SQL 操作一般不止一种方法。很少有绝对 正确或绝对错误的方法。性能可能会受操作类型、所使用的DBMS、 表中数据量、是否存在索引或键等条件的影响。因此,有必要试验不 同的选择机制,找出最适合具体情况的方法。

  • 相关阅读:
    《Mysql
    《Redis
    《pt-query-digest 剖析 Mysql 慢日志》
    《Redis
    《Redis
    《Redis
    《Redis
    《Redis
    python中__new__()与__init__()的区别
    Python常见综合面试题
  • 原文地址:https://www.cnblogs.com/IPrograming/p/3297373.html
Copyright © 2011-2022 走看看