SqlServer之基本增删改查(3)

计算字段


在很多情况下,存储在数据库中的原始数据不是我们想要的,我们往往要将其转换成一种特定的格式。这些操作虽然可以在客户端完成,但在数据库中完成也不失为一种好方法。

拼接字段

我们通常使用+运算符来拼接字段:

SELECT [LastName]+' '+[FirstName]
FROM   [dbo].[Employees]

拼接后的结果
拼接后的结果

TRIM

TRIM函数可以去除左右两边的空格,LTRIM则可以去除左边的空格,RTRIM同理:

SELECT RTRIM([LastName]+' ')+[FirstName]
FROM   [dbo].[Employees]

去除空格后
去除空格后

别名

在前面的示例中我们发现,查询结果并没有列名。为了方便起见,我们使用as关键字来手动添加。

SELECT [LastName]+' '+[FirstName] AS FullName
FROM   [dbo].[Employees]

添加别名
别名添加后的结果
WARNING:不要滥用别名,不要起无意义的别名。
TIP:除此之外,别名还可以用在表名,变量名中。

算数计算

在一个表中,有着商品数量和商品单价,那么,我们就可以很轻松地完成对商品总价格的计算:

SELECT [ProductID],[UnitPrice]*[Quantity]*(1-[Discount]) AS FullPrice
FROM [dbo].[Order Details]

计算结果
计算结果
TIP:+ - * /运算符都可以使用


函数


前面应该已经见识过了TRIM,YEAR等,所以我们不难知道Sql语言也有函数这一概念。

函数的缺点:

  • 不可移植

这个缺点已经足矣动摇你使用函数的决心了,不过现在你仍然得学习他,然后用自己的思维去判断是否应该使用函数。

使用函数

大部分SQL支持下列类型的函数

  • 处理文本的文本函数
  • 处理数据数值函数
  • 处理日期和时间值的时间函数
  • 返回DBMS正使用的特殊信息的系统函数
文本处理函数

前面我们介绍了TRIM函数,它可以将文笔两边的空格给干掉,解决了格式的问题,现在介绍一个叫UPPER的函数,它使小写字符转换成为了大写字符:

/*转换前*/
SELECT [CompanyName]
FROM [dbo].[Customers]

转换前的查询结果
转换前的查询结果

/*转换后*/
SELECT UPPER([CompanyName])
FROM [dbo].[Customers]

转换后的查询结果
转换后的查询结果


常用的文本处理函数还有这么一些:

这里面比较有意思的是SOUNDEX函数,这个函数可以根据发音来进行相似匹配。


日期处理函数

日期处理函数的通用性不是一般的差,每种数据库都有不同的函数,相同的函数名也有不同参数格式。实在是蛋疼不已。

建议大部分情况下都是用DATEPART函数,在SQL Server中,它的使用方法如下:

SELECT [ShipAddress],
       [ShipCity]
FROM   [dbo].[Orders]
WHERE  DATEPART(yy, [OrderDate]) = 1997

其中DATEPART的第一个参数有如下多种形式:

数值处理

数值处理函数是统一度最高的函数了。

常用数值处理函数


聚集函数


有时候我们不只是需要检索数据,还需要把数据汇总进行分析,如得到查询到的条数,平均数等。

SQL常见聚合函数


下面我们来演示一下AVG函数的用法:

SELECT AVG([UnitPrice]) AS AVGNUM
FROM [dbo].[Order Details]

查询结果:
查询结果
**TIP:如果在列名前加入DISTINCT关键字则会提出重复的数据
**TIP:可以使用多个聚合函数来进行组合查询


分组查询


分组查询用于归纳。比如查找各个类型的数量。演示如下:

SELECT [City]
      ,COUNT(*)
  FROM [dbo].[Customers]
  GROUP BY [City]

查询结果
result
WARNING:如果你在分组查询下查找某一具体属性时,会出现异常

过滤分组

WHERE关键字只能用于过滤列,对分组就无能为力了。所以,SQL引入了一个新的关键字HAVING

我们继续拿上一个例子做演示

SELECT [City]
      ,COUNT(*)
  FROM [dbo].[Customers]
  GROUP BY [City]
  HAVING COUNT(*)>1

查询结果
result

我们可以理解为当我们进行分组时,数据库会为我们创建一个新的对象——,这个新的对象有着自己的属性,我们成为组属性,它和列属性有着本质的不同。希望大家可以分清楚他们之间的区别。

分组排序

分组排序和列排序的关键字相同,都是使用GROUP BY,但依然是使用组属性:

SELECT [City],COUNT(*) AS Items
  FROM [dbo].[Customers]
  GROUP BY [City]
  HAVING COUNT(*)>1
  ORDER BY Items,[City]

查询结果
result

结束


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值