• CROSS JOIN——交叉联结


    对满足相同规则的表进行交叉联结的集合运算符是 CROSS JOIN(笛卡儿积)。进行交叉联结时无法使用内联结和外联结中所使用的 ON 子句,这是因为交叉联结是对两张表中的全部记录进行交叉组合,因此结果中的记录数通常是两张表中行数的乘积。

    内联结是交叉联结的一部分,“内”也可以理解为“包含在交叉联结结果中的部分”。相反,外联结的“外”可以理解为“交叉联结结果之外的部分”。

    联结的特定语法和过时语法

    旧:

    SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
    FROM ShopProduct SP, Product P
    WHERE SP.product_id = P.product_id
    --AND SP.shop_id = '000A';

    新:

    SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
    FROM ShopProduct AS SP INNER JOIN Product AS P
    ON SP.product_id = P.product_id;

    这样的书写方式所得到的结果与标准语法完全相同,并且这样的语法可以在所有的 DBMS 中执行,并不能算是特定的语法,只是过时了而已。
    但是,由于这样的语法不仅过时,而且还存在很多其他的问题,因此不推荐大家使用,理由主要有以下三点。
    第一,使用这样的语法无法马上判断出到底是内联结还是外联结(又或者是其他种类的联结)。
    第二,由于联结条件都写在 WHERE 子句之中,因此无法在短时间内分辨出哪部分是联结条件,哪部分是用来选取记录的限制条件。
    第三,我们不知道这样的语法到底还能使用多久。每个 DBMS 的开发者都会考虑放弃过时的语法,转而支持新的语法。虽然并不是马上就不能使用了,但那一天总会到来的。
    虽然这么说,但是现在使用这些过时语法编写的程序还有很多,到目前为止还都能正常执行。我想大家很可能会碰到这样的代码,因此还是希望大家能够了解这些知识。

  • 相关阅读:
    django-rest-framework之基于类的视图
    django-rest-framework之请求与响应
    django-rest-framework之序列化
    Linux上安装二进制文件MySQL详解
    django-rest-framework快速入门
    初识RESTful
    layer弹出层详解
    Jquery.validate.js表单验证
    实习总结
    常见的攻击手段及其防御方式
  • 原文地址:https://www.cnblogs.com/philipchan/p/14337591.html
Copyright © 2020-2023  润新知