• 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

    
    
    
    
    
    
    
    
  • 相关阅读:
    Visual Basic 9.0 前沿播报·静态篇(二)对象初始化器和匿名类型
    Visual Basic 9.0 前沿播报内容概览
    Refactor! for VB —— VB2005的重构支持(一)
    我不知道该说什么,这里太先进了!
    Visual Basic 9.0 前沿播报·静态篇(一)局部变量类型推测和数组初始化器
    关于“就地颠倒句子里的词”面试题
    Visual Basic 9.0 前沿播报·静态篇(三)扩展方法
    《窝窝世界》视频20101025
    Silverlight 游戏开发小技巧:透明背景的Silverlight程序
    Silverlight 游戏开发小技巧:技能冷却效果2(Cooldown)2
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/6985092.html
Copyright © 2020-2023  润新知