美文网首页
SQL连表查询

SQL连表查询

作者: 丢了发型的男人 | 来源:发表于2018-11-27 15:44 被阅读0次

    连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。

    1、Union

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。

    当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

    注意:使用UNION时,两张表查询的结果有相同数量的列、列类型相似。


    预置脚本:

       INSERT INTO Students(ID,Name,Age,City,MajorID) VALUES(101,'Tom',20,'BeiJing',10)
       INSERT INTO Students(ID,Name,Age,City,MajorID) VALUES(102,'Lucy',18,'ShangHai',11)
    
       INSERT INTO Teachers(ID,Name) VALUES(101,'Mrs Lee')
       INSERT INTO Teachers(ID,Name) VALUES(102,'Lucy')
    

    1)基本UNION查询,查询学校教师、学生的总的信息表,包括ID和姓名

          SELECT ID,Name FROM Students
          UNION
          // UNION ALL 查询全部
          SELECT ID,Name FROM Teachers
    

    查询结果:

    2、INNER JOIN(内连接)

    特性:只显示连接表都有的关联数据! 最常用的连接方式,INNER 可以不用写

    A表 ————————————————————————B表
        SELECT * FROM A JOIN B ON A.id = B.aid;
    

    结果:

    3、外连接

    特性:与内连接相比,即使没有匹配行,也会返回一个表的全集
    外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。通常我们省略outer 这个关键字。写成:LEFT/RIGHT/FULL JOIN。
    重点:至少有一方保留全集,没有匹配行用NULL代替。

    LEFT JOIN 左连接
    例: 用内连接的例子

        SELECT * FROM A LEFT JOIN B ON A.id = B.aid; 只显示 3 条数据
    

    结果:


    RIGHT JOIN 右连接
    例:
        SELECT * FROM A RIGHT JOIN B ON A.id = B.aid; 只显示 3 条数据
    

    结果:


    CROSS JOIN 全连接(交叉连接)
    交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。
    简单查询两张表组合,这是求笛卡儿积,效率最低。

    笛卡儿积:笛卡尔乘积,也叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有学生爱好的集合,则A与B的笛卡尔积表示所有可能的爱好情况。
    例:

    image.png

    一次查询多表

    SELECT name,hobby FROM A,B 结果与交叉连接一样

    相关文章

      网友评论

          本文标题:SQL连表查询

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