• sql连接详解


    笛卡尔乘积:

    A={a, b},集合B={0, 1, 2},则AxB的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)};

    (AxB≠BxA)

    数据库中内连接与多表查询的区别  

    sql = "select [个人信息$].*,[工作经历$].* from [个人信息$],[工作经历$] where [个人信息$].UID=[工作经历$].UID"

    sql = "select [个人信息$].*,[工作经历$].* from [个人信息$] inner  join [工作经历$] on [个人信息$].UID=[工作经历$].UID"  

    第一种是普通的多表查询,内部还是笛卡尔积的逐行的搜索机制,如果查询的几张表数据量大的话会降低性能;

    第二种是内连接。两种方式得到的结果是一致的。inner join(等值连接) 只返回两个表中联结字段相等的行的记录。          

    从结果上看一样。        

     但是从实现上看,多个from是笛卡尔集,再筛选,效率是O(n^2),很差。                                    

     join是先做hash,再匹配,效率是O(logN),很好。          

    推荐使用内连接。SQL规格推荐也是用join的。

    连接查询的分类

    1. 交叉连接(就是没有连接条件的“全部连接”)

    形式: from  表1  [cross]  join  表2  或 from  表1,表2;

    结果:两张表的笛卡尔积

    2. 内连接

    形式:from  表1  [inner] join  表2  on  表1.字段1 = 表2.字段2;

    结果:取得一个“交叉连接”的结果中,满足所设定的连接条件(就是on后面的条件)的那些行的数据。

    3. 左(外)连接 

    形式:from  表1  left [outer] join  表2  on  表1.字段1 = 表2.字段2;

    结果:内连接数据+左表不满足连接条件的列,null(一对多时,左表列会重复。学生表->学生成绩表)

    是将两个表的满足连接条件的所有数据(即内连接数据), 再加上那些“左边”表中,不能满足连接条件的数据的总和。 对于左边表中不能满足条件的数据,在结果中的右边部分,都补上“null”

    4. 右(外)连接

    参考左外连接。

    5. 全(外)连接

    形式:from  表1  full [outer]  join  表2  on  表1.字段1 = 表2.字段2;

    左外链接和右外连接之并集。mysql不支持全外连接,可以用union替代。

  • 相关阅读:
    牛客小白月赛16E
    洛谷P1309 瑞士轮
    洛谷P1781 宇宙总统
    洛谷P1068 分数线划定
    洛谷P1059 明明的随机数(桶排思想)
    洛谷P1177 【模板】快速排序 (归并排序)
    Python基础-----sys模块
    Python基础-----模块导入注意事项
    Python基础-----os模块
    Python基础-----random随机模块(验证码)
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/10337945.html
Copyright © 2020-2023  润新知