part2. 函数| 汇总聚集

第7章 创建计算字段

  1. 拼接字段&使用别名
    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;
  1. 执行算术计算
SELECT prod_id,
       quantity,
       item_price,
       quantity*item_price AS expanded_price #expanded_price列是一个计算字段
FROM OrderItems
WHERE  order_num=20008;
  1. 测试计算
SELECT 3*2 #返回6
SELECT Trim(' abc ') #返回abc
SELECT Now() #返回当前日期和时间

第8章 使用函数处理数据

  1. 函数
  • SUBSTRING():提取字符串的组成部分
  • CONVERT():数据类型转换
  • CURDATE()/GETDATE():取当前日期

SQL函数不是可移植的,使用函数时,做好代码注释

  1. 文本处理函数
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'));
  1. 日期和时间处理函数

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;
  1. 数值处理函数
  • ABS()
  • COS()、SIN()、TAN()
  • EXP()
  • SQRT()
  • PI()

第9章 汇总数据

聚集函数

  1. AVG():返回所有列的平均值
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id='DLL01';

AVG()只能用来确定特定数值列的平均值,而且列明必须作为函数参数给出,为了获得多个列的平均值,必须使用多个AVG()函数。
AVG()函数忽略列值为NULL的行。

  1. COUNT()
    COUNT(*):对表中行的数目进行计数,不管表列中包含的是NULL还是非空值。
#只对具有电子邮件地址的客户计数
SELECT COUNT(cust_email) AS num_cust
FROM Customers; 
  1. MAX(),MIN()
SELECT MAX(prod_price) AS max_price
FROM Products;

MAX()和MIN()忽略列值为NULL的行

  1. 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;

你可能感兴趣的:(part2. 函数| 汇总聚集)