| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 723 人关注过本帖
标题:自学SQL 求前辈指点我的难题
只看楼主 加入收藏
hellenism
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2009-2-27
结帖率:76.47%
收藏
已结贴  问题点数:10 回复次数:3 
自学SQL 求前辈指点我的难题
由于刚接触SQL 很多问题不懂 请各位指点

我的理解:
当SQL语句执行之后,系统生成一张表(你怎么连接的就怎么生成),然后由SELECT语句选择要显示的字段。Group by是对SQL语句生成的表进行操作的,而Having语句是对SELECT语句筛选显示出来的结果做操作的。

如果这样理解对的话

SELECT S.姓名
FROM S,SC
WHERE S.学号=SC.学号
GROUP BY S.姓名



SELECT S.姓名
FROM S,SC
WHERE S.学号=SC.学号
GROUP BY S.姓名
HAVING COUNT(S.学号)>=2

的结果为什么是相同的呢?
第二个查询语句里SELECT筛选出来的结果里只有"姓名"那么HAVING如何能COUNT(学号)呢?学号并不在显示的结果里面啊?
搜索更多相关主题的帖子: 前辈 自学 难题 SQL 
2009-11-02 23:39
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:3 
从没钻这么深过
帮助中是这样说的"指定组或聚合的搜索条件。HAVING 通常与 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。" 那是否就可以理解为 HAVING 实际上在某种程度上就是WHERE语句 只是他又可以被用在聚合后的结果中来过滤 那这样的话 HAVING 中含有SELECT中不存在的字段也是能理解的
不过很好奇你这个例子是你自己想的 还是在书上看来的
2009-11-04 14:17
msgj
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:190
专家分:914
注 册:2009-10-3
收藏
得分:3 
    聚合函数,例如SUM, COUNT, MAX, AVG等和其它函数的根本区别就是它们一般作用在多条记录上。
    SELECT SUM(population) FROM abc
    这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果。通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.而 HAVING子句在聚合后对组记录进行筛选。
    例如,显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
    SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000
    在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。相反,HAVING子句可以让我们筛选成组后的各组数据。第二个查询语句里SELECT筛选出来的结果里只有"姓名"那么 HAVING COUNT(S.学号)>=2 就没有起作用。
2009-11-05 21:24
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:3 
其实很简单
因为楼主你在用Group By的时候没有和聚合函数配合使用
就没效果

有实力才会有魅力 实力来自坚持不懈的努力
2009-11-09 11:52
快速回复:自学SQL 求前辈指点我的难题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021979 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved