加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SQL之select语句及其子句

(2013-03-29 23:43:33)
标签:

sql

it

分类: 数据库
SQL的概念
结构化查询语言(Structured Query Language)的缩写
SQL是一种专门用来与数据库通信的语言

主键
唯一标识表中每行的这个列(或这组列)称为组件。

注:除了主键,还有一个非常重要的键,称为外键。

SQL子句
SQL语句由子句构成,有些子句是必须的,有些事可选的。一个子句通常由一个关键字加上所提供的数据组成。
如:
order by子句
order by子句的位置:在指定一条order by子句时,应保证它是select语句中最后一条子句。该子句的次序不对将出现错误消息。

分组数据子句
涉及到两个select语句子句:group by子句和having子句。

分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算

创建分组:分组是在select语句的group by子句中建立的。
如:
select vend_id, count(*) as num_prods
from products
group by vend_id;
表示首先根据vend_id进行分组,然后显示每一个vend_id以及计算出来每一个vend_id分组的数量。
因为使用了group by,该子句会指示DBMS分组数据,然后对每个组而不是整个结果集进行聚集。


除了能用group by创建分组数据外,SQL还允许过滤分组,规定包括哪些分组,排除哪些分组。那就是having子句。
过滤分组:过滤分组是在select语句的having子句中建立的。
如:
select vend_id, count(*) as num_prods
from products
group by vend_id;
having count(*) >=2;

where和having的差别是:
a) where过滤行,而having过滤分组。
b) where在数据分组前进行过滤,而having在数据分组后进行过滤。
c) where排除的行不包括在分组中,这个可能会改变计算值,从而影响having子句中基于这些值过滤掉的分组。
如:
select vend_id, count(*) as num_prods
from products
where prod_price >=4
group by vend_id;
having count(*) >=2;
(首先通过where子句过滤掉所有prod_price至少为4的行;然后按vend_id分组数据;再通过having子句过滤计数至少为2的分组。)

理解:group by 和having的意思,创建分组和过滤分组。但where子句会首先进行过滤,然后是group by进行分组,最后是having进行过滤分组。





0

阅读 收藏 喜欢 打印举报/Report
后一篇:88@365
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有