1. 首页
  2. 综合百科
  3. sql是什么意思(什么是SQL函数)

sql是什么意思(什么是SQL函数)

简介:关于sql是什么意思(什么是SQL函数)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

函数在计算机语言中被广泛使用。在SQL中,我们还可以使用函数对检索到的数据进行函数运算,比如求一列数据的平均值,或者求一个字符串的长度。从函数定义的角度,我们可以把函数分为内置函数和用户自定义函数。在SQL语言中,还包括内置函数和自定义函数。内置函数是系统内置的通用函数,自定义函数是根据我们自己的需求编写的。下面是SQL的内置函数。

你需要从以下几个方面来掌握SQL函数:

什么是SQL函数?内置的SQL函数有哪些?如何使用SQL函数操作一个数据表,比如王者荣耀中的一个英雄数据库,我们可以用这些函数做什么操作?

4.你在什么情况下使用SQL函数?为什么SQL函数有时候会出问题?

一、什么是SQL函数

我们在学习编程语言的时候,也会遇到函数。功能是什么?它可以封装我们经常使用的代码,需要的时候直接调用。这不仅提高了代码效率,也提高了可维护性。

SQL中的函数一般是对数据执行的,这些数据很容易转换和处理。一般来说,我们从数据表中检索到数据后,可以进一步操作这些数据,得到更有意义的结果,比如返回一个指定条件的函数,或者求一个字段的平均值。

二、常用的SQL函数有哪些

SQL提供了一些常用的内置函数。当然,你也可以定义自己的SQL函数。SQL的内置函数对于不同的数据库软件是通用的,我们可以把内置函数分为四类:

算术函数、字符串函数和日期函数转换函数分别代表算术处理、字符串处理、日期处理和数据类型转换。它们常用于SQL函数的划分。你可以想想为什么要用这四个维度。

函数是对提取的数据进行操作,那么数据表中字段类型的定义是什么?

我们经常会保存一些数值,不管是整型还是浮点型,其实都是对应数值型的。同样,我们也会保存一些文本内容,可能是人名,也可能是描述,对应字符串类型。另外,我们还需要保存时间,也就是日期类型。那么对于数值型、字符串型、日期型的数据,我们可以分别用算术函数、字符串函数、日期函数进行操作。如果要完成不同类型数据之间的转换,可以使用转换函数。

三、算术函数

算术函数,顾名思义,就是对对数值类型的字段进行算术运算。常用的算术函数及其含义如下表所示:

这里我举几个简单的例子,你可以体会一下:

SELECTABS(-2),运行结果为2。SELECTMOD(101,3),运行结果2。SELECTROUND(37.25,1),运行结果为37.3。

四、字符串函数

常用的字符串函数操作包括字符串拼接、大小写转换、长度查找、字符串替换和截取。具体的函数名称和含义如下表所示:

这里还有一些简单的例子,你可以自己运行:

SELECTCONCAT('abc '123),运行结果为abc123。SELECTLENGTH ('Hello '),运行结果为6。SELECTCHAR_LENGTH ('Hello '),运行结果为2。选择LOWER('abc '),运行结果为abc。选择UPPER('abc '),运行结果abc。选择replace ('f ABCD '' ABC '123),运行结果为f123d。SELECTSUBSTRING('fabcd '1,3),运行结果为fab。

五、日期函数

日期函数用于处理数据表中的日期。常用的功能包括:

下面是一些你可以自己运行的简单例子:

SELECTCURRENT_DATE()运行结果为2019-04-03。SELECTCURRENT_TIME(),运行结果为21:26:34。SELECTCURRENT_TIMESTAMP(),运行结果为2019-04-0321:26336034。选择提取(年份从' 2019-04-03 '),运行结果为2019。选择日期(' 2019-04-0112:00336005 '),运行结果为2019-04-01。这里需要注意的是,日期格式必须是yyyy-mm-dd的形式。如果要比较日期,应该使用date函数,而不是直接用字符串比较日期。具体原因我会在下面的例子里说。

六、转换函数

转换函数可以进行数据之间的类型转换,常用的函数如下表所示:

与其他函数不同,这两个函数一看就知道它们代表什么以及如何使用它们。下面是这些函数的两个例子,你需要自己运行它们:

SELECTCAST(123.123ASINT),运行结果报错。选择cast (123.123为小数(8,2)),运行结果为123.12。SELECTCOALESCE(null,1,2),运行结果为1。当CAST函数转换数据类型时,它将不是四个

舍五入,如果原数值有小数,那么转换为整数类型的时候就会报错。不过你可以指定转化的小数类型,在MySQL和SQLServer中,你可以用DECIMAL(a,b)来指定,其中a代表整数部分和小数部分加起来最大的位数,b代表小数位数,比如DECIMAL(8,2)代表的是精度为8位(整数加小数位数最多为8位),小数位数为2位的数据类型。所以SELECTCAST(123.123ASDECIMAL(8,2))的转换结果为123.12。

七、用SQL函数对王者荣耀英雄数据做处理

我创建了一个王者荣耀英雄数据库,一共有69个英雄,23个属性值。

我们现在把这个文件导入到MySQL中,你可以使用Navicat可视化数据库管理工具将.sql文件导入到数据库中。数据表为heros,然后使用今天学习的SQL函数,对这个英雄数据表进行处理。

首先显示英雄以及他的物攻成长,对应字段为attack_growth。我们让这个字段精确到小数点后一位,需要使用的是算术函数里的ROUND函数。

SQL:SELECTname,ROUND(attack_growth,1)FROMheros

代码中,ROUND(attack_growth,1)中的attack_growth代表想要处理的数据,“1”代表四舍五入的位数,也就是我们这里需要精确到的位数。

运行结果为:

假设我们想显示英雄最大生命值的最大值,就需要用到MAX函数。在数据中,“最大生命值”对应的列数为hp_max,在代码中的格式为MAX(hp_max)。

SQL:SELECTMAX(hp_max)FROMheros

运行结果为9328。

假如我们想要知道最大生命值最大的是哪个英雄,以及对应的数值,就需要分成两个步骤来处理:首先找到英雄的最大生命值的最大值,即SELECTMAX(hp_max)FROMheros,然后再筛选最大生命值等于这个最大值的英雄,如下所示。

SQL:SELECTname,hp_maxFROMherosWHEREhp_max=(SELECTMAX(hp_max)FROMheros)

运行结果:

假如我们想显示英雄的名字,以及他们的名字字数,需要用到CHAR_LENGTH函数。

SQL:SELECTCHAR_LENGTH(name),nameFROMheros

运行结果为:

假如想要提取英雄上线日期(对应字段birthdate)的年份,只显示有上线日期的英雄即可(有些英雄没有上线日期的数据,不需要显示),这里我们需要使用EXTRACT函数,提取某一个时间元素。所以我们需要筛选上线日期不为空的英雄,即WHEREbirthdateisnotnull,然后再显示他们的名字和上线日期的年份,即:

SQL:SELECTname,EXTRACT(YEARFROMbirthdate)ASbirthdateFROMherosWHEREbirthdate

或者使用如下形式:

SQL:SELECTname,YEAR(birthdate)ASbirthdateFROMherosWHEREbirthdateisNOTNULL

运行结果为:

假设我们需要找出在2016年10月1日之后上线的所有英雄。这里我们可以采用DATE函数来判断birthdate的日期是否大于2016-10-01,即WHEREDATE(birthdate)>'2016-10-01',然后再显示符合要求的全部字段信息,即:

SQL:SELECT*FROMherosWHEREDATE(birthdate)>'2016-10-01'

需要注意的是下面这种写法是不安全的:

SELECT*FROMherosWHEREbirthdate>'2016-10-01'

因为很多时候你无法确认birthdate的数据类型是字符串,还是datetime类型,如果你想对日期部分进行比较,那么使用DATE(birthdate)来进行比较是更安全的。

运行结果为:

假设我们需要知道在2016年10月1日之后上线英雄的平均最大生命值、平均最大法力和最高物攻最大值。同样我们需要先筛选日期条件,即WHEREDATE(birthdate)>'2016-10-01',然后再选择AVG(hp_max),AVG(mp_max),MAX(attack_max)字段进行显示。

SQL:SELECTAVG(hp_max),AVG(mp_max),MAX(attack_max)FROMherosWHEREDATE(birthdate)>

运行结果为:

八、为什么使用SQL函数会带来问题

尽管SQL函数使用起来会很方便,但我们使用的时候还是要谨慎,因为你使用的函数很可能在运行环境中无法工作,这是为什么呢?

如果你学习过编程语言,就会知道语言是有不同版本的。我们在使用SQL语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被DBMS同时支持的。比如,大多数DBMS使用(||)或者(+)来做拼接符,而在MySQL中的字符串拼接函数为Concat()。大部分DBMS会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。

九、关于大小写的规范

细心的人可能会发现,我在写SELECT语句的时候用的是大写,而你在网上很多地方,包括你自己写的时候可能用的是小写。实际上在SQL中,关键字和函数名是不用区分字母大小写的,比如SELECT、WHERE、ORDER、GROUPBY等关键字,以及ABS、MOD、ROUND、MAX等函数名。

不过在SQL中,你还是要确定大小写的规范,因为在Linux和Windows环境下,你可能会遇到不同的大小写问题。

比如MySQL在Linux的环境下,数据库名、表名、变量名是严格区分大小写的,而字段名是忽略大小写的。

而MySQL在Windows的环境下全部不区分大小写。

这就意味着如果你的变量名命名规范没有统一,就可能产生错误。这里有一个有关命名规范的建议:

关键字和函数名称全部大写;数据库名、表名、字段名称全部小写;SQL语句必须以分号结尾。

虽然关键字和函数名称在SQL中不区分大小写,也就是如果小写的话同样可以执行,但是数据库名、表名和字段名在LinuxMySQL环境下是区分大小写的,因此建议你统一这些字段的命名规则,比如全部采用小写的方式。同时将关键词和函数名称全部大写,以便于区分数据库名、表名、字段名。

十、总结

函数对于一门语言的重要性毋庸置疑,我们在写Java代码的时候,会自己编写函数,也会使用Java内置的函数。在SQL中,使用函数的时候需要格外留意。不过如果工程量不大,使用的是同一个DBMS的话,还是可以使用函数简化操作的,这样也能提高代码效率。只是在系统集成,或者在多个DBMS同时存在的情况下,使用函数的时候就需要慎重一些。

比如CONCAT()是字符串拼接函数,在MySQL和Oracle中都有这个函数,但是在这两个DBMS中作用却不一样,CONCAT函数在MySQL中可以连接多个字符串,而在Oracle中CONCAT函数只能连接两个字符串,如果要连接多个字符串就需要用(||)连字符来解决。

讲完了SQL函数的使用,我们来做一道练习题。还是根据王者荣耀英雄数据表,请你使用SQL函数作如下的练习:计算英雄的最大生命平均值;显示出所有在2017年之前上线的英雄,如果英雄没有统计上线日期则不显示。

推荐阅读

盘点:2020年最新、最全、最实用的Java岗面试真题,已收录GitHub

绝对干货,掌握这27个知识点,轻松拿下80%的技术面试(Java岗)

一线大厂为什么面试必问分布式?

在一次又一次的失败中,我总结了这份万字的《MySQL性能调优笔记》

并发编程详解:十三个工具类,十大设计模式,从理论基础到案例实战

如何高效部署分布式消息队列?这份《RabbitMQ实战》绝对可以帮到你

本文主要介绍了关于sql是什么意思(什么是SQL函数)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/82902.html