一、创建计算字段
1、拼接
SELECT CONCAT(vend_name,' (',vend_country,')')
FROM vendors
ORDER BY vend_name;
以上的SELECT语句连接以下4个元素:
☆存储在vend_name列中的名字
☆包含一个空格和一个左圆括号的串
☆存储在vend_country列中的国家
☆包含一个右圆括号的串
2、使用MySQL的RTRIM()去掉串右边的空格,LTRIM()去掉串左边的空格,TRIM()去掉串左右两边的空格
SELECT CONCAT(RTRIM(vend_name),' (',RTRIM(vend_country),')')
FROM vendors
ORDER BY vend_name;
3、使用别名
SELECT CONCAT(RTRIM(vend_name),' (',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name;
二、使用数据处理函数
大多数SQL实现支持以下类型的函数:
□用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数
□用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数
□用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之差,检查日期有效性等)的日期和时间函数
□返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数
1.文本处理函数
SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。
例如customers表中有一个顾客Coyote Inc.,其联系名为Y.Lee,但如果这是输入错误,此联系名实际应该是Y.Lie。
SELECT cust_name,cust_contact
FROM customers
WHERE SOUNDEX(cust_contact)=SOUNDEX('Y.Lie');
2.日期和时间处理函数
SELECT cust_id,order_num
FROM orders
WHERE Date(order_date)BETWEEN'2005-09-01'AND'2005-09-30';
=SELECT cust_id,order_num
FROM orders
WHERE Year(order_date)=2005 AND Month(order_date)=9;
3.数值处理函数
三、汇总数据
1.聚集函数
聚集函数运行在行组上,计算和返回单个值的函数。
①AVG()函数---可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
例:使用AVG()返回products表中所有产品的平均价格:
SELECT AVG(prod_price)AS avg_price
FROM products
WHERE vend_id =1003;
②COUNT()函数
③MAX()/MIN()函数
④SUM()函数
SUM()可以用来返回指定列值的和,也可以用来合计计算值。
☆除了
2.聚集不同值
用DISTINCT关键字聚集不同值:
3.组合聚集函数
输入:
输出:
四、分组数据
1.创建分组
使用GROUP BY子句分组
另外,使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。例如:
输出:
2.过滤分组---HAVING子句
例如:
☆WHERE过滤行,Having过滤分组。
上面的例子,WHERE子句过滤所有prod_price至少为10的行,然后按vend_id分组数据,HAVING子句过滤计数为2或2以上的分组。
3.分组和排序---group by+order by
输入:
输出:
4.SELECT子句顺序(回顾)