美文网首页
10. 连接表

10. 连接表

作者: 柄志 | 来源:发表于2018-09-10 23:54 被阅读0次

    连接表

    连接

    • 连接用于检索存储在多个表中的数据
    • 连接是一种机制,用来在一条SELECT 语句中关联表,可连接多个表返回一组输出

    内连接(等值连接)

    • 基于两个表之间的相等测试,称为内连接(inter join)或等值连接(equijoin)
    -- ANSI规范首选 INTER JOIN 语法
    SELECT column_name1,column_name2,column_name3
    FROM table1 INTER JOIN table2 INTER JOIN table3
    ON table1.column_name1 = table2.column_name1;
    
    -- 简单的等值语法
    
    SELECT column_name1,column_name2,column_name3
    FROM table1,table2
    WHERE table1.column_name1 = table2.column_name1;
    
    • 通过WHERE 子句实现表的连接
    • 在连接两个表时,实际是将第一个表中的每一行与第二个表中的每一行进行配对
    • 引用的列可能出现歧义时,必须使用完全限定列名
    • SQL 不限制一条SELECT 语句中可以连接表的数目,但连接的表越多,性能就下降得越厉害

    笛卡尔积(cartesian product)

    由没有连接条件的表关系返回的结果为笛卡尔积,检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。返回笛卡尔积的连接,也称叉连接。

    使用表别名

    • SQL 除了可对列名和计算字段使用别名,还允许给表名起别名
    • 表别名只在查询执行中使用,与列别名不同的是表别名不返回到客户端
    • 使用表别名可缩短SQL 语句,并允许在一条SELECT 语句中多次使用相同的表
    SELECT column_name1,column_name2
    FROM table1 AS T1, table2 AS T2
    WHERE T1.column_name3 = T2.column_name3;
    

    自连接(self-join)

    • 自连接通常作为外部语句,用来替代从相同表中检索数据的子查询语句
    • 大多DBMS处理连接的速度往往比处理子查询快
    SELECT T1.column_name1,T1.column_name2
    FROM table1 AS T1,table2 AS T2
    WHERE T1.column_name1 = T2.column_name1
      AND T2.column_name = 'str';
    

    自然连接(natural join)

    • 标准的连接(即内连接)返回所有的数据,相同的列甚至多次出现
    • 自然连接排除多次出现,使每一列值返回一次
    • 自然连接一般通过对一个表使用通配符(SELECT *),而对其他表的了使用明确的子集来完成

    外连接(outer join)

    • 外连接包含了那些在相关表中没有关联的行
    • SELECT 语句使用OUTER JOIN 语句指定外连接类型
    • 使用OUTER JOIN 语法时,必须使用LEFT 或RIGHT 关键字指定包括其所有行的表
    • 左外连接(LEFT OUTER JOIN)指出OUTER JOIN 左边的表,右外连接反之
    • 调整FROM 或WHERE 子句中表的顺序,可“互换”左右外连接
    SELECT table1.column_name1,table1.column_name2,table2.column_name3
    FROM table1 LEFT OUTER JOIN table2
      ON table1.column_name1 = table2.column_name1;
    

    使用带聚集函数的连接

    SELECT table1.column_name1,
           COUNT(table2.column_name2) AS num
    FROM table1 LEFT OUTER JOIN table2
      ON table1.column_name1 = table2.column_name1
    -- 此处应使用GROUP BY,否则报错
    GROUP BY table1.column_name1;
    

    相关文章

      网友评论

          本文标题:10. 连接表

          本文链接:https://www.haomeiwen.com/subject/qyfygftx.html