Login
网站首页 > 文章中心 > 其它

读SQL进阶教程笔记10_HAVING下

作者:小编 更新时间:2023-08-21 14:05:29 浏览量:457人看过

读SQL进阶教程笔记10_HAVING下

①?按照现在的SQL标准来说,HAVING子句是可以单独使用的

1.1.?就不能在SELECT子句里引用原来的表里的列了

1.1.1.?使用常量

1.1.2.?使用聚合函数

1.2.?WHERE子句用来调查集合元素的性质,而HAVING子句用来调查集合本身的性质

③1.?SQL通过不断生成子集来求得目标集合

③2.?SQL不是面向过程语言,没有循环、条件分支、赋值操作

③③?SQL通过不断生成子集来求得目标集合

③④?SQL不像面向过程语言那样通过画流程图来思考问题,而是通过画集合的关系图来思考

④1.?— 查询缺失编号的最小值

 ?SELECT MIN(seq + 1) AS gap
 ??FROM SeqTbl
 ?WHERE (seq+ 1) NOT IN ( SELECT seq FROM SeqTbl);

⑤1.?在群体中出现次数最多的值

⑤2.?示例

⑤2.1.

读SQL进阶教程笔记10_HAVING下

 ?SELECT income, COUNT(*) AS cnt
 ??FROM Graduates
 ?GROUP BY income
 ?HAVING COUNT(*) >= ALL ( SELECT COUNT(*)
 ??????FROM Graduates
 ??????GROUP BY income);

 ?SELECT income, COUNT(*) AS cnt
 ??FROM Graduates
 ?GROUP BY income
 ?HAVING COUNT(*) >= ?( SELECT MAX(cnt)
 ?????FROM ( SELECT COUNT(*) AS cnt
 ???????FROM Graduates
 ??????GROUP BY income) TMP ) ;

⑥1.?将集合中的元素按升序排列后恰好位于正中间的元素

⑥2.?如果集合的元素个数为偶数,则取中间两个元素的平均值作为中位数

⑥③?示例

⑥③1.?–求中位数的SQL语句:在HAVING子句中使用非等值自连接

 ?SELECT AVG(DISTINCT income)
 ??FROM (SELECT T1.income
 ???FROM Graduates T1, Graduates T2
 ???GROUP BY T1.income
 ???--S1的条件
 ??HAVING SUM(CASE WHEN T2.income >= T1.income THEN 1 ELSE 0 END)
 ???>= COUNT(*) / 2
 ???--S2的条件
 ??AND SUM(CASE WHEN T2.income <= T1.income THEN 1 ELSE 0 END)
 ???>= COUNT(*) / 2 ) TMP;

⑦1.?COUNT(*)和COUNT(列名)

⑦1.1.?性能上的区别

⑦1.2.?COUNT(*)可以用于NULL

⑦1.③?COUNT(列名)与其他聚合函数一样,要先排除掉NULL的行再进行统计

⑦1.④?COUNT(*)查询的是所有行的数目,而COUNT(列名)查询的则不一定是

⑦2.?示例1

⑦2.1.?–在对包含NULL的列使用时,COUNT(*)和COUNT(列名)的查询结果是不同的

 ?SELECT COUNT(*), COUNT(col_1)
 ??FROM NullTbl;

⑦③?示例2

⑦③1.

读SQL进阶教程笔记10_HAVING下

 ?SELECT dpt
 ??FROM Students
 ?GROUP BY dpt
 ?HAVING COUNT(*) = COUNT(sbmt_date);

 ?SELECT dpt
 ??FROM Students
 ?GROUP BY dpt
 ?HAVING COUNT(*) = SUM(CASE WHEN sbmt_date IS NOT NULL
 ??????THEN 1
 ??????ELSE 0 END);

⑧1.?示例1

⑧1.1.

读SQL进阶教程笔记10_HAVING下

⑧1.2.?–查询啤酒、纸尿裤和自行车同时在库的店铺:错误的SQL语句

 ?SELECT DISTINCT shop
 ??FROM ShopItems
 ?WHERE item IN (SELECT item FROM Items);

 ?SELECT SI.shop
 ??FROM ShopItems SI, Items I
 ?WHERE SI.item = I.item
 ?GROUP BY SI.shop
 ?HAVING COUNT(SI.item) = (SELECT COUNT(item) FROM Items);

⑧2.?示例2

⑧2.2.?–精确关系除法运算:使用外连接和COUNT函数

 ?SELECT SI.shop
 ??FROM ShopItems SI LEFT OUTER JOIN Items I
 ??ON SI.item=I.item
 ?GROUP BY SI.shop
 ?HAVING COUNT(SI.item) = (SELECT COUNT(item) FROM Items) ?--条件1
 ??AND COUNT(I.item) ?= (SELECT COUNT(item) FROM Items); ?--条件2

⑧③?在SQL里,交叉连接相当于乘法运算

⑧③1.?关系除法运算是关系代数中知名度最低的运算

以上就是土嘎嘎小编为大家整理的读SQL进阶教程笔记10_HAVING下相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章