0
点赞
收藏
分享

微信扫一扫

6.联结表

树下的老石头 2022-03-14 阅读 55

        SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用 SQL的 SELECT 能执行的最重要的操作。

1、创建联结表

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

        这条语句的 FROM子句列出了两个表: Vendors 和 Products 。它们就是这条 SELECT 语句
联结的两个表的名字。这两个表用 WHERE 子句正确地联结, WHERE 子句指示 DBMS将 Vendors 表中的 vend_id 与 Products 表中的 vend_id 匹配起来。

        要保证所有联结都有where子句,如果没有联结条件的表关系则返回的结果为笛卡儿积,也成为叉联结(检索出的行的数目将是第一个表中的行数乘以第二个表中的行数)。 

2、内联结

        目前为止使用的联结称为等值联结( equijoin),它基于两个表之间的相等测试。这种联结也称为内联结(inner join)。 

        其实,可以对这种联结使用稍微不同的语法,明确指定联结的类型。下面的 SELECT 语句返回与前面例子完全相同的数据:  

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

        两个表之间的关系是以 INNER JOIN 指定,联结条件用特定的 ON 子句代替where子句。 

3、联结多个表

        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

        这个例子显示订单 20007 中的物品。订单物品存储在 OrderItems 表中。每个产品按其产品 ID存储,它引用 Products 表中的产品。这些产品通过供应商 ID联结到 Vendors 表中相应的供应商,供应商 ID存储在每个产品的记录中。这里的 FROM 子句列出三个表, WHERE 子句定义这两个联结条件,而第三个联结条件用来过滤出订单 20007 中的物品。 

        以下两个查询结果是一样的:

        ① 子查询

        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 = 'RGAN01'
));

        ②联结查询

        SELECT cust_name, cust_contact
        FROM Customers, Orders, OrderItems
        WHERE Customers.cust_id = Orders.cust_id
        AND OrderItems.order_num = Orders.order_num
        AND prod_id = 'RGAN01'

举报

相关推荐

6.面向对象

6. 类再生

6.动态语句

6. 依赖注入

6.进程概述

6.动静分离

0 条评论