2022-01-27 mysql基础篇(03) 内置单行函数、分组函数、视图

函数

函数: 把经常使用的代码封装起来

和Java中的方法有所不同,不同点在于:MySQL中的函数必须有返回值(相较于存储过程而言),参数可以有可以没有。

  • 单行函数进来时一个参数,出去时也是一个参数。比如四舍五入函数。单行函数是可以嵌套的。
  • 聚合函数(分组函数):进来时多个函数,出去时只有一个。比如求和,最大值函数。

数值函数

函数用法
ABS(x)返回x的绝对值
CEIL(x)返回大于x的最小整数值
FLOOR(x)返回小于x的最大整数值
MOD(x,y)返回x/y的模
RAND()返回0~1的随机值
ROUND(x,y)返回参数x的四舍五入的有y位的小数的值
TRUNCATE(x,y)返回数字x截断为y位小数的结果
FORMAT(x,y)强制保留小数点后y位,整数部分超过三位的时候以逗号分割,并且返回的结果是文本类型的
SQRT(x)返回x的平方根
POW(x,y)返回x的y次方

CEIL是天花板函数,FLOOR是地板函数。MOD是取余。

SELECT FLOOR(32.32),FLOOR(-43.23),CEIL(32.32),CEIL(-43.23),MOD(12,5);


 随机数函数 RAND

因子(x)一样的话,随机数结果也是一样的。

SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1);


 四舍五入函数 ROUND

-- ROUND(X) 对X四舍五入后。最接近X的整数    默认情况舍掉小数位
SELECT ROUND (123.556),ROUND(123.456),ROUND(123.456,0);

-- ROUND(X,Y) 对X值四舍五入后,保留小数点后Y位 
SELECT ROUND (123.456,0), ROUND (123.456,1), ROUND (123.456,-1);


 截断函数 TRUNCATE

-- 不再像round那样考虑四舍五入,而是直接舍掉
SELECT TRUNCATE(123.456,0),TRUNCATE(123.456,1),TRUNCATE(123.456,-1);


字符串函数

length计算字节数,charLength是计算字符数。

CHAR_LENGTH(s)返回字符串s的字符数
LENGTH(s)返回字符串s的字节数,和字符集有关

utf8每一个汉字占三个字节(UTF-8需要使用三个字节去表示一个非ANSI字符)


 concat,(用于字符串拼接) 

CONCAT(S1,S2,……Sn)连接S1,S2,……Sn为一个字符串
CONCAT_WS(s,S1,S2,……Sn)同CONCAT(S1,S2,…)函数,但每个字符串之间要加上s

如要求结果显示为 xxx worked for yyy


concat_ws 

CONCAT_WS(s,S1,S2,……Sn)同CONCAT(S1,S2,…)函数,但每个字符串之间要加上s

如下图: 指定用短横线连接字符串

SELECT CONCAT_WS('-','蛊','真','人') FROM DUAL


 insert(插入替换)

 字符串索引从1开始

INSERT(str,index,len,instr)将字符串str从index位置开始,len个字符长的子串替换为字符串instr
SELECT INSERT ('AABBCCDD',2,6,'bc') FROM DUAL


instr函数

语法:instr(str,substr)

解释:返回目标字符串substr在字符串集str中第一次出现的位置

SELECT INSTR('Hello World','World');

==

locate()函数

locate(substr,str)

SELECT LOCATE('World','Hello World');

解释:返回目标字符串substr在字符串集str中第一次出现的位置

locate(substr,str,pos)

返回目标字符串substr在字符串集str的截取范围为从第pos位到字符串末尾是否出现,以及在整个str中第一次出现的位置,若未出现,则返回0

====

position 函数

语法:position(substr in str)

解释:返回字符串substr在str中第一次出现的位置

SELECT POSITION('World' IN 'Hello World');

与substr()函数搭配使用,--判断字符串出现的位置,然后截取固定的长度

与reverse()函数搭配使用,若想截取最后出现的位置,需要结合reverse()函数


TRIM大家族

TRIM(s)去掉字符串s开始与结尾的空格
SELECT TRIM('    hello   world   '); #默认是去掉前后空白符


日期时间函数

CURDATE()或CURRENT_DATE()返回当前系统日期
CURTIME()或CURRENT_TIME()返回当前系统时间
NOW()/SYSDATE()/CURRENT_TIMESTAMP()/ LOCALTIME()/LOCALTIMESTAMP()返回当前系统日期时间

获取当前系统日期

-- 获取当前系统日期
SELECT CURDATE(),CURRENT_DATE();


获取当前系统时间

#获取当前系统时间
SELECT CURTIME(),CURRENT_TIME();


 获取系统日期时间值

#获取系统日期时间值。CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE()和NOW()
SELECT CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),NOW();


获取具体的时间值,比如年、月、日、时、分、秒。

#获取具体的时间值,比如年、月、日、时、分、秒。
#分别是YEAR(date)、MONTH(date)、DAY(date)、HOUR(time)、MINUTE(time)、SECOND(time)。
SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE());
SELECT HOUR(CURTIME()),MINUTE(CURTIME()),SECOND(CURTIME());


聚合/分组函数

聚合函数作用于一组数据,并对一组数据返回一个值。

常见的聚合函数:SUM,AVG, COUNT, MAX, MIN

COUNT(*) 和COUNT(1) 是一样的,可以用来计算表中有多少条记录,不管是不是NULL值都计算在内。


COUNT(具体字段) ,计算指定字段出现的个数时,是会忽略null值的


SUM计算总和的时候,也是自动把Null值过滤掉的

AVG()只能用来确定特定数值列的平均值,会忽略值为NULL的行

// 查询员工表的平均工资和工资总额
AVG()和SUM()只适用于数值类型的字段
SELECT AVG(salary),SUM(salary) FROM employees;

// 查询员工表的最大工资和最低工资
MAX()和MIN()适用于数值类型、字符串类型、日期类型的字段
SELECT MAX(salary),MIN(salary) FROM employees;

//COUNT 作用:计算指定字段在查询结构中出现的个数
//count(1)把整个一条数据拿1去充当
SELECT COUNT(employee_id),COUNT(salary),COUNT(1) FROM employees;


面试题:统计表中的记录数,使用COUNT(*)、COUNT(1)、COUNT(具体字段),哪个效率更高?

  1. 如果使用的是MyISAM存储引擎,则三者效率相同,都是O(1)
  2. 如果使用的是InnoDB存储引擎,则三者效率:COUNT(*)=COUNT(1) > COUNT(字段)

MySQL视图

  1. 简化查询
  2. 减少数据冗余

视图缺点:视图的维护成本高,特别是嵌套的视图。

1、创建视图

视图就是存储起来的select语句

创建单表视图

CREATE VIEW anchor_view AS
SELECT * FROM anchor WHERE id in (8,9,10);

1.查询语句中字段的别名会作为视图中字段

2.视图中的字段在基表中可能没有对应的字段 如:AVG(salary)avg_sal


2、查看视图

查看视图的结构

DESC anchor_view;

查看视图的定义信息

SHOW CREATE VIEW anchor_view;


3、视图更新

这个更新,是指”增删改“

有些情况是不可以做更新操作的:

总结:

视图作为虚拟表,主要用于方便查询,不建议更新视图的数据。对视图数据的更改,都是通过对实际表里数据的操作来完成的


 4、修改视图


5、删除视图 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值