sql数据库入门基础语句(数据库进阶技能-SQL常用函数)
sql数据库入门基础语句(数据库进阶技能-SQL常用函数)
2024-11-25 02:45:05  作者:春山纵  网址:https://m.xinb2b.cn/tech/xnu475060.html
一、SQL函数详解

sql自带了各种各样的函数,极大提高了sql语言的便利性。

所谓函数,类似一个黑盒子,你给它一个输入值,它便按照预设的程序定义给出返回值,输入值称为参数。

函数大致分为如下几类:

算术函数 (用来进行数值计算的函数)字符串函数 (用来进行字符串操作的函数)日期函数 (用来进行日期操作的函数)转换函数 (用来转换数据类型和值的函数)聚合函数 (用来进行数据聚合的函数)

函数总个数超过200个,不需要完全记住,常用函数有 30~50 ,其他不常用的函数使用时查阅文档即可

1.1 算数函数 - * /四则运算

为了演示其他的几个算数函数,在此构造samplemath表

-- DDL :创建表 USE shop; DROp TABLE IF EXISTS samplemath; CREATE TABLE samplemath (m float(10,3), n INT, p INT); -- DML :插入数据 START TRANSACTION; -- 开始事务 INSERT INTO samplemath(m, n, p) VALUES (500, 0, NULL); INSERT INTO samplemath(m, n, p) VALUES (-180, 0, NULL); INSERT INTO samplemath(m, n, p) VALUES (NULL, NULL, NULL); INSERT INTO samplemath(m, n, p) VALUES (NULL, 7, 3); INSERT INTO samplemath(m, n, p) VALUES (NULL, 5, 2); INSERT INTO samplemath(m, n, p) VALUES (NULL, 4, NULL); INSERT INTO samplemath(m, n, p) VALUES (8, NULL, 3); INSERT INTO samplemath(m, n, p) VALUES (2.27, 1, NULL); INSERT INTO samplemath(m, n, p) VALUES (5.555,2, NULL); INSERT INTO samplemath(m, n, p) VALUES (NULL, 1, NULL); INSERT INTO samplemath(m, n, p) VALUES (8.76, NULL, NULL); COMMIT; -- 提交事务 -- 查询表内容SELECT * FROM samplemath; ---------- ------ ------ | m | n | p | ---------- ------ ------ | 500.000 | 0 | NULL || -180.000 | 0 | NULL || NULL | NULL | NULL || NULL | 7 | 3 || NULL | 5 | 2 || NULL | 4 | NULL || 8.000 | NULL | 3 || 2.270 | 1 | NULL || 5.555 | 2 | NULL || NULL | 1 | NULL || 8.760 | NULL | NULL | ---------- ------ ------ 11 rows in set (0.00 sec)

ABS – 绝对值

语法:ABS( 数值 )

ABS 函数用于计算一个数字的绝对值,表示一个数到原点的距离。

当 ABS 函数的参数为NULL时,返回值也是NULL。

MOD – 求余数

语法:MOD( 被除数,除数 )

MOD 是计算除法余数(求余)的函数,是 modulo 的缩写。小数没有余数的概念,只能对整数列求余数。

注意:主流的 DBMS 都支持 MOD 函数,只有SQL Server 不支持该函数,其使用%符号来计算余数。

ROUND – 四舍五入

语法:ROUND( 对象数值,保留小数的位数 )

ROUND 函数用来进行四舍五入的操作。

注意:当参数 保留小数的位数 为变量时,可能会遇到错误,请谨慎使用变量。

SELECt m,ABS(m)ASabs_col ,n, p,MOD(n, p) AS mod_col,ROUND(m,1)ASround_colSFROM samplemath; ---------- --------- ------ ------ --------- ----------- | m | abs_col | n | p | mod_col | round_col | ---------- --------- ------ ------ --------- ----------- | 500.000 | 500.000 | 0 | NULL | NULL | 500.0 || -180.000 | 180.000 | 0 | NULL | NULL | -180.0 || NULL | NULL | NULL | NULL | NULL | NULL || NULL | NULL | 7 | 3 | 1 | NULL || NULL | NULL | 5 | 2 | 1 | NULL || NULL | NULL | 4 | NULL | NULL | NULL || 8.000 | 8.000 | NULL | 3 | NULL | 8.0 || 2.270 | 2.270 | 1 | NULL | NULL | 2.3 || 5.555 | 5.555 | 2 | NULL | NULL | 5.6 || NULL | NULL | 1 | NULL | NULL | NULL || 8.760 | 8.760 | NULL | NULL | NULL | 8.8 | ---------- --------- ------ ------ --------- ----------- 11 rows in set (0.08 sec)

1.2 字符串函数

字符串函数也经常被使用,为了学习字符串函数,在此我们构造samplestr表。

-- DDL :创建表USE shop;DROp TABLE IF EXISTS samplestr;CREATE TABLE samplestr(str1 VARCHAr (40),str2 VARCHAr (40),str3 VARCHAr (40));-- DML:插入数据START TRANSACTION;INSERT INTO samplestr (str1, str2, str3) VALUES ('opx','rt', NULL);INSERT INTO samplestr (str1, str2, str3) VALUES ('abc', 'def', NULL);INSERT INTO samplestr (str1, str2, str3) VALUES ('太阳','月亮', '火星');INSERT INTO samplestr (str1, str2, str3) VALUES ('aaa',NULL, NULL);INSERT INTO samplestr (str1, str2, str3) VALUES (NULL, 'xyz', NULL);INSERT INTO samplestr (str1, str2, str3) VALUES ('@!#$%', NULL, NULL);INSERT INTO samplestr (str1, str2, str3) VALUES ('ABC', NULL, NULL);INSERT INTO samplestr (str1, str2, str3) VALUES ('aBC', NULL, NULL);INSERT INTO samplestr (str1, str2, str3) VALUES ('abc哈哈', 'abc', 'ABC');INSERT INTO samplestr (str1, str2, str3) VALUES ('abcdefabc', 'abc', 'ABC');INSERT INTO samplestr (str1, str2, str3) VALUES ('micmic', 'i', 'I');COMMIT;-- 确认表中的内容SELECT * FROM samplestr; ----------- ------ ------ | str1 | str2 | str3 | ----------- ------ ------ | opx | rt | NULL || abc | def | NULL || 太阳 | 月亮 | 火星 || aaa | NULL | NULL || NULL | xyz | NULL || @!#$% | NULL | NULL || ABC | NULL | NULL || aBC | NULL | NULL || abc哈哈 | abc | ABC || abcdefabc | abc | ABC || micmic | i | I | ----------- ------ ------ 11 rows in set (0.00 sec)

CONCAT – 拼接

语法:CONCAt(str1, str2, str3)

MySQL中使用 CONCAT 函数进行拼接。

LENGTH – 字符串长度

语法:LENGTH( 字符串 )

LOWER – 小写转换

LOWER 函数只能针对英文字母使用,它会将参数中的字符串全都转换为小写。该函数不适用于英文字母以外的场合,不影响原本就是小写的字符。

类似的, UPPER 函数用于大写转换。

REPLACe – 字符串的替换

语法:REPLACE( 对象字符串,替换前的字符串,替换后的字符串 )

SUBSTRING – 字符串的截取

语法:SUBSTRING (对象字符串 FROM 截取的起始位置 FOR 截取的字符数)

使用 SUBSTRING 函数 可以截取出字符串中的一部分字符串。截取的起始位置从字符串最左侧开始计算,索引值起始为1。


图1

​编辑

(扩展内容)SUBSTRING_INDEX – 字符串按索引截取

语法:SUBSTRING_INDEX (原始字符串, 分隔符,n)

该函数用来获取原始字符串按照分隔符分割后,第一个 n 个分隔符之前(或之后)的子字符串,支持正向和反向索引,索引起始值分别为 1 和 -1。

SELECt SUBSTRING_INDEX('www.mysql.com', '.', 2); ------------------------------------------ | SUBSTRING_INDEX('www.mysql.com', '.', 2) | ------------------------------------------ | www.mysql | ------------------------------------------ 1 row in set (0.00 sec)SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); ------------------------------------------- | SUBSTRING_INDEX('www.mysql.com', '.', -2) | ------------------------------------------- | mysql.com | ------------------------------------------- 1 row in set (0.00 sec)

获取第1个元素比较容易,获取第2个元素/第n个元素可以采用二次拆分的方法。

SELECT SUBSTRING_INDEX('www.mysql.com', '.', 1); ------------------------------------------ | SUBSTRING_INDEX('www.mysql.com', '.', 1) | ------------------------------------------ | www | ------------------------------------------ 1 row in set (0.00 sec)SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.mysql.com', '.', 2), '.', -1); -------------------------------------------------------------------- | SUBSTRING_INDEX(SUBSTRING_INDEX('www.mysql.com', '.', 2), '.', -1) | -------------------------------------------------------------------- | mysql | -------------------------------------------------------------------- 1 row in set (0.00 sec)

1.3 日期函数

不同DBMS的日期函数语法各有不同,本课程介绍一些被标准 SQL 承认的可以应用于绝大多数 DBMS 的函数。特定DBMS的日期函数查阅文档即可。

CURRENT_DATE – 获取当前日期

SELECT CURRENT_DATE; -------------- | CURRENT_DATE | -------------- | 2020-08-08 | -------------- 1 row in set (0.00 sec)

CURRENT_TIME – 当前时间

SELECT CURRENT_TIMESTAMP; --------------------- | CURRENT_TIMESTAMP | --------------------- | 2020-08-08 17:27:07 | --------------------- 1 row in set (0.00 sec)

EXTRACT – 截取日期元素

语法:EXTRACT(日期元素 FROM 日期)

使用 EXTRACT 函数可以截取出日期数据中的一部分,例如“年”

“月”,或者“小时”“秒”等。该函数的返回值并不是日期类型而是数值类型。

SELECt CURRENT_TIMESTAMP as now,EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS MINute,EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second; --------------------- ------ ------- ------ ------ -------- -------- | now | year | month | day | hour | MINute | second | --------------------- ------ ------- ------ ------ -------- -------- | 2020-08-08 17:34:38 | 2020 | 8 | 8 | 17 | 34 | 38 | --------------------- ------ ------- ------ ------ -------- -------- 1 row in set (0.00 sec)

1.4 转换函数

“转换”这个词的含义非常广泛,在 SQL 中主要有两层意思:一是数据类型的转换,简称为类型转换,在英语中称为cast;另一层意思是值的转换。

CAST – 类型转换

语法:CAST(转换前的值 AS 想要转换的数据类型)

-- 将字符串类型转换为数值类型SELECT CAST('0001' AS SIGNED INTEGER) AS int_col; --------- | int_col | --------- | 1 | --------- 1 row in set (0.00 sec)-- 将字符串类型转换为日期类型SELECT CAST('2009-12-14' AS DATE) AS date_col; ------------ | date_col | ------------ | 2009-12-14 | ------------ 1 row in set (0.00 sec)

COALESCE – 将NULL转换为其他值

语法:COALESCE(数据1,数据2,数据3……)

COALESCE 是 SQL 特有的函数。该函数会返回可变参数 A 中左侧开始第 1个不是NULL的值。参数个数是可变的,因此可以根据需要无限增加。

在 SQL 语句中将 NULL 转换为其他值时就会用到转换函数。

SELECT COALESCE(NULL, 11) AS col_1,COALESCE(NULL, 'hello world', NULL) AS col_2,COALESCE(NULL, NULL, '2020-11-01') AS col_3; ------- ------------- ------------ | col_1 | col_2 | col_3 | ------- ------------- ------------ | 11 | hello world | 2020-11-01 | ------- ------------- ------------ 1 row in set (0.00 sec)

  • 韭菜炒鸡蛋的最佳做法(别再用韭菜炒鸡蛋了)
  • 2024-11-25别再用韭菜炒鸡蛋了鸡蛋是个好东西,似乎太多的食材都可以跟鸡蛋一起炒,诸如蒜黄、荀瓜、荠菜、菠菜,当然,韭菜鸡蛋是大家公认的最好吃的搭配但是,如果你吃过今天这道菜,或许你要改变一下韭菜鸡蛋在你心中的排位了买回金针菇往后,。
  • 影驰2666rgb内存条(美光GDDR6显存的锅部分用户报告RTX)
  • 2024-11-25美光GDDR6显存的锅部分用户报告RTX随着RTX20系显卡的登场,游戏最强GPU的封号自然落到了RTX2080Ti的身上不过,这款显卡的上市有些一波三折,原定和2080同步在9月20日,随后延期到27日,接着二度跳票到10月中旬当前,RT。
  • 新鲜薄荷叶泡水的禁忌(新鲜薄荷叶泡水禁忌有哪些)
  • 2024-11-25新鲜薄荷叶泡水禁忌有哪些阴虚体质慎用薄荷叶泡水喝,对于阴虚体质的朋友来说,最好不要用薄荷叶泡水喝因为薄荷叶的主要功效是疏散风热、清凉解热,属于性寒的一类食品,阴虚体质的人身体本来寒气过重,如果这时还经常饮用薄荷叶茶水,很可能。
  • 关于得过且过的成语故事(矫枉过正的典故)
  • 2024-11-25矫枉过正的典故“矫枉过正:把弯的东西扳正,又歪到了另一边多比喻纠正错误超过了应有的限度”01、出处西汉·董仲舒《春秋繁露·一·玉杯》:“《春秋》为人不知恶,而恬行不备也,是故垂累责之,以矫枉世而直之矫者不过其正,弗。
  • 饭后肚子疼拉肚子是肠易激吗(肚子疼拉肚子便秘肠易激怎么办)
  • 2024-11-25肚子疼拉肚子便秘肠易激怎么办你最近也工作时间时间突然肚子痛,走进洗手间之后,不是拉肚子就是什么也拉不出来吗?这种病上医院检查也不找不到原因,但是这种状况又令人感到困扰,那么这是什么病,有人甚至认为自己患有不治之症,郁郁寡欢,不要。
  • 湖南株洲职高学校(株洲技工学校以及详细介绍)
  • 2024-11-25株洲技工学校以及详细介绍1湖南工贸技师学院湖南工贸技师学院是一所以培养高技能人才为主要目标的高等职业院校,是“全国职业教育先进单位”“国家技能人才培育突出贡献单位”“国家职业教育改革发展示范学校”校址位于株洲市云龙示范区职教。
  • 散热器正确拆卸高清图(散热器的拆卸技巧是什么)
  • 2024-11-25散热器的拆卸技巧是什么 有些用户觉得自己家里散热器位置不对,在安装时没有选择合理的位置,或者散热器维修怎么拆下来?下面金旗舰散热器专家带大家一起来了解散热器拆卸方法  散热器拆卸:  1、上线准备好一些保护膜用于保护拆下来。
  • 米汤圆的制作方法(原来自制简易版黄米汤圆才是真正的米饭杀手)
  • 2024-11-25原来自制简易版黄米汤圆才是真正的米饭杀手小时候在老家,正月十五都是家里自制汤圆,后来为了方便去超市买,缺少了制作过程,好像元宵节不太完美现在工作繁忙,没时间仔细去做馅料,就用这个简易版代替一下吧By舌尖上的幸福味道用料大黄米面210克热水1。
  • 摛怎么读(有关摛读音)
  • 2024-11-25有关摛读音摛,读音chī,汉字,形容舒展;散布〖narrateindetail〗铺陈;(文章)详细地叙述“虽驰辩如涛波,摛藻如春华,犹无益于殿最也”——《文选·班固〈答宾戏〉》摛文(铺叙文采);摛笔(摛毫,执笔。
  • 描写景色的古诗三十首四句 8首闲适美诗意境清新
  • 2024-11-25描写景色的古诗三十首四句 8首闲适美诗意境清新艺术是什么,艺术就是来源于生活却高于生活,而中国的古诗词就是艺术中的一颗璀璨的明珠诗词源于我们日常生活,通过作者各种艺术手法的加工,使得诗词充满了想象空间,这就是诗词的魅力每一首好的诗词,都是简单数笔。
  • 刘姓氏对联(宗祠对联欣赏之84)
  • 2024-11-25宗祠对联欣赏之84侯姓,主要来源有五支:出自姬姓;黄帝时史官仓颉的子孙有以侯为氏者;出自姒姓;春秋时郑国共叔段之子共仲被庄公赐姓侯;以及由改姓而来或其他侯姓在宋版《百家姓》中排行第230位,在2005年由中国科学院遗传。