第7章 创建计算字段
- 拼接字段&使用别名
SQL:
SELECT RTRIM(vend_name) + '(' + RTRIM(vend_country) + ')'
AS vend_title
FROM Vendors
ORDER BY vend_name;
RTRIM():去掉字符串右边的空格
LTRIM():去掉字符串左右的空格
TRIM():去掉字符串左右两边的空格
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'
AS vend_title
FROM Vendors
ORDER BY vend_name;
MySQL和MariaDB:
SELECT Concat(vend_name, '(', vend_country, ')')
AS vend_title
FROM Vendors
ORDER BY vend_name;
- 执行算术计算
SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price #expanded_price列是一个计算字段
FROM OrderItems
WHERE order_num=20008;
- 测试计算
SELECT 3*2 #返回6
SELECT Trim(' abc ') #返回abc
SELECT Now() #返回当前日期和时间
第8章 使用函数处理数据
- 函数
- SUBSTRING():提取字符串的组成部分
- CONVERT():数据类型转换
- CURDATE()/GETDATE():取当前日期
SQL函数不是可移植的,使用函数时,做好代码注释
- 文本处理函数
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;
- LEFT()、RIGHT()
- LOWER()、UPPER()
- LTRIM()、RTRIM()
- LENGTH()
- SOUNDEX():将任意文本串转换为描述其语音表示的字母数字模式的算法
SELECT cust_name,cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact=SOUNDEX('Michael Green'));
- 日期和时间处理函数
SQL Sever:
#检索2012年的所有订单
SELECT order_num
FROM Orders
WHERE DATEPART(yy, order_date)=2012; #DATEPART()函数返回日期的某一部分
Oracle没有DATEPART函数,有几个可用来完成相同检索的日期处理函数:
SELECT order_num
FROM Orders
WHERE to_number(to_char(order_date,'YYYY'))=2012; #to_char()函数用来提取日期成分,to_number()用来将提取出的成分转换为数值,以便能与2012比较
SELECT order_num
FROM Orders
WHERE order_date BETWEEN to_date('01-01-2012') AND to_date('12-21-2012'); #to_date()用来将两个字符串转换为日期
MySQL:
SELECT order_num
FROM Orders
WHERE YEAR(order_date)=2012;
- 数值处理函数
- ABS()
- COS()、SIN()、TAN()
- EXP()
- SQRT()
- PI()
第9章 汇总数据
聚集函数
- AVG():返回所有列的平均值
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id='DLL01';
AVG()只能用来确定特定数值列的平均值,而且列明必须作为函数参数给出,为了获得多个列的平均值,必须使用多个AVG()函数。
AVG()函数忽略列值为NULL的行。
- COUNT()
COUNT(*):对表中行的数目进行计数,不管表列中包含的是NULL还是非空值。
#只对具有电子邮件地址的客户计数
SELECT COUNT(cust_email) AS num_cust
FROM Customers;
- MAX(),MIN()
SELECT MAX(prod_price) AS max_price
FROM Products;
MAX()和MIN()忽略列值为NULL的行
- SUM():返回指定列值的总和。
#返回订单中所有物品价钱之和
SELECT SUM(item_price*quantity) AS total_price
FROM Order
WHERE order_num=20005;
聚集不同值
SELECT AVG(DISTINCT prod_price)AS avg_price
FROM Products
WHERE vend_id='DLL01';
组合聚集函数
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;
网友评论