• 12 联结表


    12.1 使用联结

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


    12.2 创建联结

    创建联结的方法是:指定要联结的所有表以及关联它们的方式。

    看这样一个例子:

    SELECT vend_name, prod_name, prod_price
    FROM vendors, products
    WHERE vendors.vend_id = products.vend_id
    ORDER BY vend_name, prod_name;

    输出的结果是:

    SELECT语句所指定的两个列(prod_name和prod_price)在一个表中,而另一个列(vend_name)在另一个表中。 FROM子句列出了两个表,分别是vendors和products。它们就是这条SELECT 语句联结的两个表的名字。这两个表用WHERE子句正确联结, WHERE子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id。

    可 以 看 到 要 匹 配 的 两 个 列 以 vendors.vend_id 和 products.vend_id指定。这里需要这种完全限定列名,因为如果只给出vend_id, 则MySQL不知道指的是哪一个(它们有两个,每个表中一个)。

    12.2.1 使用WHERE的重要性

    这里引入笛卡尔积的概念:

    由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
    上面的例子中,如果没有WHERE子句,得到的结果就是笛卡尔积结果。

    12.2.2 内部联结

    前面所描述的联结都是等值联结,也叫内部联结。
    下面的SELECT语句返回与前面例子完全相同的数据:

    SELECT vend_name, prod_name, prod_price
    FROM vendors INNER JOIN products
    ON vendors.vend_id = products.vend_id;

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

    12.2.3 联结多个表


    在上一章子查询我们举了一个例子

    SELECT cust_name, cust_contact
    FROM customers
    WHERE cust_id IN ( SELECT cust_id 
                FROM orders
                WHERE order_num IN ( SELECT order_num
                                            FROM orderitems
                                            WHERE prod_id = 'TNT2'; ) );

    如果改成多表联结,可以这样改:

    SELECT cust_name, cust_contact
    FROM customers, orders,  orderitems
    WHERE customers. cust_id = orders. cust_id 
    AND orders.order_num =  orderitems. order_num 
    AND prod_id = 'TNT2';           
                
  • 相关阅读:
    如果 TCP 是一场恋爱:遇到心动的女孩时,如何去把握?
    再来聊一聊「动态规划」
    如何判断一个数是否在 40 亿个整数中?
    写代码之外,如何再赚一份工资?
    学好这13种数据结构,应对各种编程语言(C++版)
    GitHub 标星 3w+,很全面的算法和数据结构知识
    和程序员小吴学算法文章导航
    Broadcast组件——收发广播应用——捕获屏幕的变更事件——竖屏与横屏切换
    homebrew
    git连接gitlab远程仓库
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10159225.html
Copyright © 2020-2023  润新知