数据库学习纪要(十):SQL Sever介绍-2

来源:互联网 发布:mysql blob最大长度 编辑:程序博客网 时间:2024/06/05 03:11
七、创建计算字段
1、拼接字段
可使用一个特殊的操作符(+)或(||)来拼接两个列
SELECT vend_name + '(' + RTRIM(vend_country) + ')' AS vend_title
FROM Vendors;
上面SELECT语句连接以下元素:
1)存储在vend_name列中的名字;
2)包含一个空格和一个开圆括号的串;
3)存储在vend_country列中的国家;
4)包含一个闭圆括号的串。
注:RTRIM()函数去掉值右边的所有空格

2、执行算术计算
SELECT quantity * item_price AS expanded_price FROM OrderItems
WHERE order_num = 20008;

八、使用数据处理函数
1、支持的函数类型
1)用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数
2)用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数
3)用于处理日期和时间值并从这些值中提前特定成分(例如,返回两个日期之差,检查日期有效性等)的日期和时间函数
4)返回DBMS正使用的特殊信息(如返回用户登录信息)的系统函数

2、文本处理函数
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;
注:UPPER()将文本转化为大写
函数 说明
LEFT() 返回字符串左边的字符
LENGTH()或LEN() 返回字符串的长度
LOWER() 将字符串转换为小写
LTRIM() 去掉字符串左边的空格
RIGHT() 返回字符串右边的空格
RTRIM() 去掉字符串右边的空格
SOUNDEX() 返回字符串的SOUNDEX值
UPPER() 将字符串转化为大写

注:SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法,SOUNDEX考虑了类似的发音字节和音节,使得能对字符串进行发音比较而不是字母比较。

3、日期和时间处理函数
DATEPART()返回日期的某一部分,函数有两个参数,分别是返回的成分和从中返回成分的日期

4、数值处理函数
函数 说明
ABS() 返回一个数的绝对值
COS() 返回一个角度的余弦
EXP() 返回一个数的指数值
PI() 返回圆周率
SIN() 返回一个角度的正弦
SQRT() 返回一个数的平方根
TAN() 返回一个角度的正切

九、汇总数据
1、聚集函数
1)确定表中行数(或者满足某个条件或包含某个特定值的行数)
2)获得表中行组的和
3)找出表列(或所有行或某些特定的行)的最大、最小、平均值
函数 说明 备注
AVG() 返回某列的平均值忽略列值为NULL的行
COUNT() 返回某列的行数如果指定列名,则指定列的值为空的行被COUNT()函数忽略,但COUNT(*)则包含NULL的行
MAX() 返回某列的最大值忽略列值为NULL的行
MIN() 返回某列的最小值忽略列值为NULL的行
SUM() 返回某列值之和 忽略列值为NULL的行

2、聚集不同值
1)对所有的行执行计算,指定ALL参数或不给参数(因为ALL是默认行为)
2)只包含不同的值,指定DISTINCT参数

3、组合聚集函数
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products;

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

2、创建分组
SELECT vend_id, COUNT(*) AS num_prods FROM Products
GROUP BY vend_id;
注:GROUP BY子句指示DBMS按vend_id排序并分组数据,这导致对每个vend_id而不是整个表计算num_prods一次。
使用GROUP BY子句前,需注意:
1)GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制
2)如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。即在分组时,指定的所有列都一起计算(将不能从个别的列取回数据)
3)GROUP BY子句中列出的每个列都必须时检索列或有效的表达式(但不能时聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名
4)大多数SQL实现不允许GROUP BY列带有长度可变的数据类型(如文本或备注型字段)
5)除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出
6)如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组
7)GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前

3、过滤分组
WHERE过滤行,HAVING过滤组;WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤;WHERE排除的行不包括在分组中,这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。
SELECT cust_id, COUNT(*) AS orders FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;

SELECT vend_id, COUNT(*) AS num_prods FROM Products
WHERE prod_price >= 4
GROUP BY vend_id
HAVING COUNT(*) >= 2;

4、分组和排序
GROUP BY ORDER BY
分组行,但输出可能不是分组的顺序 排序产生的输出
只可能使用选择列或表达式列,而且必须使用每个选择列表达式 任意列都可以使用(甚至非选择的列也可以使用)
如果和聚合函数一起使用(或表达式),则必须使用 不一定需要

注:第一项差别极为重要

5、SELECT子句顺序
子句 说明 是否必须使用
SELECT 要返回的列或者表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚合时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
原创粉丝点击