03 SQL拼接字段
标签:数据库、SQL
1.拼接字段
通过添加组合字段,使其便成为一个新的组合的变量输出出来。
①使用“||”
SELECT vend_name || ' (' || vend_country || ')'
FROM Vendors
ORDER BY vend_name;
不仅可以拼接表中的不同变量,也可以加引号拼接字符串。而且,会使变量后面意外的加上空格。还有一些数据库使用的是“+”来代替这里的“||”,使用方法同理。
②RTRIM()
、LTRIM()
、TRIM()
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
FROM Vendors
ORDER BY vend_name;
这里是用RTRIM()
函数来使得本来存在的会添加的空格消失。大多数DBMS都支持RTRIM()
(正如刚才 所见,它去掉字符串右边的空 格)、LTRIM()
(去掉字符串左边的空 格)以及TRIM()
(去掉字符串左右两边的 空格
③命名列
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
AS vend_title
FROM Vendors
ORDER BY vend_name;
这句主要是注意 AS vend_title 这一句,命名了输出的新的列。
这里的计算字段之后跟了文本AS vend_title。它指示SQL创建一个包含指定 计算结果的名为vend_title的计算字段。从 输出可以看到,结果与以前的相同,但现在 列名为vend_title,任何客户端应用都可以 按名称引用这个列,就像它是一个实际的列一样
④输出原本列和组合列
SELECT prod_id, quantity, item_price, quantity*item_price
AS expanded_price
FROM OrderItems
WHERE order_num = 20008;
最后一个列是一个相乘的组合列,对此,也同样地给新的列重命名了。同理,+、-、*、/ 都是可以是用来组合列的。
2.使用基本函数
在上一条中,我们已经使用过函数去掉了左边的空格了。其他更多的函数可以自行查看文档,或者参考Oracle 函数大全-博客园
①以函数处理时间Datepart
SELECT order_num
FROM Orders
WHERE DATEPART(yy, order_date) = 2012
使用DATAPART()
函数,对时间类型,来选择年份为2012的数据。根据数据库系统的不同,不同的系统运用不同的函数。对于Oracle系统而言,可以查看呢ORACLE日期时间函数大全来获取相关信息。
以下是Oracle的与上例同类的用法:
SELECT order_num
FROM Orders
WHERE to_number(to_char(order_date, 'YYYY')) = 2012;
或者使用between来夹杂日期间隔。
SELECT order_num FROM Orders WHERE order_date BETWEEN to_date('01-01-2012') AND to_date('12-31-2012');
3.聚集函数
这些聚集函数的作用和它们的名字一模一样。用来返回行数、平均值、最大值、最小值等等之类的信息。
函 数 | 说 明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值之和 |
①某一列的平均值
SELECT AVG(prod_price)
AS avg_price FROM Products;
或者可以添加完限制条件之后再返回所要求求得的平均值
SELECT AVG(prod_price)
AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
②COUNT()
函数
count()
函数的两种用法
• 使用COUNT(*)对表中行的数目进行计数,不 管表列中包含的是空值(NULL)还是非空 值。
• 使用COUNT(column)对特定列中具有值的行 进行计数,忽略NULL值
4.数据分组
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
上面的SELECT语句指定了两个列:vend_id 包含产品供应商的ID,num_prods为计算字段(用COUNT(*)函数建立)。GROUP BY子句指 示 DBMS 按 vend_id 排序并分组数据。这就会 对每个 vend_id 而不是整个表。
5.过滤分组——HAVING
HAVING非常类似于WHERE。事实上,目前 为止所学过的所有类型的WHERE子句都可以 用HAVING来替代。having的原理是先select 然后从select出来的进行筛选。而where是先筛选在select。
SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
这条SELECT语句的前三行类似于上面的语 句。最后一行增加了HAVING子句。比如,现在如果用WHERE对orders进行判断,就会报错。要知道,WHERE在数据分 组前进行过滤,HAVING在数据分组后进行 过滤。