SQL中常⽤Function总结⼆
SQL 中常⽤Function总结⼆
⼀、SQL GROUP BY 语句
合计函数 (⽐如 SUM) 常常需要添加 GROUP BY 语句。
定义:GROUP BY 语句⽤于结合合计函数,根据⼀个或多个列对结果集进⾏分组。
GROUP BY 语法:
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
举例说明:
例⼦ 1:查每个客户的总⾦额(总订单)。使⽤ GROUP BY 语句对客户进⾏组合。
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer;
结果:
注:在MSSQL中 执⾏SELECT Customer,SUM(OrderPrice) FROM Orders语句会报错,这是因为:在MSSQL中,当SELECT 后 既有 表结构本⾝的字段,⼜有需要使⽤聚合函数(COUNT(),SUM(),MAX(),MIN(),AVG()等)的字段,就要⽤到group by分组,查询的限定条件⾥有需要⽤聚合函数计算的字段时也需要⽤分组。但是在MySQL中执⾏SELECT Customer,SUM(OrderPrice) FROM Orders时,并不会报错,只是显⽰的结果如下:
这⾥可以看出,通过SUM(OrderPrice)计算后返回的结果是⼀条记录,故⽽最后只有⼀条记录。但是结果并不是我们想要的,所以切记要加上GROUP BY。另外顺便介绍
下,WHERE和HAVING的区别,WHERE作⽤于全表,⽽HAVING只作⽤于分组的组内。
⼆、SQL中的HAVING ⼦句
定义:在 SQL 中增加 HAVING ⼦句原因是,WHERE 关键字⽆法与合计函数⼀起使⽤。
HAVING 语法:
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
举例说明:
例⼦ 1:查订单总⾦额少于 2000 的客户。
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000;
结果:
例⼦ 2:现在查客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总⾦额。
SELECT Customer,SUM(OrderPrice) FROM Orders WHERE Customer='Bush' OR Customer='Adams' GROUP BY Customer HAVING SUM(OrderPrice)>1500;
结果:
例⼦ 3:现在查订单数量⼤于1的⽤户。
SELECT Customer FROM Orders GROUP BY Customer HAVING COUNT(O_id)>1;
结果:
三、SQL中的UCASE函数
定义:UCASE 函数把字段的值转换为⼤写。
UCASE语法:
SELECT UCASE(column_name) FROM table_name
注:MSSQL不⽀持UCASE,取代的函数名为UPPER,⽤法⼀样。
举例说明:
例⼦ 1:现在查询订单表的所有客户并将其名字⼤写化。
SELECT distinct UCASE(Customer) FROM Orders;
结果:
四、SQL中的LCASE函数
定义:LCASE 函数把字段的值转换为⼩写。
LCASE语法:
SELECT LCASE(column_name) FROM table_name
注:MSSQL不⽀持LCASE,取代的函数名为LOWER,⽤法⼀样
举例说明:
例⼦ 1:现在查询订单表的所有客户并将其名字⼩写化。
SELECT distinct LCASE(Customer) FROM Orders;
结果:
五、SQL中的MID函数
定义:MID 函数⽤于从⽂本字段中提取字符。
MID语法:
SELECT MID(column_name,start[,length]) FROM table_name
注:MSSQL不⽀持MID,取代的函数名为Substring,⽤法⼀样int函数与round函数
参数说明:
column_name    必需。要提取字符的字段。
start必需。规定开始位置(起始值是 1)。
length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余⽂本。meta
举例说明:
例⼦ 1:从 "Customer" 列中提取前 3 个字符。
SELECT distinct MID(Customer,1,3) FROM Orders;
结果:
六、SQL中的LEN函数
定义:LEN 函数返回⽂本字段中值的长度。
LEN语法:
SELECT LEN(column_name) FROM table_name
注:MySql不⽀持LEN,取代的函数名为LENGTH,⽤法⼀样
举例说明:
例⼦ 1:取得 "Customer" 列中值的长度。
SELECT distinct LENGTH(Customer) FROM Orders;
结果:
七、SQL中的ROUND函数
定义:ROUND 函数⽤于把数值字段舍⼊为指定的⼩数位数。
ROUND语法:
SELECT ROUND(column_name,decimals) FROM table_name
参数说明:
参数描述
column_name必需。要舍⼊的字段。
decimals必需。规定要返回的⼩数位数。
举例说明:
例⼦ 1:把名称和价格舍⼊为最接近的整数。
SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Product;
结果:
⼋、SQL中的Now函数
定义:NOW 函数返回当前的⽇期和时间。
NOW语法:
SELECT NOW() FROM table_name
注:使⽤ MSServer 数据库,要使⽤ getdate() 函数来获得当前的⽇期时间。
举例说明:
例⼦ 1:显⽰当天的⽇期所对应的和价格。
SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
结果:
九、SQL中的FORMAT函数
定义:FORMAT 函数⽤于对字段的显⽰进⾏格式化。
FORMAT语法:
SELECT FORMAT(column_name,format) FROM table_name
注:MSSQL中没有format函数,取代的是convert函数
参数说明:
参数描述
column_name必需。要格式化的字段。
format必需。规定格式。
举例说明:
例⼦ 1:显⽰每天⽇期所对应的名称和价格(⽇期的显⽰格式是 "YYYY-MM-DD")。
SELECT ProductName, UnitPrice, DATE_FORMAT(Now(),'%Y-%M-%D') as PerDate FROM Product;
注:在Mysql中使⽤format来格式化⽇期类型有问题,需要使⽤另⼀个函数来格式化:date_format(), 同时格式化的格式也有区别,之后会专门写⼀个准对MySQL格式化⽇期的⽂章。
结果:
将'%Y-%M-%D'换成'%y-%m-%d'后的效果
SELECT ProductName, UnitPrice, DATE_FORMAT(Now(),'%y-%m-%d') as PerDate FROM Product;
结果:
例⼦2:使⽤format来格式化UnitPrice,结果保留⼀位⼩数。
SELECT ProductName, format(UnitPrice,1), DATE_FORMAT(Now(),'%y-%m-%d') as PerDate FROM Product;
下⾯是例⼦中涉及到表的建表语句和数据:
create table Orders(
O_Id int,
OrderDate date,
OrderPrice float,
Customer varchar(10)
);
insert into Orders values(1,'2008/12/29',1000,'Bush');
insert into Orders values(2,'2008/11/23',1600,'Carter');
insert into Orders values(3,'2008/10/05',700,'Bush');
insert into Orders values(4,'2008/09/28',300,'Bush');
insert into Orders values(5,'2008/08/06',2000,'Adams');
insert into Orders values(6,'2008/07/21',100,'Carter');
create table Product(
Prod_Id int,
ProductName varchar(20),
Unit varchar(20),
UnitPrice float
);
insert into Product values(1,'gold','1000 g',32.35);
insert into Product values(2,'silver','1000 g',11.56);
insert into Product values(3,'copper','1000 g',6.85);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。