SQL语句(三)

SQL函数

内建SQL函数的语法:

select function(列) from 表

函数的类型:aggregate函数(合计函数),scalar函数

合计函数(aggregate functions)

aggregate函数的操作面向一系列的值,并返回一个单一的值

如果在select语句的项目列表中的众多其他表达式中使用select语句,则这个select必须使用group by语句

MS Access中的合计函数

函数描述
AVG(column)返回某列的平均值
COUNT(column)返回某列的行数(不包括 NULL 值)
COUNT(*)返回被选行数
FIRST(column)返回在指定的域中第一个记录的值
LAST(column)返回在指定的域中最后一个记录的值
MAX(column)返回某列的最高值
MIN(column)返回某列的最低值
STDEV(column) 
STDEVP(column) 
SUM(column)返回某列的总和
VAR(column) 
VARP(column) 

在SQL Server中的合计函数

函数描述
AVG(column)返回某列的平均值
BINARY_CHECKSUM 
CHECKSUM 
CHECKSUM_AGG 
COUNT(column)返回某列的行数(不包括NULL值)
COUNT(*)返回被选行数
COUNT(DISTINCT column)返回相异结果的数目
FIRST(column)返回在指定的域中第一个记录的值(SQLServer2000 不支持)
LAST(column)返回在指定的域中最后一个记录的值(SQLServer2000 不支持)
MAX(column)返回某列的最高值
MIN(column)返回某列的最低值
STDEV(column) 
STDEVP(column) 
SUM(column)返回某列的总和
VAR(column) 
VARP(column) 

Scalar函数

scalar函数的操作面向某个单一的值,并返回基于输入值的一个单一的值

MS Access 中的 scalar函数

函数描述
UCASE(c)将某个域转换为大写
LCASE(c)将某个域转换为小写
MID(c,start[,end])从某个文本域提取字符
LEN(c)返回某个文本域的长度
INSTR(c,char)返回在某个文本域中指定字符的数值位置
LEFT(c,number_of_char)返回某个被请求的文本域的左侧部分
RIGHT(c,number_of_char)返回某个被请求的文本域的右侧部分
ROUND(c,decimals)对某个数值域进行指定小数位数的四舍五入
MOD(x,y)返回除法操作的余数
NOW()返回当前的系统日期
FORMAT(c,format)改变某个域的显示方式
DATEDIFF(d,date1,date2)用于执行日期计算

SQL AVG函数

AVG函数返回数值列的平均值,NULL值不包括在计算中。

语法:select avg(column_name) from table_name

eg:

计算orderprice字段的平均值

select avg (orderprice) as orderaverage from orders

找到orderprice值高于orderprice平均值的客户

select customer from orders

where orderprice>(select avg(orderprice) from orders)


COUNT()函数

count(column_name)语法:返回匹配指定条件的行数(null不计入)

select count(column_name) from table_name

count(*)语法:返回表中的记录数

select count(*) from table name 

count(distinct column_name)语法:返回指定列的不同值的数目

select count(distinct column_name) from table_name

count(distinct)适用于oracle和sql server,不能用于access

eg:

O_IdOrderDateOrderPriceCustomer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter

计算客户carter的订单数:

select count (customer) as customernilsen from orders

where customer ='carter'

结果:

CustomerNilsen
2

COUNT(*)实例

如果我们省略where子句,比如这样

select count(*) as numberoforders from orders

结果:

NumberOfOrders

6

这是表中的总行数

计算“orders”表中不同客户的数目

select count(distinct customer) as numberofcustomers from orders

结果:

NumberOfOrders
3

这是orders表中不同客户bush,carter和adams的数目


FIRST()函数

返回指定的字段中第一个记录的值。可使用order by语句对记录进行排序。

语法:select first(column_name) from table_name

eg:查找orderprice列的第一个值

select first(orderprice) as firstorderprice from orders

结果:

FirstOrderPrice
1000

LAST()函数

返回指定的字段中最后一个记录的值,可使用order by语句对记录进行排序

语法:select last(column_name) from table_name

eg:

查找orderprice列的最后一个值

select last(orderprice) as lastorderprice from orders

结果:

LastOrderPrice
100

MAX函数

返回列中的最大值,null值不包括在计算中

语法:select max(column_name) from table_name


MIN函数

返回列中的最小值,null值不包括在计算中

语法:select min(column_name) from table_name

注:max和min也可用于文本列,以获得按字母顺序排列的最高或最低值


SUM函数

返回数值列的总数(总额)

语法:select sum(column_name) from table_name


GROUP BY语句

合计函数(比如sum)常常需要添加group by 语句,根据一个或多个列对结果集进行分组

语法:

select column_name, aggregate_function(column_name)

from table_name

where column_name operator value

group by column_name

eg:

希望查找每个客户的总金额(总订单),使用group by语句对客户进行组合

select customer,sum(orderprice) from orders

group by customer

结果:

CustomerSUM(OrderPrice)
Bush2000
Carter1700
Adams2000

若省略group by 则

CustomerSUM(OrderPrice)
Bush5700
Carter5700
Bush5700
Bush5700
Adams5700
Carter5700

对一个以上的列应用group by:

select customer,orderdate,sum(orderprice) from orders

group by customer, orderdate


HAVING子句

增加having子句的原因是,where关键字无法与合计函数一起使用

语法:

select column_name, aggregate_function(column_name)

from table_name

shere column_name opeator value

group by column_name

having aggregate_function(column_name) opeator value

eg:

查找订单总金额少于2000的客户

select customer, sum(orderprice) from orders

group by customer

having sum(orderprice)<2000

结果:

CustomerSUM(OrderPrice)
Carter1700

查找bush或adams拥有超过1500的订单总金

select customer, sum(orderprice) from orders

where customer='bush' or customer='adams'

group by customer

having sum(orderprice)>1500

结果:

CustomerSUM(OrderPrice)
Bush2000
Adams2000


UCASE()函数

把字段的值转换为大写

语法:

select ucase(column_name) from table_name

eg:

select ucase(lastname) as lastneme,firstname from persons


LCASE函数

把字段的值转换为小写

语法:

select ucase(column_name) from table_name

eg:

select Lcase(lastname) as lastneme,firstname from persons


MID函数

用于从文本字段提取字符

语法:

select mid(column_name,start,[length]) from table_name

参数描述
column_name必需。要提取字符的字段。
start必需。规定开始位置(起始值是 1)。
length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

eg:

select mid(city,1,3) as smallcity from persons

SmallCity
Lon
New
Bei

LEN()函数

返回文本字段中值的长度

语法:select len(column_name) from table_name

eg: select len(city) as lengthofcity from persons

LengthOfCity
6
8
7

ROUND()函数

用于把数值阻断舍入为指定的小数位数

语法:select round(column_name,decimals) from table_name

参数描述
column_name必需。要舍入的字段。
decimals必需。规定要返回的小数位数。

eg:

Prod_IdProductNameUnitUnitPrice
1gold1000 g32.35
2silver1000 g11.56
3copper1000 g6.85

把名称和价格舍入最接近的整数

select productname, round(unitprice,0) as unitprice from products

ProductNameUnitPrice
gold32
silver12
copper7


NOW()函数

返回当前的日期和时间

如果是sql server数据库,用getdate()函数来获得当前日期时间

语法:select now() fromtable_name

Prod_IdProductNameUnitUnitPrice
1gold1000 g32.35
2silver1000 g11.56
3copper1000 g6.85

select productname, unitprice, now() as perdate from products

ProductNameUnitPricePerDate
gold32.3512/29/2008 11:36:05 AM
silver11.5612/29/2008 11:36:05 AM
copper6.8512/29/2008 11:36:05 AM

FORMAT()函数

用于对字段的显示进行格式化

语法: select format(column_name,format) from table_name

参数描述
column_name必需。要格式化的字段。
format必需。规定格式。

eg:

Prod_IdProductNameUnitUnitPrice
1gold1000 g32.35
2silver1000 g11.56
3copper1000 g6.85

希望显示每天日期所对应的名称和价格(日期显示格式为YYYY-MM-DD)

select productname , unitprice ,  format(nuw(),'YYYY-MM-DD') as perdate

from products

ProductNameUnitPricePerDate
gold32.3512/29/2008
silver11.5612/29/2008
copper6.8512/29/2008

SQL快速参考

语句语法
AND / ORSELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLE (add column)ALTER TABLE table_name 
ADD column_name datatype
ALTER TABLE (drop column)ALTER TABLE table_name 
DROP COLUMN column_name
AS (alias for column)SELECT column_name AS column_alias
FROM table_name
AS (alias for table)SELECT column_name
FROM table_name  AS table_alias
BETWEENSELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASECREATE DATABASE database_name
CREATE INDEXCREATE INDEX index_name
ON table_name (column_name)
CREATE TABLECREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
.......
)
CREATE UNIQUE INDEXCREATE UNIQUE INDEX index_name
ON table_name (column_name)
CREATE VIEWCREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DELETE FROMDELETE FROM table_name 
(Note: Deletes the entire table!!)

or

DELETE FROM table_name
WHERE condition

DROP DATABASEDROP DATABASE database_name
DROP INDEXDROP INDEX table_name.index_name
DROP TABLEDROP TABLE table_name
GROUP BYSELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1
HAVINGSELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1
HAVING SUM(column_name2) condition value
INSELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTOINSERT INTO table_name
VALUES (value1, value2,....)

or

INSERT INTO table_name
(column_name1, column_name2,...)
VALUES (value1, value2,....)

LIKESELECT column_name(s)
FROM table_name
WHERE column_name
LIKE pattern
ORDER BYSELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECTSELECT column_name(s)
FROM table_name
SELECT *SELECT *
FROM table_name
SELECT DISTINCTSELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO
(used to create backup copies of tables)
SELECT *
INTO new_table_name
FROM original_table_name

or

SELECT column_name(s)
INTO new_table_name
FROM original_table_name

TRUNCATE TABLE
(deletes only the data inside the table)
TRUNCATE TABLE table_name
UPDATEUPDATE table_name
SET column_name=new_value
[, column_name=new_value]
WHERE column_name=some_value
WHERESELECT column_name(s)
FROM table_name
WHERE condition



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值