inner join on 加条件和where加条件_SQL学习笔记 - GROUP BY / JOIN / UNION

最近在DataCamp上学习SQL(基于PostgreSQL)的课程,本文主要记录自己易记混的点,以便日后参考学习,不做原理讲解。

  1. GROUP BY(分组)一般和聚合函数一起使用,包括COUNT(),AVG(),MAX(),MIN(),SUM();一般跟在FROM后面;SELECT语句中未出现在聚合函数里的列都要出现在GROUP BY。

2. WHERE/ GROUP BY/ HAVING/ ORDER BY 执行顺序

SELECT 

首先WHERE将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量将不符合条件的记录筛选掉,这样可以减少分组的次数),WHERE语句不能用聚合函数

然后通过GROUP BY关键字对数据进行分组 ;

接着根据HAVING关键字后面指定的筛选条件,将分组后不满足条件的记录筛选掉,(HAVING可以用聚合函数,如 HAVING AVG(col) > 10;

最后按照ORDER BY语句进行排序。

WHER子句在聚合前先筛选记录,也就是说作用在GROUP BY和 HAVING子句前;而HAVING子句在聚合后对组记录进行筛选。

3. JOIN

59c6cab7d7e2c2f23a459cd0cf80459c.png

INNER JOIN / JOIN : only includes records in which the key is is both tables.

LEFT JOIN:keeps all of the records in the left table while bringing in missing values for those key field values that don't appear in the right table.

RIGHT JOIN:keeps all of the records in the right table while bringing in missing values for those key field values that don't appear in the left table.

FULL JOIN:combines a LEFT JOIN and a RIGHT JOIN, it will bring in all records from both the left and the right table and keep all of the missing values accordingly.

当用于联结两个表的字段相同时,USING等价于JOIN操作中的ON,如以下2个实例等价:

SELECT a.name, b.age FROM test AS a
JOIN test2 AS b
ON a.id = b.id;

等价于

SELECT a.name, b.age 
FROM test AS a 
JOIN test2 AS b 
USING(id);

注:细微区别在与,USING(id) 在结果集中只会有一个id列。

4. UNION

2c1fe3cce9bb8af3e990f35caac2b45c.png

UNION:includes every record in both tables but DOES NOT double count those that are in both tables.(包含两个表中的每个记录,但重复的行,最终只会出现一次)

UNION ALL:includes every record in both tables and DOES replicate those are in bot tables.(包括两个表中的每个记录,并且保留重复行)

INTERSECT:results in only those records found in both of the tow tables.(交集,两个集中共同的部分)

EXCEPT:results in only those records in one table BUT NOT the other.(差异,两个集中不重复的部分)

你的点赞是我持续更新的动力~ 谢谢 Thanks♪(・ω・)ノ

其他SQL学习笔记 友情链接:

JessieY:SQL学习笔记 - 窗口函数OVER​zhuanlan.zhihu.com
JessieY:SQL学习笔记 - CTE通用表表达式和WITH用法​zhuanlan.zhihu.com
JessieY:SQL学习笔记 - CASE WHEN THEN​zhuanlan.zhihu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值