1,having:HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。例如
SELECT pub_id, SUM(advance) AS AmountAdvanced,AVG(price) AS AveragePrice FROM pubs.dbo.titles WHERE pub_id > '0800' AND price >= 5 GROUP BY pub_id HAVING SUM(advance) > 15000 AND AVG(price) < 20 ORDER BY pub_id DESC
2,Group by:从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。例子参加百度百科的国家水果例子
3,sql算子执行顺序:Where, Group By, Having, Order by
4,exists和in
exists作用是检验查询是否返回数据,指定一个子查询,检测行的存在
IN:确定给定的值是否与子查询或列表中的值相匹配。
exits 相当于存在量词:表示集合存在,也就是集合不为空只作用一个集合.例如 exist P 表示P不空时为真; not exist P表示p为空时 为真
in表示一个标量和一元关系的关系。例如:s in P表示当s与P中的某个值相等时 为真; s not in P 表示s与P中的每一个值都不相等时 为真。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
详细可以参看:http://baike.baidu.com/view/1229931.htm
5,distinct可以让行数不重复“select distinct name from score where namenotin (select distinctnamefrom scorewhere score<=80)”
6,比较浅显的说明三个范式:1NF 每一列只有一个值,2NF 每一行都能区分,3NF 每一个表都不包含其他表已经包含的非主关键字信息。