• 第12课 联结表


    第12课 联结表

    12.1 联结

    SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。

    12.1.1 关系表

    关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联(所以才叫关系数据库)。

    12.1.2 为什么使用联结

    联结是一种机制,用来在一条SELECT语句中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。

    12.2 创建联结

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

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

    要匹配的两列指定为Vendors.vend_id和Products.vend_id。这里需要这种完全限定列名,如果只给出vend_id,DBMS就不知道指的是哪一个(每个表中有一个)。

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

    12.2.1 WHERE子句的重要性

    SELECT vend_name, prod_name, prod_price
    FROM Vendors, Products;
    

    从上面的输出可以看到,相应的笛卡儿积不是我们想要的。这里返回的数据用每个供应商匹配了每个产品,包括了供应商不正确的产品(即使供应商根本就没有产品)。

    警告:不要忘了WHERE子句
    要保证所有联结都有WHERE子句,否则DBMS将返回比想要的数据多得多的数据。

    12.2.2 内联结

    明确指定联结的类型。

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

    这里,两个表之间的关系是以INNER JOIN指定的部分FROM子句。在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句给出。传递给ON的实际条件与传递给WHERE的相同。

    说明:“正确的”语法
    ANSI SQL规范首选INNER JOIN语法,之前使用的是简单的等值语法。

    12.2.3 联结多个表

    SQL不限制一条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 = 20007;
    

    12.3 小结

    联结是SQL中一个最重要、最强大的特性,有效地使用联结需要对关系数据库设计有基本的了解。

  • 相关阅读:
    Codeforces 50A
    Codeforces 50A
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/zhangsonghui/p/13258733.html
Copyright © 2020-2023  润新知