SQL之select语句及其子句
(2013-03-29 23:43:33)
标签:
sqlit |
分类: 数据库 |
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进行过滤分组。
前一篇:CSS禅意花园之特效
后一篇:88@365