zoukankan      html  css  js  c++  java
  • mysql开发之join语句学习

    内连接:inner
    join --
    全外链接:full outer
    左外连接:left outer
    右外连接:right outer
    交叉连接:cross
    内连接,两个表中重复部分
    全外连接,两个表所有字段
    左外连接,显示左表所有字段和左右表重复字段
    右外连接,显示右表所有字段和左右表重复字段
    交叉连接,左表每个记录乘以右表每个记录,如果左表4个记录,右表3个记录,3*4=12个记录
    如果表中没有数据,显示为Null

    内连接(inner join) 可以选取A表和B表的交集  select 字段 from A表 a表别名 inner join B表 b表别名 on a.字段=b.字段;

    LEFT OUTER JOIN:包含左表中的所有数据,当某个连接谓词不在右表中时,新生成的表的右表字段为NULL。对左表数据的信息进行扩展,增加右表中的字段,当某个连接谓词不在右表中时,新生成的表的右表字段为NULL。
    
    使用LEFT OUTER JOIN对NOT IN 进行优化。
    SELECT select_sxpressions
    FROM TABLE A LEFT OUTER JOIN TABLE B ON A.key=B.key
    WHERE B.key IS NULL;
    表A中不包含表B中的数据。
    SELECT select_sxpressions
    FROM TABLE A LEFT OUTER JOIN TABLE B ON A.key=B.key
    WHERE B.key IS NOT NULL;
    表A与表B的交集,相当于INNER JOIN。

    RIGHT OUTER JOIN:包含右表中的所有数据,当某个连接谓词不在左表中时,新生成的表的左表字段为NULL。对右表数据的信息进行扩展,增加左表中的字段,当某个连接谓词不在左表中时,新生成的表的左表字段为NULL。
    
    使用RIGHT OUTER JOIN对NOT IN 进行优化。
    SELECT select_sxpressions
    FROM TABLE A RIGHT OUTER JOIN TABLE B ON A.key=B.key
    WHERE A.key IS NULL;
    表B中不包含表A中的数据。
    SELECT select_sxpressions
    FROM TABLE A RIGHT OUTER JOIN TABLE B ON A.key=B.key
    WHERE A.key IS NOT NULL;
    表A与表B的交集,相当于INNER JOIN。

    FULL JOIN:是LEFT OUTER JOIN和RIGHT OUTER JOIN的合集。显示出两张表中的所有数据,当一张表的连接谓词无法满足时,则另一张表的字段在该表中为NULL。
    
    MySQL不支持FULL JOIN
    解决方法:
    通过UNION将左连接和右连接的结果合并
    SELECT select_expressions
    FROM TABLE A LEFT OUTER JOIN TABLE B ON A.key=B.key
    UNION ALL
    SELECT select_expressions
    FROM TABLE A RIGHT OUTER JOIN TABLE B ON A.key=B.key;
    
    UNION会自动删除重复项,刷选出部分字段的时候要注意了,如果刷选出来的两个字段的值完全相同就会剩下一个。
    UNION ALL 和 UNION 不同之处在于 UNION ALL 会将左右两个查询的结果的所有的资料都列出来,无论资料值有无重复。

    CROSS JOIN:笛卡尔连接,如果A和B是两个集合,它们的交叉连接就记为A X B。一个表的每个记录与另一个表的所有记录进行连接,形成A.length*B.length个数据项的表。(无需提供ON)
    
    SELECT select_expressions
    FROM TABLE A CROSS JOIN TABLE B;

    join优化子查询技巧:
    一般子查询写法:(数据小时,没有多大影响,如果数据量大时,则要消耗大量的查询)
    select a.user_name , a.over , (select over from user2 where a.user_name = b,user_name) as over2
    from user1 a;
    如果这两张表的记录相当多 那么这个子查询相当于对A标的每一条记录都要进行一次子查询。
    
    join优化(左连接)后的写法:
    select a.user_name , a.over , b.over from user1 a
    left join user2 b on a.user_name = b.user_name

    
    
    
    
    
    
    
    
  • 相关阅读:
    ABAP-年月期间搜索帮助
    Others-Goldengate 数据同步
    ABAP-语音输出
    ABAP-ALV报表导出格式恢复初始画面
    ABAP-动态创建DATABASE/FUNCTION(风险)
    JDK 12 安装
    级数判敛--转自高教
    一文搞懂 JavaScript 中 DOM 相关的距离
    你应该知道的前端编程利器 VS Code
    js变量提升与函数提升的详细过程
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/6985092.html
Copyright © 2011-2022 走看看