ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL--表关联与子查询

2022-04-18 20:02:16  阅读:155  来源: 互联网

标签:JOIN -- 拼接 SQL 与子 table nvl id select


1、(INNER) JOIN :内链接,常与where配合做条件筛选,这种拼接得到最少的数据量,效率较高,但没有left join使用频率高,此方式相当于没有主表,后期数据处理时常出现因需要用到的数据被排除而需要返工重新拼接数据。

2、LEFT JOIN  :左(外)连接,即左为主表,最常用的拼接。

3、RIGHT JOIN  :右(外)连接与LEFT JOIN 其实等价,一般习惯为左边主表,所以right join 不常用

4、FULL (OUTER) JOIN :即保留左右未匹配上的数据,一般用于多数据源的整合拼接,如table_A包含用户的a、b类信息,table_B包含用户的c、d类信息,但时两个表包含的用户量并不相同,此时这需要用到全拼接。

  select nvl(a.a,''),nvl(a.b,'')

    ,nvl(b.c,''),nvl(b.d,'')    

    from table_A a full join table_B b on a.user_id = b.user_id 

  MySQL好像没有全拼接吧,需要用union 方式转换一下,貌似。。。

ON 拼接条件,MySQL 允许非等值(>,<...)拼接,hive 只支持等值链接 即 (=)

5、CROSS JOIN  或 ",": select  * from tb_A,tb_B ,这种拼接方法为笛卡儿积,得到所有可能的连接结果,此拼接不需要on 拼接条件

  select * from table_A,table_B

  在一些特殊的情况下,尤其是时间纵向的数据分析有奇效,这种拼接导致数据量指数膨胀,易造成数据倾斜,运算阻塞奔溃,要慎用。。。

WHERE 筛选条件

6、union all :上下拼接(并集),不去重

  union :上下拼接,去重,且按默认方式排序

7、子查询:即把其中一个select的结果作为另一个select 的where 筛选条件

  select * from table_A  a 

    where a.id in (select id from table_B where id>n)

  实际应用过程中,子查询情况并不多,运行效率不高,且容易导致脚本复杂,可读性太差,尤其时在复杂的SQL脚本中,实用性不高,可以通过常规拼接代替。

标签:JOIN,--,拼接,SQL,与子,table,nvl,id,select
来源: https://www.cnblogs.com/bigcat-sniffs-the-rose/p/16161132.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有