(原创)SQL总结(三)

计算字段

为什么需要计算字段:我们需要直接从数据库中检索出转换、计算或格式化过的数据,而不是检索出数据,然后再在客户端应用程序中重新格式化。
字段与列的意思相同。
注意:只有数据库知道select语句中哪些列是实际的表列,哪些列是计算字段,对客户端或者应用程序来说,计算字段的数据和其他列的数据的返回方式相同。

拼接字段

比如我们想将vend_name和vend_country一起按照格式vend_name(vend_country)输出。
在这里不同的数据库处理方式不同。对于MYSQL而言,要用concat函数实现。
SELECT concat(vend_name,' (',vend_country,')') FROM Vendors ORDER BY vend_name; 注意可以将’‘内的括号前加空格,来保证特有的格式输出。

可以使用别名来定义拼接或者其他处理后的字段
SELECT concat(vend_name,' (',vend_country,')') AS vend_title FROM Vendors ORDER BY vend_name;
可以使用RTRIM()去掉字符串右边的空格,LTRIM去掉左边的空格。TRIM去掉字符串两边的空格。

执行算术运算

SELECT prod_id,quantity,item_price,quantity*item_price AS expanded_price FROM OrderItems WHERE order_num=20008;

使用函数处理数据

函数

只有少数的函数为所有主要的DBMS等同的支持。

文本处理函数
SELECT vend_name,UPPER(vend_country) AS vend_country_up FROM Vendors ORDER BY vend_name;

日期和时间处理函数
对于不同的DBMS来说,函数会不同,对于MYSQL:
SELECT order_num FROM Orders WHERE ( YEAR(order_date)=2004 AND MONTH(order_date)=01 );

在主要的DBMS的函数中,数值函数时最一致的,比如ABS()、COS()等

函数这一部分需要查阅相对应的DBMS的说明文档。

汇总数据

应用:汇总表中的数据,而不是需要实际数据本身。利用聚集函数,有五个 AVG COUNT MAX MIN SUM

一些聚集函数及例子

SELECT()函数
SELECT AVG(prod_price) AS avg_price FROM Products; 返回该列的平均值。当然后面也可以加上WHRE语句进一步限定数据范围。
注意AVG只能作用于单个列,若要求多个列的均值,需要多个AVG。另外AVG过滤掉NULL。
COUNT()函数
SELECT COUNT(*) AS num_cust FROM Customers;返回顾客总数
SELECT COUNT(cust_email) AS num_cust FROM Customers; 对有邮件地址的用户计数
MAX()函数
SELECT MAX(prod_price) AS max_price FROM Products; 返回该列的最大值,MAX用于文本数据时,返回该列排序后的最后一行
MIN 同上 文本时 返回排序后的第一行
SUM()函数
SELECT SUM(quantity) AS sum_orders FROM OrderItems WHERE order_num=20005;返回购买总量。

聚集不同值

如果想只对某一列不同的值进行汇总处理,那么需要使用DISTINCT。默认情况下是对所有值使用汇总,即ALL。
SELECT AVG( DISTINCT prod_price ) AS avg_price FROM Products WHERE vend_id='DLL01';这表示对prod_price一列中不同的price进行均值解算。排除相同price的影响。
注意 DISTINCT不能用于COUNT(*),同时它只能用于列名,不能用于计算或表达式。
DISTINCT也能用于MAX MIN,但是并没有实际应用意义。

组合聚集函数

我们可以在一次查询中输出多个汇总数据
SELECT COUNT(*) AS num_items, MIN(prod_price) AS min_price, MAX(prod_price) AS max_price, AVG(prod_price) AS avg_price FROM Products;

猜你喜欢

转载自www.cnblogs.com/rayshaw/p/9026383.html