MySQL之函数和谓词
今天我们主要MySQL的函数和谓词。
目录
- 1.函数
- 1.1算数函数
- 1.2 字符串函数
- 1.3 日期函数
- 1.4 转换函数
- 2.谓词
- 参考资料
1.函数
我们在前面几张章学习了SQL语言一些基本的语法结构,今天我们来介绍函数,函数大致可以分为以下几种:
- 算数函数(用来进行数值计算的函数)
- 字符串函数(用来进行字符串操作的函数)
- 日期函数(用来进行日期操作的函数
- 转换函数(用来转化数据类型和值的函数)
- 聚合函数(用来进行数据聚合的函数)
我们前面已经学习了聚合函数,如:COUNT、SUM、AVG、MAX、MIN这五种,而其他种类的函数超过200种,但常用的函数就只有30-50种。
1.1算数函数
算数函数就是最基本的函数:+、-、*、/ (加减乘除),为了学习科学计算,我们首先创建一个表。这里需要说明一下,因为后面会用到ROUND函数,该函数需要NUNERIC类型的函数,通过NUMERIC (全体位数,小数位数)的形式来指定数值的大小。
--创建表 (DDL)
CREATE TABLE samplemath
(m NUMERIC (10,3),n INTEGER,p INTEGER
);--插入的数据 (DML)
BEGIN 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;
结果如下:
ABS绝对值函数
SELECT m,ABS(m) AS abs_col
FROM samplemath;
返回结果:可以看出null的绝对值为null。
MOD取余
MOD(被除数,除数)
SELECT n,p,MOD(n,p) AS mod_col
FROM samplemath;
求余结果:
ROUND四舍五入
ROUND(对象数值,保留小数的位数)
SELECT m,n,ROUND(m,n) AS round_col
FROM samplemath;
1.2 字符串函数
字符串函数也是被经常使用的一种函数,为了学习字符串函数,我们就创建一个字符串表。
--MySQL
--DDL:创建表
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;
CONCAT拼接
在业务中我们经常碰见abc+bcd=abcbcd这样的字符串拼接操作。
SELECT str1, str2,CONCAT(str1, str2) AS str_concatFROM SampleStr;
拼接成功:
当然我们也可以拼接多个字符串,只要在CONCAT(str1, str2, str3) .
LENGTH字符串长度
--查看字符串长度
SELECT str1,LENGTH(str1) AS len_str
FROM samplestr;
LOWER小写转换和UPPER大写转换
SELECT str1,LOWER(str1) AS low_str
FROM sampleStr
WHERE str1 IN ('ABC','aBC','abc','山田','@!#$%')
--这里要加WHERE的原因是大小写转化只是用英文字母的场合,其他场合不适用
结果如下:
REPLACE字符串的替换
REPLACE(需要替换的对象,替换的字符,替换后的字符串)
REPLACE(abcdefg,abc,ABC)--将abcdefg中的abc替换成ABC
SELECT str1,str2,str3,REPLACE(str1,str2,str3) AS rep_str
FROM samplestr;
结果如下:
SUBSTRING字符串的截取
SUBSTRING(对象字符串 FROM 截取位置的起始位置 FOR 截取的字符数)
例如:
SELECT str1,SUBSTRING(str1 FROM 3 FOR 2) AS sub_strFROM samplestr;
这里截取的字符str1的第3个位置开始后的2个字符,也就是3、4号字符。
1.3 日期函数
CURRENT_DATE日期函数
--获取当前日期函数
CURRENT_DATE--例如:获取当前日期
SELECT CURRENT_DATE;
获取当前时间。
CURRENT_TIME当前时间
SELECT CURRENT_TIME;
CURRENT_TIMESTAMP当前时间和日期
SELECT CURRENT_TIMESTAMP;
EXTRACT截取日期元素
EXTRACT(日期元素 FROM 日期)
使用EXTRACT函数可以截取出日期数据的一部分,例如‘年’,‘月’,或者‘小时’,‘秒’等。该函数返回的数值并不是日期类型而是数值类型。
--获取时间地点
SELECT CURRENT_TIMESTAMP,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;
1.4 转换函数
CAST类型转换
CAST(转换前的值 AS 想要转换的值)
例如:
SELECT CAST('0001' AS SIGNED INTEGER) AS int_col;
将“0001”转化为了数字类型1;
COALESCE将NULL转化为其他值
COALESCE(数据1,数据2,数据3.....)
COALESCE是SQL特有的函数,该函数会返回可变参数中左侧开始开始第1个不是NULL的值,参数个数是可变的,因此可以根据需要无限增加。
SELECT COALESCE(NULL, 1) AS col_1,COALESCE(NULL, 'test', NULL) AS col_2,COALESCE(NULL, NULL, '2009-11-01') AS col_3;
在SQL语句中将NULL转化为其他值时就会用到转化函数。就像之前我们学习的那样,运算或者函数中含有NULL时,结果全都会变成NULL。
2.谓词
什么是谓词?其实大家已经使用过很多谓词:=,<,>,<>等比较运算符,其正式的名称就是比较谓词,本章节主要介绍以下谓词:
- LIKE
- BETWEEN
- IS NULL、IS NOT NULL
- IN
- EXISTS
LIKE 谓词
我们首先创建一个字符表。
CREATE TABLE Samplelike(
strcol VARCHAR(6) NOT NULL,
PRIMARY KEY (strcol)
);--DML 插入数据
BEGIN TRANSACTION;
INSERT INTO samplelike (strcol) VALUES ('abcddd');
INSERT INTO samplelike (strcol) VALUES ('dddabc');
INSERT INTO samplelike (strcol) VALUES ('abdddc');
INSERT INTO samplelike (strcol) VALUES ('abcdd');
INSERT INTO samplelike (strcol) VALUES ('abddc');
COMMIT;
选择以ddd开头的所有字符
SELECT * FROM samplelike WHERE strcol LIKE 'ddd%';
选择以ddd结尾的所有字符
SELECT * FROM samplelike WHERE strcol LIKE '%ddd';
选择以ddd中间的所有字符
SELECT * FROM samplelike WHERE strcol LIKE '%ddd%';
除了%还可以用_(下划线)来代替,它代表了‘任意1个字符’
SELECT *
FROM samplelike
WHERE strcol LIKE 'abc__';--这里是两个字符
BETWEEN范围查询
可以选取100到1000范围内的数据
SELECT product_name,sale_price
FROM product
WHERE sale_price BETWEEN 100 AND 1000;
IS NULL 、IS NOT NULL 判断是否为NULL
选取进货单价为空的商品
SELECT product_name,purchase_price
FROM product
WHERE purchase_price IS NULL;
选取进货单价不为空的商品
SELECT product_name,purchase_price
FROM product
WHERE purchase_price IS NOT NULL;
IN NOT IN选择在/不在集合内的目标
IN和其他谓语不一样的地方在于IN后面放子查询。
选择进货单价为320、500、5000的商品
SELECT product_name,purchase_price
FROM product
WHERE purchase_price IN (320,500,5000);
EXISTS
EXISTS和其他的谓词都不一样,因为很难很难很难理解!EXISTS只在乎结果存不存在,返回的是TRUE和FALSE。
我们先创建一个表,插入数据
--创建一个表
CREATE TABLE ShopProduct
(shop_id CHAR(4) NOT NULL,shop_name VARCHAR(200) NOT NULL,product_id CHAR(4) NOT NULL,quantity INTEGER NOT NULL,PRIMARY KEY (shop_id, product_id));START TRANSACTION;INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A', '东京', '0001', 30);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A', '东京', '0002', 50);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A', '东京', '0003', 15);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0002', 30);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0003', 120);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0004', 20);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0006', 10);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0007', 40);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0003', 20);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0004', 50);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0006', 90);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0007', 70);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000D', '福冈', '0001', 100);
COMMIT;
数据类型:
我们使用EXISTS选取出‘大阪店在售商品的销售单价’
SELECT product_name, sale_priceFROM Product AS PWHERE EXISTS (SELECT *FROM ShopProduct AS SPWHERE SP.shop_id = '000C'AND SP.product_id = P.product_id);
执行结果:
参考资料
图书:《SQL基础教程》
MySQL之函数和谓词相关推荐
- mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基础知识梳理(六)- 函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为"参数",输出值称 ...
- MICK-SQL基础教程(第二版) 第六章 函数、谓词、CASE表达式
第六章 函数.谓词.CASE表达式 函数 函数大致可以分为以下几种: 算术函数(用来进行数值计算的函数) 字符串函数(用来进行字符串操作的函数) 日期函数(用来进行日期操作的函数) 转换函数(用来转换 ...
- oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...
我有兴趣知道是否有任何MySQL / Oracle函数给增量号.在另一列相似的值的基础上的一列? 就像在我的下面的代码中,我有order_primary列,其中包含订单号.所以基于此我们可以确定有多少 ...
- ipad php mysql_PHP中的MYSQL常用函数
PHP中的MYSQL常用函数 1.mysql_connect()-建立数据库连接 格式: resource mysql_connect([string hostname [:port] [:/path ...
- mysql 本周函数_【转】MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据...
MySQL时间函数的使用:查询本周.上周.本月.上个月份的数据[转] /*今天*/ select * from 表名 where to_days(时间字段) = to_days(now()); /*昨 ...
- mysql聚合函数count用法_MySQL中聚合函数count的使用和性能优化技巧
本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是 ...
- MySQL STR_TO_DATE函数
转: MySQL STR_TO_DATE函数 2017年12月05日 15:41:58 木林森淼 阅读数:23822 版权声明:水平有限,如有补充或更正,望大家评论指正 https://blog.cs ...
- MYSQL 加密函数的用法
常见加密函数有md5,hash,password等,mysql应用web一般都是md5,32位的,下面讲将MYSQL 加密函数的用法.1,md5加密用法select md5('admin');2,pa ...
- Mysql 常用函数(19)- mod 函数
Mysql常用函数的汇总,可看下面文章 https://www.cnblogs.com/poloyy/p/12890763.html mod 的作用 求余数,和%一样 mod的语法格式 mod(n,m ...
最新文章
- Cron 表达式极速参考
- linux下的oracle10g rman备份
- 孙琦:大数据思维助力我探究能源颗粒机理 | 提升之路系列(四)
- vue引用公用的头部和尾部文件。
- 阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春
- Net中如何操作IIS
- Java黑皮书课后题第5章:5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数
- 中兴通讯与北京交通大学、中国移动北京公司签署 “5G战略合作框架协议”
- maven命令mvn package指定jar包名称
- 寺库商用区块链落地,联盟链为每件奢侈品发“×××”
- 哈工大-基于内核栈切换的进程切换
- 极客大学产品经理训练营:数据分析 第16课总结
- K3 Cloud BOS设计 增加表单按钮 修改状态
- go语言-LiteIDE 安装及使用教程
- 视频教程 | 与程序员进行高效沟通,三分钟带你掌握Zeplin
- 学生Dreamweaver静态网页设计 基于HTML+CSS+JavaScript制作简食餐厅美食网站制作
- 如何重置Mac的蓝牙模块以解决连接问题
- ASP.NET微信群机器人管家系统,源码分享
- 【生信分析】一些关于生物信息的常见名字解释
- 04_Linux ARM架构-部署kibana服务-银河麒麟V10 操作系统