• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    sql join on 用法

    A left join B 的连接的记录数与A表的记录数同
    A right join B 的连接的记录数与B表的记录数同
    A left join B 等价B right join A


    table A:
    Field_K, Field_A
    1 a
    3 b
    4 c
    table B:
    Field_K, Field_B
    1 x
    2 y
    4 z
    select a.Field_K, a.Field_A, b.Field_K, b.Field_B from a left join b on a.Field_K=b.Field_K

    Field_K Field_A Field_K Field_B
    ---------- ---------- ---------- ----------
    1 a 1 x
    3 b NULL NULL
    4 c 4 z

    也就是说left join 则连接左边表中所有记录都会出现,如果根据连接条件在table2中找不到相关记录,则显示为null。
    right join 则显示右边表中的全部记录。inner join 则只有符合条件的记录才会出现在结果集中。
     

    EG2∶有两表a和b,前两字段完全相同:(id int,name varchar(10)...)
    id name
    ----------- ----------
    1 a
    2 b
    3 c




    以下的查询语句,你知道它的运行结果吗?:
    1.
    select * from a left join b on a.id=b.id where a.id=1


    2.
    select * from a left join b on a.id=b.id and a.id=1


    3.
    select * from a left join b on a.id=b.id and b.id=1


    4.
    select * from a left join b on a.id=1




    结果:
    id name id name
    ----------- ----------- ----------- -----------
    1 10 1 10

    (1 row(s) affected)

    id name id name
    ----------- ----------- ----------- -----------
    1 10 1 10
    2 20 NULL NULL
    3 30 NULL NULL

    (3 row(s) affected)

    id name id name
    ----------- ----------- ----------- -----------
    1 10 1 10
    2 20 NULL NULL
    3 30 NULL NULL

    (3 row(s) affected)

    id name id name
    ----------- ----------- ----------- -----------
    1 10 1 10
    1 10 2 20
    1 10 3 30
    2 20 NULL NULL
    3 30 NULL NULL

    (5 row(s) affected)




    思路:
    left join , 无非是左边表为基础, 扫描右边表匹配的记录

    先是左边表的第1条记录
    1 a
    按条件 a.id=1, 来扫描右边表的记录
    对于右边表的每条记录, 显然 a.id=1 这个条件都是成立的, 所以第1条记录匹配后的结果是:

    1 a 1 a
    1 a 2 b
    1 a 3 c

    ---------------------------------------------
    然后再扫描第2条记录
    2 b
    对于条件 a.id=1, 在边表中没有与之匹配的记录, 所以右边表为NULL
    因此第2条记录匹配的结果为
    2 b NULL NULL

    ----------------------------------------------
    第3条记录与第2条记录一样, 匹配的结果是
    3 c NULL NULL

    ---------------------------------------
    因此最终结果是5条记录
    1 a 1 a
    1 a 2 b
    1 a 3 c
    2 b null null
    3 c null null




    内联接(典型的联接运算,使用像 = 或 > 之类的比较运算符)。包括相等联接和自然联接。
    内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。

    外联接,外联接可以是左向外联接、右向外联接或完整外部联接。


    在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

    LEFT JOIN 或 LEFT OUTER JOIN。
    左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

    RIGHT JOIN 或 RIGHT OUTER JOIN。
    右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

    FULL JOIN 或 FULL OUTER JOIN。
    完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

    交叉联接。
    交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

    您可能感兴趣的文章:
    • 数据库中的左连接(left join)和右连接(right join)区别
    • 数据库Left join , Right Join, Inner Join 的相关内容,非常实用
    • CI框架数据库查询之join用法分析
    • SQL中JOIN和UNION区别、用法及示例介绍
    • 浅析Mysql Join语法以及性能优化
    • MySQL JOIN之完全用法
    • sql 左连接和右连接的使用技巧(left join and right join)
    • SQL的Join使用图解教程
    • 一篇文章带你了解数据库中JOIN的用法
    上一篇:postgresql sql批量更新记录
    下一篇:SQL 按特定字段值排序
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    sql join on 用法 sql,join,用法,sql,join,用法,