zoukankan      html  css  js  c++  java
  • SQL的JOIN语句

    在使用数据库,进行查询的时候,经常会出现表中信息不全,需要连接另一张表来查询需要的数据。SQL的连接主要分为内连接、外连接。
    使用如下两个表进行演示。

    • 学生表(student)
    id name age cid
    1 张三 23 1
    2 李四 23 2
    3 李四 34 2
    4 赵六 44 4
    • 班级(class)
    cid cname
    1 一班
    2 二班
    3 三班

    内连接(INNER JOIN)

    单独使用join的话,默认为内连接。内连接会只会查询出两个表匹配到的条目,没有匹配上的条目不会在结果集中出现。使用如下语句进行查询。

    select * from student std 
    join class cla
    on std.cid = cla.cid

    查询结果如下,会将匹配到的连接全部查询出来。

    id name age cid cid cname
    1 张三 23 1 1 一班
    2 李四 23 2 2 二班
    3 王五 34 2 2 二班

    外连接

    外连接的结果集则不仅仅是匹配到的行,也可以将一些没有关联匹配到的行显示出来。外连接分为左外连接、右外连接和全外连接。

    左外连接(LEFT JOIN或LEFT OUTER JOIN)

    左外连接可以保证关联时,左表的完整性。会查询出关联中左表(join左边,这里为std)的全部条目,若右表未匹配到关联条目,则为null。

    select * from student std 
    left join class cla
    on std.cid = cla.cid

    查询结果如下,会将左表全部查询出来,如果未匹配到连接,则右表为null。

    id name age cid cid cname
    1 张三 23 1 1 一班
    2 李四 23 2 2 二班
    3 王五 34 2 2 二班
    4 赵六 44 4 null null

    右外连接(RIGHT JOIN或RIGHT OUTER JOIN)

    右外连接是左外连接的反向连接,可以保证右表的完整性,若左表未匹配到关联条目则为null。因此a left join bb right join a结果集相同,只是左右位置互换。

    select * from student std 
    right join class cla
    on cla.cid = std.cid

    查询结果如下,会将右表全部查询出来,如果未匹配到连接,则左表为null。

    id name age cid cid cname
    1 张三 23 1 1 一班
    2 李四 23 2 2 二班
    3 王五 34 2 2 二班
    null null null null 3 三班

    全外连接(FULL JOIN 或 FULL OUTER JOIN)

    全外连接可以同时保证左表和右表的完整性,查询结果返回两张表的所有行,若某行在另一张表中没有匹配行时,则该行在另一个表中的值为null。

    select * from student std 
    full join class cla
    on cla.cid = std.cid

    查询结果如下。

    id name age cid cid cname
    1 张三 23 1 1 一班
    2 李四 23 2 2 二班
    3 王五 34 2 2 二班
    4 赵六 44 4 null null
    null null null null 3 三班

    PS:mysql不支持FULL JOIN,可用LEFT JOIN UNION RIGHT JOIN替代

    笛卡儿积(CROSS JOIN)

    笛卡儿积,又称交叉连接。会返回两张表的每一条数据的所有组合,如果在SQL中关联却没有给出关联条件,会产生笛卡儿积。也可以使用交叉连接,CROSS JOIN来查询笛卡儿积。

    select * from student std 
    CROSS JOIN class cla

    查询结果如下,结果集为两表的乘积。

    id name age cid cid cname
    1 张三 23 1 1 一班
    1 张三 23 1 2 二班
    1 张三 23 1 3 三班
    2 李四 23 2 1 一班
    2 李四 23 2 2 二班
    2 李四 23 2 3 三班
    3 王五 34 2 1 一班
    3 王五 34 2 2 二班
    3 王五 34 2 3 三班
    4 赵六 44 4 1 一班
    4 赵六 44 4 2 二班
    4 赵六 44 4 3 三班
  • 相关阅读:
    python sys.path.append
    python中的map()函数
    python中的map、filter、reduce函数
    上传文件2.0--drp203
    The import org.apache.commons.fileupload cannot be resolved
    让我会好好学习一阵子的东西
    【JSP】--Error错误页设置,声明式异常--188 drp
    【JSP】--重定向,转发--186 drp
    【JSP】--路径问题--如何去掉../,直接写绝对路径
    主备切换,双机热备,负载均衡,nginx
  • 原文地址:https://www.cnblogs.com/enhe/p/12141715.html
Copyright © 2011-2022 走看看