一、创建计算字段
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.文本处理函数
![](https://img.haomeiwen.com/i1926574/9d613f3987f6f823.png)
SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。
例如customers表中有一个顾客Coyote Inc.,其联系名为Y.Lee,但如果这是输入错误,此联系名实际应该是Y.Lie。
SELECT cust_name,cust_contact
FROM customers
WHERE SOUNDEX(cust_contact)=SOUNDEX('Y.Lie');
2.日期和时间处理函数
![](https://img.haomeiwen.com/i1926574/2abd6d4b550d3ded.png)
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.数值处理函数
![](https://img.haomeiwen.com/i1926574/a6a55228d6293621.png)
三、汇总数据
1.聚集函数
聚集函数运行在行组上,计算和返回单个值的函数。
![](https://img.haomeiwen.com/i1926574/5aba2e35756b371a.png)
①AVG()函数---可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
例:使用AVG()返回products表中所有产品的平均价格:
SELECT AVG(prod_price)AS avg_price
FROM products
WHERE vend_id =1003;
②COUNT()函数
![](https://img.haomeiwen.com/i1926574/7ef0f836bb264954.png)
③MAX()/MIN()函数
④SUM()函数
SUM()可以用来返回指定列值的和,也可以用来合计计算值。
![](https://img.haomeiwen.com/i1926574/87a40e9e73b0182d.png)
☆除了
![](https://img.haomeiwen.com/i1926574/cfe85d8c28db4284.png)
2.聚集不同值
用DISTINCT关键字聚集不同值:
![](https://img.haomeiwen.com/i1926574/2098d483209a8df1.png)
3.组合聚集函数
输入:
![](https://img.haomeiwen.com/i1926574/3100fc975c46ee17.png)
输出:
![](https://img.haomeiwen.com/i1926574/ab2f32fd571d557a.png)
四、分组数据
1.创建分组
使用GROUP BY子句分组
![](https://img.haomeiwen.com/i1926574/c12d00880f10b722.png)
另外,使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。例如:
![](https://img.haomeiwen.com/i1926574/de3089813d4d677d.png)
输出:
![](https://img.haomeiwen.com/i1926574/d220f347c9ac2a24.png)
2.过滤分组---HAVING子句
例如:
![](https://img.haomeiwen.com/i1926574/26366a300a138718.png)
☆WHERE过滤行,Having过滤分组。
![](https://img.haomeiwen.com/i1926574/71e6f383a0f76048.png)
上面的例子,WHERE子句过滤所有prod_price至少为10的行,然后按vend_id分组数据,HAVING子句过滤计数为2或2以上的分组。
3.分组和排序---group by+order by
输入:
![](https://img.haomeiwen.com/i1926574/59a4b4af017fda88.png)
输出:
![](https://img.haomeiwen.com/i1926574/574c2eceb48781c6.png)
4.SELECT子句顺序(回顾)
![](https://img.haomeiwen.com/i1926574/06ac8019c421817a.png)
网友评论