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 三班
  • 相关阅读:
    【Javascript】javascript学习 二十二 JavaScript 对象简介
    【Javascript】javascript学习 二十六 JavaScript Boolean(逻辑)对象
    【Javascript】javascript学习 二十九 JavaScript HTML DOM 对象
    【Javascript】javascript学习 二十八 JavaScript RegExp 对象
    【Javascript】javascript学习 二十一 JavaScript 指导方针
    【Javascript】javascript学习 二十三 JavaScript 字符串(String)对象
    【Javascript】javascript学习 三十 JavaScript 浏览器检测
    【Javascript】javascript学习 二十五 JavaScript Array(数组)对象
    【Javascript】javascript学习 二十四 JavaScript Date(日期)对象
    【Javascript】javascript学习 二十七 JavaScript Math(算数)对象
  • 原文地址:https://www.cnblogs.com/enhe/p/12141715.html
Copyright © 2011-2022 走看看