zoukankan      html  css  js  c++  java
  • SQL JOIN的用法

    背景:(血的教训)

      非常感谢能够有幸的去活力世纪面试,面试官非常的祥和,虽然最后没能够去成,但是非常的感谢,是他让我明白了自己还有很多需要去学习,每一次的面试不是为了去证明自己有多强,能拿多少的工资,而是去检验自己哪些方面还有不足,需要去努力,加油,为了更好的自己......之前在公司的代码中看到了关于一些left join的东西,但是没有太关注这些,刚好面试的时候问到了这些,现在刚好有时间,顺便的学习一遍,加强自己.......

    关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,废话就不多说了,直接进入主题,案例:

    可以参照博客:http://www.cnblogs.com/yiki/archive/2007/01/04/611452.html

    一、建表

    新建表一 table1            新建表二  table2

              

    一、外连接
    1.概念:包括左向外联接、右向外联接或完整外部联接

    2.左连接:left join 或 left outer join
    (1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
    (2)sql语句

    select * from table1 left join table2 on table1.id=table2.id

    -------------结果-------------

     注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示  不可以使用where作为条件的筛选噢,不然会报错的

    3.右连接:right join 或 right outer join
    (1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
    (2)sql语句

    select * from table1 right join table2 on table1.id=table2.id

    -------------结果-------------

     

    注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示

    4.完整外部联接:full join 或 full outer join 
    (1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
    (2)sql语句

    select * from table1 full join table2 on table1.id=table2.id

    我的数据库5.5中竟然不支持full join 所以我用了另外一种来代替

    select * from table1 left join table2 on table1.id=table2.id
    UNION 
    select * from table1 RIGHT JOIN table2 on table1.id=table2.id

    -------------结果-------------

    注释:返回左右连接的和(见上左、右连接)

    二、内连接
    1.概念:内联接是用比较运算符比较要联接列的值的联接

    2.内连接:join 或 inner join

    3.sql语句

    select * from table1 join table2 on table1.id=table2.id

    -------------结果-------------

    注释:只返回符合条件的table1和table2的列

    4.等价(与下列执行效果相同)
    A:select a.*,b.* from table1 a,table2 b where a.id=b.id
    B:select * from table1 cross join table2 where table1.id=table2.id  (注:cross join后加条件只能用where,不能用on)

    三、交叉连接(完全)

    1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)

    2.交叉连接:cross join (不带条件where...)

    3.sql语句

    select * from table1 cross join table2

    -------------结果-------------

    注释:返回3*3=9条记录,即笛卡尔积

    4.等价(与下列执行效果相同)
    A:select * from table1,table2      

  • 相关阅读:
    Jenkins发布.net core程序
    CentOS7部署Jenkins
    ASP.NET Core 中的响应缓存中间件
    浏览器缓存
    WEB缓存
    Jmeter常用插件——梯度加压、响应时间、TPS
    Jmeter压测报错:Non HTTP response code: java.net.ConnectExceptionexception的解决办法
    Linux如何安装rpm文件
    Prometheu---配置文件修改
    Grafana介绍---prometheus系列
  • 原文地址:https://www.cnblogs.com/antonyhubei/p/5600096.html
Copyright © 2011-2022 走看看