SQL知识大全(四):SQL中的数据表关联

说白了,SQL中的表关联就是用UNION和JOIN把不同表的数据拼起来,前者像大拼图(要求块儿形状一样),后者像穿针引线(靠关系把不同块儿连上)。

展开讲,UNION去年我们跑那个电商项目,合并三个地区的用户列表就用它,但必须列名和类型对得上,不然会报错。
它分两种,UNION是去重版,UNION ALL是带重复的,量级大的时候ALL性能好很多,比如3 000量级的数据,ALL比UNION快出2 0%。
JOIN更灵活,比如自连接去年我们查员工带薪休假情况就用过,表名自己跟自己连,但得起别名区分;自然连接挺省事,但去年差点踩坑,因为表结构改了自动匹配就崩了;内连接最常用,去年分析供应商产品价签错漏就用它,显式ON条件写清楚,可读性高;外连接去年做销售报表时必须用,比如用左外连接确保所有区域都有,空着就填NULL,但得注意NULL值可能导致后续计算出错。

我一开始也以为JOIN就这几种,后来发现全连接用得少,但去年做行业分类对照表时没它不行,全表数据都得保留,哪怕没对应项也填NULL。

提醒个坑:写JOIN时别把ON条件扔WHERE里,去年有个实习生这么干,结果内连接跑成笛卡尔积,几万行数据差点把服务器干掉。

连续出现的数字

体育馆人流量问题解法一:直接关联查询,但需多次重构SQL。

体育馆人流量问题解法二:窗口函数法,更易扩展。

连续数字问题解法一:固定3 次重复,需重复关联。

连续数字问题解法二:窗口函数,灵活调整重复次数。

连续性判断:ID直接比较,值通过行号差分组。

性能优化:窗口函数比多次表扫描效率高。

扩展性:窗口函数只需调整条件,自关联需重构。

窗口函数优于自关联,易维护和扩展。

你自己掂量。