SELECT语句功能
投影操作:结果集是源表中的部分列。
选择操作:结果集是源表中的部分行。
连接操作:将两张表里的行按某种条件组合成一条长长的行放入结果集。
最基本的用法:SELECT ……FROM……
SELECT子句
用于指定字段名,多个字段名用逗号隔开,*代表所有列。
SELECT后面可以跟列,字符,表达式,DISTINCT关键字(去掉重复行),函数,常量,组标识。完成对数据的处理。
FROM子句
用于指定表名。
例如:
SELECT DISTINCT NAME FROM TEST;
WHERE子句
根据条件过滤出需要处理的数据,对行过滤。后面跟条件表达式(列名,常量,比较运算符,文字值,不能跟列别名),可以用AND,OR连接多个条件表达式。
语法顺序:SELECT……FROM……WHERE……
例如:
SELECT NAME FROM TEST WHERE ID = 10001;
ORDER BY子句
SELECT语句的最后一个子句,也是最后执行的子句,功能是改变记录的输出顺序,排序。
ASC(缺省/默认) 升序,DESC降序。
ORDER BY后面可以跟列名,表达式,列别名,列在结果集中的位置值。
ORDER BY 后面可以跟多列,用逗号隔开。
NULL值在ORDER BY 子句中排序的顺序是:降序排在最上,升序排在最下。
语法顺序:SELECT ——> FROM ——> WHERE ——> ORDER BY
执行顺序:FROM ——> WHERE ——> SELECT ——> ORDER BY
例如:
SELECT * FROM TEST ORDER BY NAME DESC;
GROUP BY子句
功能是根据指定的列对行进行分组
语法顺序:SELECT……FROM……WHERE……GROUP BY……ORDER BY……
执行顺序:FROM……WHERE……GROUP BY……SELECT……ORDER BY……
例如:
SELECT NAME FROM SERVICE GROUP BY NAME;
注意:
在SELECT语句中,如果没有GROUP BY子句,若在SELECT子句中有一个组函数,那么其他都必须是组函数,否则会报错。
在SELECT语句中,如果有GROUP BY子句,SELECT子句中可跟组函数,或GROUP BY后面的表达式、组标识,其他会报错。
GROUP BY中包含多列的情况,用逗号隔开,分组的粒度更细,每组的记录少了,但组多了。
行级信息和组级信息不可以同时显示出来。
HAVING 子句
功能是对组过滤,后面接条件表达式。
语法顺序:SELECT……FROM……WHERE……GROUP BY……HAVING……ORDER BY……
执行顺序:FROM……WHERE……GROUP BY……HAVING……SELECT……ORDER BY……
WHERE和HAVING 的区别:
1、WHERE过滤的是行(记录)
2、HAVING过滤的是分组(组标识,每组数据的聚合结果)
3、WHERE后面可以跟任意列名,单行函数,不能跟组函数
4、HAVING后面只能跟组函数、组标识、GROUP BY后面的表达式
5、WHERE子句执行在前,HAVING子句执行在后
6、WHERE子句和HAVING子句都不允许有列别名