当前位置:首页 » 编程语言 » sql提供的功能函数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql提供的功能函数

发布时间: 2022-10-11 09:23:12

① 求sql的全部函数!完整的加分100

select
sin(23.45),atan(1.234),rand(),PI(),sign(-2.34)
--其中rand是获得一个随机数
--配置函数
SELECT
@@VERSION
--获取当前数据库版本
SELECT
@@LANGUAGE
--当前语言
--时间函数
select
getdate()
as
'wawa_getdate'
--当前时间
select
getutcdate()
as
'wawa_getutcdate'
--获取utc时间
select
day(getdate())
as
'wawa_day'
--取出天
select
month(getdate())
as
'wawa_month'
--取出月
select
year(getdate())
as
'wawa_year'
--取出年
select
dateadd(d,3,getdate())
as
wawa_dateadd
--加三天,注意'd'表示天,'m'表示月,'yy'表示年,下面一样
select
datediff(d,'2004-07-01','2004-07-15')
as
wawa_datediff
--计算两个时间的差
select
datename(d,'2004-07-15')
as
wawa_datename
--取出时间的某一部分
select
datepart(d,getdate())
as
wawa_datepart
--取出时间的某一部分,和上面的那个差不多
--字符串函数
select
ascii(123)
as
'123',ascii('123')
as
'"123"',ascii('abc')
as
'"abc"'
--转换成ascii码
select
char(123),char(321),char(-123)
--根据ascii转换成字符
select
lower('ABC'),lower('Abc'),upper('Abc'),upper('abc')
--转换大小写
select
str(123.45,6,1),
str(123.45,2,2)
--把数值转换成字符串
select
ltrim('
"左边没有空格"')
--去空格
select
rtrim('"右边没有空格"
')
--去空格
select
ltrim(rtrim('
"左右都没有空格"
'))
--去空格
select
left('sql
server',3),right('sql
server',6)
--取左或者取右
use
pubs
select
au_lname,substring(au_fname,1,1)
--取子串
from
authors
order
by
au_lname
select
charindex('123','abc123def',2)
--返回字符串中指定表达式的起始位置
select
patindex('123','abc123def'),patindex('%123%','abc123def')
--返回表达式中某模式第一次出现的起始位置
select
quotename('abc','{'),quotename('abc')
--返回由指定字符扩住的字符串
select
reverse('abc'),reverse('上海')
--颠倒字符串顺序
select
replace('abcdefghicde','cde','xxxx')
--返回呗替换了指定子串的字符串
select
space(5),space(-2)

② sql语句的几个常用函数总结

聚合函数max() count() sum() min()
开窗函数row_number(),rank()
时间函数convert(),adatediff(week,[dateadd],getdate())

③ select abs(-5)什么意思

返回数值的绝对值。
abs(5) 返回 5;
abs(-5)
返回 5;
Oracle SQL 提供了用于执行特定操作的专用函数。
这些函数大大增强了 SQL 语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。 oracle 数据库中主要使用两种类型的函数:单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果。聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x)

④ sql常用的字符串函数,日期函数,数学函数有哪些,各实现什么功能

getdate 系统当前日期
dateadd 日期指定日或月或年,加上一个数等于新的日期时间
datediff 计算两个日期差

sum 求和
avg 平均值
count 计数

⑤ 如何在sql中定义一个函数,函数功能是传入一个字符串,返回这个字符串中的数

1通过VisualStudio2008新建一个SQLServer项目。2,配置连接的数据库点击上一步确定后,可以通过添加新引用来添加一个数据库连接(只适用MS SQL Server 2005或以上版本,再次提醒哦),添加以后选择其中一个数据库点击确。3,添加一个自定义函数。然后编写自定义函数的类即可。
用户自定义函数是指如果要在公式或计算中使用特别复杂的计算,而工作表函数又无法满足需要,则需要创建用户自定义函数。

⑥ 什么SQL函数,作用有哪些

SQL 拥有很多可用于计数和计算的内建函数。
[编辑本段]函数的语法
内建 SQL 函数的语法是: SELECT function(列) FROM 表
[编辑本段]函数的类型
在 SQL 中,基本的函数类型和种类有若干种。函数的基本类型是: Aggregate 函数 Scalar 函数
[编辑本段]合计函数(Aggregate functions)
Aggregate 函数的操作面向一系列的值,并返回一个单一的值。 注释:如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句!"Persons" table (在大部分的例子中使用过) Name Age
Adams, John 38
Bush, George 33
Carter, Thomas 28

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) 用于执行日期计算

[编辑本段]AVG 函数

[编辑本段]定义和用法
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SQL AVG() 语法
SELECT AVG(column_name) FROM table_name
[编辑本段]SQL AVG() 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

例子 1
现在,我们希望计算 "OrderPrice" 字段的平均值。 我们使用如下 SQL 语句: SELECT AVG(OrderPrice) AS OrderAverage FROM Orders结果集类似这样: OrderAverage
950

例子 2
现在,我们希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。 我们使用如下 SQL 语句: SELECT Customer FROM OrdersWHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)结果集类似这样: Customer
Bush
Carter
Adams
COUNT() 函数COUNT() 函数返回匹配指定条件的行数。
[编辑本段]SQL COUNT() 语法
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入): SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 语法
COUNT(*) 函数返回表中的记录数: SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目: SELECT COUNT(DISTINCT column_name) FROM table_name注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
[编辑本段]SQL COUNT(column_name) 实例
我们拥有下列 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望计算客户 "Carter" 的订单数。 我们使用如下 SQL 语句: SELECT COUNT(Customer) AS CustomerNilsen FROM OrdersWHERE Customer='Carter'以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单:CustomerNilsen
2
SQL COUNT(*) 实例 如果我们省略 WHERE 子句,比如这样: SELECT COUNT(*) AS NumberOfOrders FROM Orders结果集类似这样:NumberOfOrders
6
这是表中的总行数。
[编辑本段]SQL COUNT(DISTINCT column_name) 实例
现在,我们希望计算 "Orders" 表中不同客户的数目。 我们使用如下 SQL 语句: SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders结果集类似这样: NumberOfCustomers
3
这是 "Orders" 表中不同客户(Bush, Carter 和 Adams)的数目。 FIRST() 函数FIRST() 函数返回指定的字段中第一个记录的值。 提示:可使用 ORDER BY 语句对记录进行排序。
SQL FIRST() 语法
SELECT FIRST(column_name) FROM table_name
[编辑本段]SQL FIRST() 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找 "OrderPrice" 列的第一个值。 我们使用如下 SQL 语句: SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders结果集类似这样: FirstOrderPrice
1000

[编辑本段]LAST() 函数
LAST() 函数返回指定的字段中最后一个记录的值。 提示:可使用 ORDER BY 语句对记录进行排序。
SQL LAST() 语法
SELECT LAST(column_name) FROM table_name
[编辑本段]SQL LAST() 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找 "OrderPrice" 列的最后一个值。 我们使用如下 SQL 语句: SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders结果集类似这样: LastOrderPrice
100

[编辑本段]MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SQL MAX() 语法
SELECT MAX(column_name) FROM table_name注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
[编辑本段]SQL MAX() 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找 "OrderPrice" 列的最大值。 我们使用如下 SQL 语句: SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders结果集类似这样: LargestOrderPrice
2000

[编辑本段]MIN() 函数
MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
SQL MIN() 语法
SELECT MIN(column_name) FROM table_name注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
[编辑本段]SQL MIN() 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找 "OrderPrice" 列的最小值。 我们使用如下 SQL 语句: SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders结果集类似这样: SmallestOrderPrice
100

[编辑本段]SUM() 函数
SUM 函数返回数值列的总数(总额)。
SQL SUM() 语法
SELECT SUM(column_name) FROM table_name
[编辑本段]SQL SUM() 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找 "OrderPrice" 字段的总数。 我们使用如下 SQL 语句: SELECT SUM(OrderPrice) AS OrderTotal FROM Orders结果集类似这样: OrderTotal
5700
GROUP BY 语句合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。
[编辑本段]GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name
[编辑本段]SQL GROUP BY 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找每个客户的总金额(总订单)。 我们想要使用 GROUP BY 语句对客户进行组合。 我们使用下列 SQL 语句: SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY Customer结果集类似这样: Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
很棒吧,对不对? 让我们看一下如果省略 GROUP BY 会出现什么情况: SELECT Customer,SUM(OrderPrice) FROM Orders结果集类似这样: Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700
上面的结果集不是我们需要的。 那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。
[编辑本段]GROUP BY 一个以上的列
我们也可以对一个以上的列应用 GROUP BY 语句,就像这样: SELECT Customer,OrderDate,SUM(OrderPrice) FROM OrdersGROUP BY Customer,OrderDate
[编辑本段]HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SQL HAVING 语法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value
[编辑本段]SQL HAVING 实例
我们拥有下面这个 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找订单总金额少于 2000 的客户。 我们使用如下 SQL 语句: SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000结果集类似: Customer SUM(OrderPrice)
Carter 1700
现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。 我们在 SQL 语句中增加了一个普通的 WHERE 子句: SELECT Customer,SUM(OrderPrice) FROM OrdersWHERE Customer='Bush' OR Customer='Adams'GROUP BY CustomerHAVING SUM(OrderPrice)>1500结果集: Customer SUM(OrderPrice)
Bush 2000
Adams 2000

[编辑本段]UCASE() 函数
UCASE 函数把字段的值转换为大写。
SQL UCASE() 语法
SELECT UCASE(column_name) FROM table_name
[编辑本段]SQL UCASE() 实例
我们拥有下面这个 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
现在,我们希望选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为大写。 我们使用如下 SQL 语句: SELECT UCASE(LastName) as LastName,FirstName FROM Persons结果集类似这样: LastName FirstName
ADAMS John
BUSH George
CARTER Thomas

[编辑本段]LCASE() 函数
LCASE 函数把字段的值转换为小写。
SQL LCASE() 语法
SELECT LCASE(column_name) FROM table_name
[编辑本段]SQL LCASE() 实例
我们拥有下面这个 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
现在,我们希望选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为小写。 我们使用如下 SQL 语句: SELECT LCASE(LastName) as LastName,FirstName FROM Persons结果集类似这样: LastName FirstName
adams John
bush George
carter Thomas

[编辑本段]MID() 函数
MID 函数用于从文本字段中提取字符。
SQL MID() 语法
SELECT MID(column_name,start[,length]) FROM table_name参数 描述
column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

[编辑本段]SQL MID() 实例
我们拥有下面这个 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
现在,我们希望从 "City" 列中提取前 3 个字符。 我们使用如下 SQL 语句: SELECT MID(City,1,3) as SmallCity FROM Persons结果集类似这样: SmallCity
Lon
New
Bei

[编辑本段]LEN() 函数
LEN 函数返回文本字段中值的长度。
SQL LEN() 语法
SELECT LEN(column_name) FROM table_name
[编辑本段]SQL LEN() 实例
我们拥有下面这个 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
现在,我们希望取得 "City" 列中值的长度。 我们使用如下 SQL 语句: SELECT LEN(City) as LengthOfAddress FROM Persons结果集类似这样: LengthOfCity
6
8
7

[编辑本段]ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数。
SQL ROUND() 语法
SELECT ROUND(column_name,decimals) FROM table_name参数 描述
column_name 必需。要舍入的字段。
decimals 必需。规定要返回的小数位数。

[编辑本段]SQL ROUND() 实例
我们拥有下面这个 "Procts" 表: Prod_Id ProctName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
现在,我们希望把名称和价格舍入为最接近的整数。 我们使用如下 SQL 语句: SELECT ProctName, ROUND(UnitPrice,0) as UnitPrice FROM Procts结果集类似这样: ProctName UnitPrice
gold 32
silver 12
copper 7

[编辑本段]NOW() 函数
NOW 函数返回当前的日期和时间。
SQL NOW() 语法
SELECT NOW() FROM table_name
[编辑本段]SQL NOW() 实例
我们拥有下面这个 "Procts" 表: Prod_Id ProctName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
现在,我们希望显示当天的日期所对应的名称和价格。 我们使用如下 SQL 语句: SELECT ProctName, UnitPrice, Now() as PerDate FROM Procts结果集类似这样: ProctName UnitPrice PerDate
gold 32.35 12/29/2008 11:36:05 AM
silver 11.56 12/29/2008 11:36:05 AM
copper 6.85 12/29/2008 11:36:05 AM

[编辑本段]FORMAT() 函数
FORMAT 函数用于对字段的显示进行格式化。
SQL FORMAT() 语法
SELECT FORMAT(column_name,format) FROM table_name参数 描述
column_name 必需。要格式化的字段。
format 必需。规定格式。

[编辑本段]SQL FORMAT() 实例
我们拥有下面这个 "Procts" 表: Prod_Id ProctName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
现在,我们希望显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD")。 我们使用如下 SQL 语句: SELECT ProctName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDateFROM Procts结果集类似这样: ProctName UnitPrice PerDate
gold 32.35 12/29/2008
silver 11.56 12/29/2008
copper 6.85 12/29/2008

⑦ SQL语言的功能包括哪些

SQL语言功能主要分成四部分:

(1)数据定义。(DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。

(2)数据操纵。(DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。

(3)数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。

(4)嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。

拓展资料:

DDL是SQL语言的四大功能之一。
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束
DDL不需要commit.

⑧ SQL有哪些内置的标准函数,有没有清单和用法

google一下就知道了
比如:
聚合函数:
AVG
COUNT
MAX
MIN
RANGE
STDEV
SUM
VARIANCE

内置时间函数:
DAY
MDY
MONTH
WEEKDAY
YEAR
CURRENT
EXTEND

字符串操作函数
LOWER
UPPER
INITCAP
REPLACE
SUBSTR
SUBSTRING
LPAD
RPAD

其他函数:
LENGTH
USER
CURRENT
TODAY
DBSERVERNAME
HEX
DBINFO
DECODE
NVL
TODAY

⑨ SQL——聚集函数

聚集函数 是以值是一个集合(集或者多重集)为输入、返回单个值得函数。SQL提供了五个固有聚集函数。
平均值 :avg
最小值 :min
最大值 :max
总和 :sum
计数 :count

以上五个固有聚集函数都是属于基本聚集
示例:

其他基本聚集使用形式差不多。

如果希望将聚集函数作用在单个元组集上,也希望作用到一组元组集上,此时可以利用group by子句来实现。

group by 子句作用: 对给出的一个或多个属性来构造分组,将属性上取值相同的元组分到同一组中。

示例

值得注意的是, 当SQL查询使用分组的时候,需要保证出现在select语句中但没有被聚集的属性只能是出现在group by 子句中的那些属性。换句话说,任何 没有出现 在group by子句中的属性如果出现在select子句中的话,它 只能出现在聚集函数的内部 ,否则这样的查询就是错误的,例如:

不过令我哭笑不得是,呃……,竟然运行没有报错[捂脸.jpg],然后仔细观察了以下,原因是id是没有被聚集,所以是属于查询错误,
看下面的结果,类别biology的id只有10211,其实还有另外一个。在分组计算中只输出一个元组,这样是无法确定选择哪一个id作为输出,下一次运行结果id值可能为其他值。[如果你有什么新发现,望告知]

有时候限定分组条件比对元组限定条件更有用。比如我们只对工资超过15000某一个系感兴趣。该条件并不针对某个元组,而是针对group by子句构成的分组。即是说,having子句是在分组之后才生效的,可以使用聚集函数。例如:

注意: 与select子句的情况类似,任何出现在having子句中,但没有被聚集的属性必须出现在group by子句中,否则查询就被当成是错误的。

包含聚集、group by 或者having子句的查询的含义可通过下述操作序列定义:

1、根据from子句计算出一个关系

2、如果出现where子句,where子句的谓词将应用到from子句的结果上

3、如果出现group by子句,满足where子句的元组通过group by子句形成分组。如果没有
group by子句,满足where谓词的整个元组集被当做一个分组

4、如果出现having子句,他将应用到每个分组上;不满足having子句谓词的分组将被抛弃。

5、select子句利用剩下的分组产生出查询结果中的元组,即每个分组上应用聚集函数来得到单个关系元组

空值的出现对聚集运算带来了麻烦,例如下列句子:

当instructor关系有些元组在salary属性的值为空,则在查询待求和的值中就包含了空值。SQL标准并不认为总和本身为null,而是认为sum运算符应 忽略 输入中的null值(因为算术表达式如果有null,那么结果为null)。

所以,聚集函数根据以下原则处理空值:
除了count(*)外,所有的聚集函数都忽略输入集合中的空值。由于空值被忽略,可能会造成参加聚集函数的输入值集合为空集。规定空集的count运算值为0,其他所有聚集运算在输入为空集的情况下返回一个空值。

处理布尔值的聚集函数:some 和every。
从字面意义上就可以知道,some是只要满足其中任意一个条件即可,而every则是所有条件都要满足,比如说1=some(集合A),若A={1,2,3},则为真,若A={0,2,3}则为假,又如1>some(集合A),结果分别为假、真。
例如:

⑩ SQL有哪些函数

1.绝对值
SQL:select abs(-1) value
O:select abs(-1) value from al
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from al
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from al
4.取整(截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from al
5.四舍五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from al 1.2346
6.e为底的幂
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from al 2.71828182
7.取e为底的对数
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from al; 1
8.取10为底对数
S:select log10(10) value 1
O:select log(10,10) value from al; 1
9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from al 16
10.取平方根
S:select SQRT(4) value 2
O:select SQRT(4) value from al 2
11.求任意数为底的幂
S:select power(3,4) value 81
O:select power(3,4) value from al 81
12.取随机数
S:select rand() value
O:select sys.dbms_random.value(0,1) value from al;
13.取符号
S:select sign(-8) value -1
O:select sign(-8) value from al -1
----------数学函数
14.圆周率
S:SELECT PI() value 3.1415926535897931
O:不知道
15.sin,cos,tan 参数都以弧度为单位
例如:select sin(PI()/2) value 得到1(SQLServer)
16.Asin,Acos,Atan,Atan2 返回弧度
17.弧度角度互换(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------数值间比较
18. 求集合最大值
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select greatest(1,-2,4,3) value from al
19. 求集合最小值
S:select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select least(1,-2,4,3) value from al
20.如何处理null值(F2中的null以10代替)
S:select F1,IsNull(F2,10) value from Tbl
O:select F1,nvl(F2,10) value from Tbl
--------数值间比较
21.求字符序号
S:select ascii('a') value
O:select ascii('a') value from al
22.从序号求字符
S:select char(97) value
O:select chr(97) value from al
23.连接
S:select '11'+'22'+'33' value
O:select CONCAT('11','22')||33 value from al
23.子串位置 --返回3
S:select CHARINDEX('s','sdsq',2) value
O:select INSTR('sdsq','s',2) value from al
23.模糊子串的位置 --返回2,参数去掉中间%则返回7
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发现,但是instr可以通过第四霾问 刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from al 返回6
24.求子串
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from al
25.子串代替 返回aijklmnef
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from al
26.子串全部替换
S:没发现
O:select Translate('fasdbfasegas','fa','我' ) value from al
27.长度
S:len,datalength
O:length
28.大小写转换 lower,upper
29.单词首字母大写
S:没发现
O:select INITCAP('abcd dsaf df') value from al
30.左补空格(LPAD的第一个参数为空格则同space函数)
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from al
31.右补空格(RPAD的第一个参数为空格则同space函数)
S:select 'abcd'+space(10) value
O:select RPAD('abcd',14) value from al
32.删除空格
S:ltrim,rtrim
O:ltrim,rtrim,trim
33. 重复字符串
S:select REPLICATE('abcd',2) value
O:没发现
34.发音相似性比较(这两个单词返回值一样,发音相同)
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from al
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差
返回0-4,4为同音,1最高
--------------日期函数
35.系统时间
S:select getdate() value
O:select sysdate value from al
36.前后几日
直接与整数相加减
37.求日期
S:select convert(char(10),getdate(),20) value
O:select trunc(sysdate) value from al
select to_char(sysdate,'yyyy-mm-dd') value from al
38.求时间
S:select convert(char(8),getdate(),108) value
O:select to_char(sysdate,'hh24:mm:ss') value from al
39.取日期时间的其他部分
S:DATEPART 和 DATENAME 函数 (第一个参数决定)
O:to_char函数 第二个参数决定
参数---------------------------------下表需要补充
year yy, yyyy
quarter qq, q (季度)
month mm, m (m O无效)
dayofyear dy, y (O表星期)
day dd, d (d O无效)
week wk, ww (wk O无效)
weekday dw (O不清楚)
Hour hh,hh12,hh24 (hh12,hh24 S无效)
minute mi, n (n O无效)
second ss, s (s O无效)
millisecond ms (O无效)
----------------------------------------------
40.当月最后一天
S:不知道
O:select LAST_DAY(sysdate) value from al
41.本星期的某一天(比如星期日)
S:不知道
O:SELECT Next_day(sysdate,7) vaule FROM DUAL;
42.字符串转时间
S:可以直接转或者select cast('2004-09-08'as datetime) value
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;
43.求两日期某一部分的差(比如秒)
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用两个日期相减(比如d1-d2=12.3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
44.根据差值求新的日期(比如分钟)
S:select dateadd(mi,8,getdate()) value
O:SELECT sysdate+8/60/24 vaule FROM DUAL;
45.求不同时区时间
S:不知道
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;
-----时区参数,北京在东8区应该是Ydt-------
AST ADT 大西洋标准时间
BST BDT 白令海标准时间
CST CDT 中部标准时间
EST EDT 东部标准时间
GMT 格林尼治标准时间
HST HDT 阿拉斯加—夏威夷标准时间
MST MDT 山区标准时间
NST 纽芬兰标准时间
PST PDT 太平洋标准时间
YST YDT YUKON标准时间
Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:
函数 Oracle Microsoft SQL Server
把字符转换为ASCII ASCII ASCII
字串连接 CONCAT (expression + expression)
把ASCII转换为字符 CHR CHAR
返回字符串中的开始字符(左起) INSTR CHARINDEX
把字符转换为小写 LOWER LOWER
把字符转换为大写 UPPER UPPER
填充字符串的左边 LPAD N/A
清除开始的空白 LTRIM LTRIM
清除尾部的空白 RTRIM RTRIM
字符串中的起始模式(pattern) INSTR PATINDEX
多次重复字符串 RPAD REPLICATE
字符串的语音表示 SOUNDEX SOUNDEX
重复空格的字串 RPAD SPACE
从数字数据转换为字符数据 TO_CHAR STR
子串 SUBSTR SUBSTRING
替换字符 REPLACE STUFF
将字串中的每个词首字母大写 INITCAP N/A
翻译字符串 TRANSLATE N/A
字符串长度 LENGTH DATELENGTH or LEN
列表中最大的字符串 GREATEST N/A
列表中最小的字符串 LEAST N/A
如果为NULL则转换字串 NVL ISNULL
日期函数
函数 Oracle Microsoft SQL Server
日期相加 (date column +/- value) or
ADD_MONTHS DATEADD
两个日期的差 (date column +/- value) or
MONTHS_BETWEEN DATEDIFF
当前日期和时间 SYSDATE GETDATE()
一个月的最后一天 LAST_DAY N/A
时区转换 NEW_TIME N/A
日期后的第一个周日 NEXT_DAY N/A
代表日期的字符串 TO_CHAR DATENAME
代表日期的整数 TO_NUMBER
(TO_CHAR)) DATEPART
日期舍入 ROUND CONVERT
日期截断 TRUNC CONVERT
字符串转换为日期 TO_DATE CONVERT
如果为NULL则转换日期 NVL ISNULL
转换函数
函数 Oracle Microsoft SQL Server
数字转换为字符 TO_CHAR CONVERT
字符转换为数字 TO_NUMBER CONVERT
日期转换为字符 TO_CHAR CONVERT
字符转换为日期 TO_DATE CONVERT
16进制转换为2进制 HEX_TO_RAW CONVERT
2进制转换为16进制 RAW_TO_HEX CONVERT
其它行级别的函数
函数 Oracle Microsoft SQL Server
返回第一个非空表达式 DECODE COALESCE
当前序列值 CURRVAL N/A
下一个序列值 NEXTVAL N/A
如果exp1 = exp2, 返回null DECODE NULLIF
用户登录账号ID数字 UID SUSER_ID
用户登录名 USER SUSER_NAME
用户数据库ID数字 UID USER_ID
用户数据库名 USER USER_NAME
当前用户 CURRENT_USER CURRENT_USER
用户环境(audit trail) USERENV N/A
在CONNECT BY子句中的级别 LEVEL N/A
合计函数
函数 Oracle Microsoft SQL Server
Average AVG AVG
Count COUNT COUNT
Maximum MAX MAX
Minimum MIN MIN
Standard deviation STDDEV STDEV or STDEVP
Summation SUM SUM
Variance VARIANCE VAR or VARP
Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:
EXTRACT(YEAR FROM 日期)