《Mysql必知必会》 笔记(二)
三、语句总结
6. 创建计算字段
Concat( )
拼接(concatenate)
SELECT Concat(vend_name, '(', vend_country, ')')
FROM vendors
ORDER BY vend_name;
RTrim( ) / LTrim( ) / Trim( )
去掉串右侧/左侧/左右两边的空格
SELECT Concat(vend_name, '(', RTrim(vend_country), ')')
FROM vendors
ORDER BY vend_name;
AS关键字
使用别名(alias),有时已成为导出列(derived column)。
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=20005;
注意事项
- 多数DBMS使用+或| |来实现拼接,MySQL通过Concat()函数实现;
7. 数据处理函数
文本处理函数
函数 | 说明 |
---|---|
Left( ) | 返回串左边的字符 |
Length( ) | 返回串的长度 |
Locate( ) | 找出串的一个子串 |
Lower( ) | 将串转换为小写 |
LTrim( ) | 去掉串左边的空格 |
Right( ) | 返回串右边的字符 |
RTrim( ) | 去掉串右边的空格 |
Soundex( ) | 返回串SOUNDEX值 |
SubString( ) | 返回子串的字符 |
Upper( ) | 将串转换为大写 |
SOUNDE是一个将任何文本串转换为描述其语音表示的字母数字模式的算法,对串进行发音比较而不是字母比较。
//匹配所有发音类似于Y.Lie的联系名,检索出Y Lee
SELECT cust_name, cust_contact
FROM customers
WHERE Soundex(cust_contact) = Soundex('Y Lie');
日期和时间处理函数
日期格式为yyyy-mm-dd
函数 | 说明 |
---|---|
AddDate( ) | 增加一个日期(天/周等) |
AddTime( ) | 增加一个时间(时/分等) |
CurDate( ) | 增加一个日期(天/周等) |
CurDate( ) | 返回当前日期 |
AddDate( ) | 返回当前时间 |
Date( ) | 返回日期时间的日期部分 |
DateDiff( ) | 计算两个日期之差 |
Date_Add( ) | 高度灵活的日期运算函数 |
Date_Format( ) | 返回一个格式化的日期或时间串 |
Day( ) | 返回一个日期的天数部分 |
DayOfWeek( ) | 对于一个日期,返回对应的星期几 |
Hour( ) | 返回一个时间的小时部分 |
Minute( ) | 返回一个时间的分钟部分 |
Month( ) | 返回一个时间的月份部分 |
Now( ) | 返回当前日期和时间 |
Second( ) | 返回一个时间的秒部分 |
Time( ) | 返回一个日期时间的时间部分 |
Year( ) | 返回一个日期的年份部分 |
//检索2005年9月的所有订单
SELECT cust_id, order_name
FROM orders
WHERE Year(order_date) = 2005 AND Month(order_date) = 9;
数值处理函数
函数 | 说明 |
---|---|
Abs( ) | 返回一个数的绝对值 |
Cos( ) | 返回一个角度的余弦 |
Exp( ) | 返回一个数的指数值 |
Mod( ) | 返回除操作的余数 |
Pi( ) | 返回圆周率 |
Rand( ) | 返回一个随机数 |
Sin( ) | 返回一个角度的正弦 |
Sqrt( ) | 返回一个数的平方根 |
Tan( ) | 返回一个角度的正切 |
注意事项
- 函数没有SQL可移植性强,若使用函数应做好代码注释;
- 如果想要的仅仅是日期,使用Date( ); 只想要时间使用Time( );
8. 汇总数据
聚集函数
函数 | 说明 |
---|---|
AVG( ) | 返回某列的平均值 |
COUNT( ) | 返回某列的行数 |
MAX( ) | 返回某列的最大值 |
MIN( ) | 返回某列的最小值 |
SUM( ) | 返回某列值之和 |
AVG( )
SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
COUNT( )
-
COUNT(*)对表中行的数目进行计数,无论列中为空值或非空值
-
COUNT(column)对特定列中具有值的行计数,忽略NULL值
SELECT COUNT(cust_email) AS num_cust FROM customers;
SUM( )
SELECT SUM(item_price*quantity) AS total_price
FROM orderitems
WHERE order_num = 20005;
聚集不同值
DISTINCT( ) MySQL 5之后的版本中出现
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
组合聚集函数
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;
注意事项
- AVG( )/MAX( )/MIN( )/SUM( )忽略列值为NULL的行;
- 如果指定列名,DISTINCT只能用于COUNT( ),不能用于COUNT(*),也不能用于计算或表达式;