SQL必知必会读书笔记(二)

大多数 SQL 实现支持以下类型的函数

    1.用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。

    2.用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。

    3.用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数。

    4. 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数

 

常用的文本处理函数

函 数 说 明

LEFT()(或使用子字符串函数)                                      返回字符串左边的字符

LENGTH()(也使用DATALENGTH()或LEN())               返回字符串的长度

LOWER()(Access使用LCASE())                                  将字符串转换为小写

LTRIM()                                                                             去掉字符串左边的空格

RIGHT()(或使用子字符串函数)                                     返回字符串右边的字符

RTRIM()                                                                             去掉字符串右边的空格

SOUNDEX()                                                                       返回字符串的SOUNDEX值

UPPER()(Access使用UCASE())                                    将字符串转换为大写

 

常用数值处理函数

函 数 说 明

ABS()                                                  返回一个数的绝对值

COS()                                                  返回一个角度的余弦

EXP()                                                  返回一个数的指数值

PI()                                                      返回圆周率

SIN()                                                    返回一个角度的正弦

SQRT()                                               返回一个数的平方根

TAN()                                                  返回一个角度的正切

 

使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。

 

DISTINCT 不能用于 COUNT(*)

如果指定列名,则 DISTINCT 只能用于 COUNT()。DISTINCT 不能用于 COUNT(*)。类似地,DISTINCT 必须使用列名,不能用于计算或表达式。

 

在使用 GROUP BY 子句前,需要知道一些重要的规定。

1. GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组。

 2.如果在 GROUP BY 子句中嵌套了分组,数据将在最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。

3. GROUP BY 子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY子句中指定相同的表达式。不能使用别名。

4.大多数 SQL 实现不允许 GROUP BY 列带有长度可变的数据类型(如文本或备注型字段)。

 

 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句中给出。

如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。

 GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。

因为 WHERE 过滤指定的是行而不是分组。事实上,WHERE 没有分组的概念。唯一的差别是,WHERE过滤行,而 HAVING 过滤分组。

 

ORDER BY GROUP BY

对产生的输出排序 对行分组,但输出可能不是分组的顺序

任意列都可以使用(甚至非选择的列也可以使用)

只可能使用选择列或表达式列,而且必须使用每个选择列

表达式

不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用

 

SELECT子句及其顺序

SELECT 要返回的列或表达式 

FROM 从中检索数据的表 仅在从表选择数据时使用

WHERE 行级过滤

GROUP BY 分组说明 仅在按组计算聚集时使用

HAVING 组级过滤

ORDER BY 输出排序顺序

 

可伸缩(scale)

能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称为可伸缩性好(scale well)。

 

完全限定列名

就像前一课提到的,在引用的列可能出现歧义时,必须使用完全限列名(用一个句点分隔表名和列名)。如果引用一个没有用表名限制的具有歧义的列名,大多数 DBMS 会返回错误。

 

性能考虑

DBMS 在运行时关联指定的每个表,以处理联结。这种处理可能非耗费资源,因此应该注意,不要联结不必要的表。联结的表越多,性能下降越厉害。

 

 

猜你喜欢

转载自blog.csdn.net/red_red_red/article/details/89436777