JOIN 用途 SELECT
A.ID_NO,
A.NAME,
B.SCORE
FROM TMP_INFO_P A
LEFT JOIN TMP_S_SCORE B ON A.ID_NO=B.ID_NO
上面的SELECT中得到的结果集是 3个字段,我们从A中取了2个字段 我们通过A和B的共同字段ID_NO来关联。从这个例子我们可以得出,JOIN B表的目的是为了让最后的结果集中扩展了一列SCORE。
其中 LEFT JOIN 表示,以A表为主表,通过ID_NO关联B表。即A表中所有的ID_NO都会展示在最后的结果集中,如果A中的ID_NO B中没有匹配上则后面的 B.SCORE 为空。
RIGHT JOIN 则与LEFT JOIN 相反,RIGHT JOIN 会以后面的表为主表,通过关联字段进行匹配。
以上是通过JOIN方式实现最后结果集列的拓展,SQL要想实现行数的增加是通过union实现的,
SELECT ID_NO ,NAME,SCORE TMP_INFO_P1
UNION ALL
SELECT ID_NO AS ID_NO1 ,NAME,SCORE TMP_INFO_P2
我们通过as改了 下面ID_NO的别名,但是最后结果集中会展示三列,三列的列名是ID_NO ,NAME,SCORE 即 最后结果是以第一个子结果集中的字段为准的。
GROUP BY 是 分组函数,在很多时候要汇总
SELECT
DIS_NAME,
CHANNEL_NAME,
SUM(PHONE_NO) CYS
FROM DTL_FZ_MX
GROUP BY
DIS_NAME,
CHANNEL_NAME
在使用聚合函数(sum,max,min,count等)后group by后面要包含所有为聚合字段。其实这里多结合一些实际业务场景能理解得更深刻。
ROW_NUM()
在SQL数据处理时,经常要用到剔重,我们这里常见的有distinct 该关键字是针对最后结果集的全部字段来考虑的,即最后结果集的全部字段都重复了才算一条重复数据,而在复杂的数据环境中我们要通过某(几)个字段来剔重的时候则使用ROW_NUM(partition BY ID_NO ORDER BY OP_TIM DESC NULLS LAST) RN进行剔重(这里只是添加了行号) 后面限制RN=1。这里partition即指定了这结果集中的唯一一条记录是根据ID_NO来确定的。当然里面可能存在多条的情况,所以还可以结合排序来让自己希望得到的记录序号排在前面,最后限制行号RN=1。