1、SQL的函数分为两类。
合计函数(Aggregate functions),面向多个值,返回一个值。
Scalar 函数,面向一个值,返回一个值。
每个数据库的函数不同:
MS Access 中的合计函数
函数 | 描述 |
返回某列的平均值 | |
返回某列的行数(不包括 NULL 值) | |
返回被选行数 | |
FIRST(column) | 返回在指定的域中第一个记录的值 |
LAST(column) | 返回在指定的域中最后一个记录的值 |
返回某列的最高值 | |
返回某列的最低值 | |
STDEV(column) |
|
STDEVP(column) |
|
返回某列的总和 | |
VAR(column) |
|
VARP(column) |
|
在 SQL Server 中的合计函数
函数 | 描述 |
返回某列的平均值 | |
BINARY_CHECKSUM |
|
CHECKSUM |
|
CHECKSUM_AGG |
|
返回某列的行数(不包括NULL值) | |
返回被选行数 | |
返回相异结果的数目 | |
返回在指定的域中第一个记录的值(SQLServer2000 不支持) | |
返回在指定的域中最后一个记录的值(SQLServer2000 不支持) | |
返回某列的最高值 | |
返回某列的最低值 | |
STDEV(column) |
|
STDEVP(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语法格式为
SELECT function(列) FROM 表
SELECT AVG(age) AS AVG_Age FROM person; #实验一下,返回了年龄的平均值。 #为了测试方便,在person表里加了一列gongzi,工资。
UPDATE person SET gongzi=RAND(); #Baidu下用rand()随机下工资数字,但好像只生成了0-1之间数字。
UPDATE person SET gongzi=(2000+RAND()*(2000)); #变大了一点,但是还有小数点
UPDATE person SET gongzi=ROUND((2000+RAND()*(2000)),0); #用ROUND()去掉了小数点,这样看起来就真实多了。。
------------下面来试试各种函数----------------
SELECT COUNT(DISTINCT CONCAT(FirstName,' ',LastName)) FROM person; #看看有多少人,CONCAT可以用来连接字符。
SELECT DISTINCT CONCAT(FirstName,' ',LastName) FROM person; #这些人分别是谁
SELECT FirstName,LastName,gongzi AS MAXgongzi FROM person GROUP BY gongzi DESC LIMIT 3; #看看工资最高的三个人,因为是MYSQL,没有TOP,所以就用LIMIT 3;
明天继续吧。。下班了。。。 今天比较忙,服务器挂了,打电话到各办事处通知。。。 |