SQL语句基础学习函数是怎样的
既然数据库中有许多资料都是已数字的型态存在,一个很重要的用途就是要能够对这些数字做一些运算,例如将它们总合起来,或是找出它们的平均值。
SQL 有提供一些这一类的函数。它们是: AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合) 运用函数的语法是: SELECT “函数名”(”栏位名”) FROM “表格名” 举例来说,若我们要由我们的示范表格中求出 Sales 栏位的总合 Store_Information 表格 store_namesalesdate Los Angeles$1500jan051999 San Francisco$300jan081999 Boston$700jan081999 我们就打入 SELECT SUM(Sales) FROM Store_Information 结果: SUM(Sales) $2750 $2750 代表所有 Sales 栏位的总合: $1500 + $250 + $300 + $700。
除了函数的运用外,SQL 也可以做简单的数学运算,例如加(+)和减()。对于文字类的资料,SQL 也有好几个文字处理方面的函数,例如文字相连 (concatenation),文字修整 (trim),以及子字串 (substring)。
不同的数据库对这些函数有不同的语法,所以最好是参考您所用数据库的信息,来确定在那个数据库中,这些函数是如何被运用的。
SQL语句的几个常用函数
1、sql中sum和count的区别 sql聚合函数 (1)首先,sum是对一个字段求和,hive中字段的类型一般是string或者是int,如果是int当然没有问题,如果是string类型但是全部是数字也没有问题,但是如果string类型中包含一个字母,sum的结果将会是0 例如如下的表:user_id string shop_id string1234 hello1234 1234 那么sum(user_id)的结果就是2468,sum(shop_id)的结果就是0.如果没有符合的条件的记录,sum的返回值就是Null,如:sum(case when user_id但是有些时候我们希望sum的结果如果没有符合的记录就返回0,可以用coalesce(shop_id, 0)解决这个问题。
(2)count是对数据记录的条数进行统计,有一条符合的记录就是1,没有就是0.2、 case when then end用法示例: sql流程控制函数 case value when comparevalue then result when comparevalue then result …… else result end 例如:select case when 1>0 then ‘yes’ else ‘no’ end;++ | case when 1>0 then ‘yes’ else ‘no’ end |++ | yes |++3、row_number( ) over用法: sql分析函数 row_number() OVER ( PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 4、if()函数 sql流程控制函数 (1) if(expr1, expr2, expr3) 如果expr1返回真, 则该表达式返回expr2,否则返回expr3 e.g. mysql> select if(strcmp(‘test’,’test’),’no’,’yes’);++ | if(strcmp(‘test’,’test1′),’no’,’yes’) |++ | yes |++ 说明:strcmp(expr1, expr2)这个函数在expr1小于expr2时,返回1,相等时返回0,其余情况返回1.在上面的例子中,strcmp返回1,所以上例输出返回yes (2) ifnull(expr1, expr2) 该函数在expr1为NULL时,返回expr2,否则,返回expr1. (3) nullif(expr1, expr2) 如果expr1=expr2,则返回NULL,否则,返回expr15、max()函数 和min()函数 sql聚合函数 语法:MIN(e1)、MAX(e1) 参数:e1为一个字符型、日期型或数值类型的表达式。若e1为字符型,则根据ASCII码来判断最大值与最小值。
返回:根据e1参数的类型,返回对应类型的数据。作用:MIN(e1)返回e1表达式指定的列中最小值;MAX(e1)返回e1表达式指定的列中最大值;说明:max函数可以使用于numeric、char、varchar、money、smallmoney、或datetime列,但不能用于bit列。
不允许使用聚合函数和子查询。e.g.查询TEACHER表中教师的最大年龄。
实例代码:SELECT MAX (AGE) AS MAXAGE FROM TEACHER 运行结果如下图所示:图1TEACHER表中教师的最大年龄 然而,在实际应用中得到这个结果并不是特别有用,因为经常想要获得的信息是具有最大年龄的教师的教工号、姓名、性别等信息。然而SQL不支持如下的SELECT语句: SELECT TNAME, DNAME, TSEX, MAX (AGE) FROM TEACHER 因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成一组,而TNAME、DNAME和TSEX的数据都没有进行任何分组,因此SELECT语句没有逻辑意义。
同样的道理,下面的代码也是无效的:SELECT TNAME, DNAME, TSEX,SAL ,AGE FROM TEACHER WHERE AGE=MAX (AGE) 解决这个问题的方法,就是在WHERE子句中使用子查询来返回最大值,然后再基于这个返回的最大值,查询相关信息。下例在WHERE子句中使用子查询返回最大值:查询TEACHER表中年纪最大的教师的教工号、姓名、性别等信息。
实例代码:SELECT TNAME, DNAME, TSEX, SAL, AGE FROM TEACHER WHERE AGE=(SELECT MAX (AGE) FROM TEACHER) 运行结果如下图所示:。
请告诉我sql语言的函数
常用TSQL语言命令函数集(1)数据记录筛选: sql=”select*from数据表where字段名=字段值orderby字段名[desc]” sql=”select*from数据表where字段名like’%字段值%’orderby字段名[desc]” sql=”selecttop10*from数据表where字段名orderby字段名[desc]” sql=”select*from数据表where字段名in(’值1’,’值2’,’值3’)” sql=”select*from数据表where字段名between值1and值2″ (2)更新数据记录: sql=”update数据表set字段名=字段值where条件表达式” sql=”update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式” (3)删除数据记录: sql=”deletefrom数据表where条件表达式” sql=”deletefrom数据表”(将数据表所有记录删除) (4)添加数据记录: sql=”insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)” sql=”insertinto目标数据表select*from源数据表”(把源数据表的记录添加到目标数据表) (5)数据记录统计函数: AVG(字段名)得出一个表格栏平均值 COUNT(*|字段名)对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名)取得一个表格栏最大的值 MIN(字段名)取得一个表格栏最小的值 SUM(字段名)把数据栏的值相加 引用以上函数的方法: sql=”selectsum(字段名)as别名from数据表where条件表达式” setrs=*(sql) 用rs(”别名”)获取统的计值,其它函数运用同上。
(5)数据表的建立和删除: CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……) 例:CREATETABLEtab01 (namevarchar (50), datetimedefaultnow ()) DROPTABLE数据表名称(永久性删除一个数据表) ======================================================================================= ======================================================================================= 添加、删除、修改使用*e(Sql)命令执行操作 ╔╗ ☆ 数据记录筛选 ☆ ╚╝ 注意:单双引号的用法可能有误(没有测式) Sql = “Select Distinct 字段名 From 数据表” Distinct函数,查询数据库存表内不重复的记录 Sql = “Select Count(*) From 数据表 where 字段名1>#18:0:0# and 字段名1< #19:00# " count函数,查询数库表内有多少条记录,“字段名1”是指同一字段 例: set rs=*e("select count(id) as idnum from news") * rs("idnum") sql="select * from 数据表 where 字段名 between 值1 and 值2" Sql="select * from 数据表 where 字段名 between #2003810# and #2003812#" 在日期类数值为2003810 19:55:08 的字段里查找2003810至2003812的所有记录,而不管是几点几分。 select * from tb_name where datetime between #2003810# and #2003812# 字段里面的数据格式为:2003810 19:55:08,通过sql查出2003810至2003812的所有纪录,而不管是几点几分。
Sql=”select * from 数据表 where 字段名=字段值 order by 字段名 [desc]” Sql=”select * from 数据表 where 字段名 like ‘%字段值%’ order by 字段名 [desc]” 模糊查询 Sql=”select top 10 * from 数据表 where 字段名 order by 字段名 [desc]” 查找数据库中前10记录 Sql=”select top n * form 数据表 order by newid()” 随机取出数据库中的若干条记录的方法 top n,n就是要取出的记录数 Sql=”select * from 数据表 where 字段名 in (’值1’,’值2’,’值3’)” ╔╗ ☆ 添加数据记录 ☆ ╚╝ sql=”insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)” sql=”insert into 数据表 valuess (值1,值2,值3 …)” 不指定具体字段名表示将按照数据表中字段的顺序,依次添加 sql=”insert into 目标数据表 select * from 源数据表” 把源数据表的记录添加到目标数据表 ╔╗ ☆ 更新数据记录 ☆ ╚╝ Sql=”update 数据表 set 字段名=字段值 where 条件表达式” Sql=”update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式” Sql=”update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n ” 没有条件则更新整个数据表中的指定字段值 ╔╗ ☆ 删除数据记录 ☆ ╚╝ Sql=”delete from 数据表 where 条件表达式” Sql=”delete from 数据表” 没有条件将删除数据表中所有记录) ╔╗ ☆ 数据记录统计函数 ☆ ╚╝ AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql=”select sum(字段名) as 别名 from 数据表 where 条件表达式” set rs=*(sql) 用 rs(”别名”) 获取统的计值,其它函数运用同上。 ╔╗ ☆ 数据表的建立和删除 ☆ ╚╝ CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度)。
如何在SQL语句中使用FUNCTION
1、function是SQL的函数
是由一个或多个 TransactSQL 语句组成的子程序,可用于封装代码以便重新使用。Microsoft® SQL Server™ 并不将用户限制在定义为 TransactSQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。
可使用 CREATE FUNCTION 语句创建、使用 ALTER FUNCTION 语句修改、以及使用 DROP FUNCTION 语句除去用户定义函数。每个完全合法的用户定义函数名 (database_*_*on_name) 必须唯一。
必须被授予 CREATE FUNCTION 权限才能创建、修改或除去用户定义函数。不是所有者的用户在 TransactSQL 语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK 约束、DEFAULT 子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES 权限。
在函数中,区别处理导致删除语句并且继续在诸如触发器或存储过程等模式中的下一语句的 TransactSQL 错误。在函数中,上述错误会导致停止执行函数。接下来该操作导致停止唤醒调用该函数的语句。
用户定义函数的类型
2、Procedure是SQL的存储过程
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。
存储过程是利用SQL Server所提供的TransactSQL语言所编写的程序。TransactSQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的PLSQL和 Informix的数据库系统结构中的Informix 4GL语言。这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序:
1)、变量说明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程控制命令(if…else…、while….)
4)、内部函数