第 7 课 创建计算字段
计算字段并不实际存在于数据库表中。计算字段是运行时在 SELECT 语句内创建的。
拼接字段
拼接(concatenate)将值联结到一起(将一个值附加到另一个值)构成单个值.Access 和 SQL Server 使用+号。 DB2、 Oracle、 PostgreSQL、 SQLite 和Open Office Base 使用||。在 MySQL 和 MariaDB 中,必须使用特殊的函数。
# MySQL 或 MariaDB使用语句
SELECT Concat(vend_name, ' (', vend_country, ')') FROM Vendors
ORDER BY vend_name;
#其他
SELECT vend_name + ' (' + vend_country + ')' FROM Vendors
ORDER BY vend_name;
或
SELECT vend_name || ' (' || vend_country || ')' FROM Vendors
ORDER BY vend_name;
去空格
RTRIM()它去掉字符串右边的空格
LTRIM()去掉字符串左边的空格
TRIM()去掉字符串左右两边的空格
如:SELECT RTRIM(vend_name) FROM Vendors
别名:
拼接地址字段,它只是一个值,实际上没有名字。一个未命名的列不能用于客户端应用中,因为客户端没有办法引用它。别名(alias)是一个字段或值的替换名,也称导出列(derived column)。别名用 AS 关键字赋予。
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
FROM OrderItems WHERE order_num = 20008;
#expanded_price 列是一个计算字段
测试计算
SELECT 语句为测试、检验函数和计算提供了很好的方法。省略了 FROM 子句后就是简单地访问和处理表达式,例如 SELECT 3 * 2;将返回 6, SELECT Trim(’ abc ');将返回 abc, SELECT Now();使用 Now()函数返回当前日期和时间。
第 8 课 使用函数处理数据
#使用 SOUNDEX()函数进行搜索,它匹配所有发音类似于Michael Green 的联系名
SELECT cust_name, cust_contact FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');
日期
SQL Server
SELECT order_num FROM Orders
WHERE DATEPART(yy, order_date) = 2012;
SQL Server、 Sybase和Access
SELECT order_num FROM Orders
WHERE DATEPART('yyyy', order_date) = 2012;
PostgreSQL
SELECT order_num FROM Orders
WHERE DATE_PART('year', order_date) = 2012;
Oracle
SELECT order_num FROM Orders
WHERE to_number(to_char(order_date, 'YYYY')) = 2012;
#或WHERE order_date BETWEEN to_date('01-01-2012') AND to_date('12-31-2012');
MySQL 和 MariaDB
SELECT order_num FROM Orders WHERE YEAR(order_date) = 2012;
第 9 课 汇总数据
聚集函数(aggregate function)对某些行运行的函数,计算并返回一个值。
SELECT COUNT(cust_email) AS num_cust FROM Customers;
#对 cust_email 列中有值的行进行计数,不计算null行
如果指定列名,则 COUNT()函数会忽略指定列的值为空的行,
但如果COUNT()函数中用的是星号(*),则不忽略
MAX()一般用来找出最大的数值或日期值,在用于文本数据时, MAX()返回按该列排序后的最后一行。MAX()函数忽略列值为 NULL 的行。
只包含不同的值,指定 DISTINCT 参数。对于count函数,DISTINCT 只能用于 COUNT(指定列名),不能用于 COUNT(*)。类似地, DISTINCT 必须使用列名,不能用于计算或表达式。
SELECT AVG(DISTINCT prod_price) AS avg_price FROM Products;
#考虑各个不同的价格的平均值
组合聚集函数:SELECT 语句可根据需要包含多个聚集函数。
《sql必知必会》------day6
《sql必知必会》------day5
《sql必知必会》------day4
《sql必知必会》------day3
《sql必知必会》------day2
《sql必知必会》------day1