半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!(五)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!

7. DAYNAME(d)、DAYOFWEEK(d)、WEEKDAY(d)

作用:DAYNAME(d)返回d对应的工作日的英文名称,如Sunday、Monday等;DAYOFWEEK(d)返回的对应一周中的索引,1表示周日、2表示周一;WEEKDAY(d)表示d对应的工作日索引,0表示周一,1表示周二

8. WEEK(d)

  • 计算日期d是一年中的第几周
SELECT WEEK(NOW())

8037d67f871e4503bd90729ff4359d18.png

9. DAYOFYEAR(d)、DAYOFMONTH(d)

  • 作用:前者返回d是一年中的第几天,后者返回d是一月中的第几天
SELECT DAYOFYEAR(NOW())

5d7dd09d0e4a45888473bea4e10afc19.png

SELECT DAYOFMONTH(NOW())

b66b065304e74db7b8cf6fc883732c1a.png

10. YEAR(date)、QUARTER(date)、MINUTE(time)、SECOND(time)

作用: YEAR(date)返回指定日期对应的年份,范围是1970~2069;QUARTER(date)返回date对应一年中的季度,范围是1~4;MINUTE(time)返回time对应的分钟数,范围是0~59;SECOND(time)返回制定时间的秒值

SELECT YEAR(NOW())

0a73e72f8b9d4eb48f9e98ff6267d0bf.png

SELECT QUARTER(NOW())

2131cb741c8042a4b88e902e695ede09.png

SELECT MINUTE(NOW())

f34b774b7cce4e5bb43e39dfa096cec6.png

SELECT SECOND(NOW())

6b34137858084608bf359ddc7b2e422e.png

11. EXTRACE(type FROM date)

  • 作用:从日期中提取一部分,type可以是YEAR、YEAR_MONTH、DAY_HOUR、DAY_MICROSECOND、DAY_MINUTE、DAY_SECOND

12. TIME_TO_SEC(time)

  • 作用:返回以转换为秒的time参数,转换公式为"3600小时 + 60分钟 + 秒"
SELECT TIME_TO_SEC(NOW())


ed1f98799b134bbcb2dfcc3af1114a42.png

13. SEC_TO_TIME()

  • 作用:和TIME_TO_SEC(time)互为反函数,将秒值转换为时间格式
SELECT SEC_TO_TIME(530)


350f3b43c9884779b7c72b70c4093d37.png

14. DATE_ADD(date,INTERVAL expr type)、ADD_DATE(date,INTERVAL expr type)

作用:返回将起始时间加上expr type之后的时间,比如DATE_ADD(‘2010-12-31 23:59:59’, INTERVAL 1 SECOND)表示的就是把第一个时间加1秒

15. DATE_SUB(date,INTERVAL expr type)、SUBDATE(date,INTERVAL expr type)

  • 作用:返回将起始时间减去expr type之后的时间

16. ADDTIME(date,expr)、SUBTIME(date,expr)

  • 作用:前者进行date的时间加操作,后者进行date的时间减操作

四. 条件判断函数

1. IF(expr,v1,v2)

  • 作用:如果expr是TRUE则返回v1,否则返回v2

2. IFNULL(v1,v2)

  • 作用:如果v1不为NULL,则返回v1,否则返回v2

3. CASE expr WHEN v1 THEN r1 [WHEN v2 THEN v2] [ELSE rn] END

  • 作用:如果expr等于某个vn,则返回对应位置THEN后面的结果,如果与所有值都不想等,则返回ELSE后面的rn

五. 系统信息函数

1. VERSION()

  • 作用:查看MySQL版本号
SELECT VERSION()

e4da87a383d447b1a574146e98a4dc3e.png

2. CONNECTION_ID()

  • 作用:查看当前用户的连接数
SELECT CONNECTION_ID()

20a6700ba7394f18a6b877d65f706154.png

3. USER()、CURRENT_USER()、SYSTEM_USER()、SESSION_USER()

  • 作用:查看当前被MySQL服务器验证的用户名和主机的组合,一般这几个函数的返回值是相同的
SELECT USER()

0c8471716cf941998460a657edf32501.png

SELECT CURRENT_USER()

c6da3feb11184d9791fe0c5d2fb0e4c4.png

SELECT SYSTEM_USER()

9f524e0c8f904690b5901f419dc07c9e.png

SELECT SESSION_USER()

bffc0cce25ef47e7b9c6afb553a0f766.png

4. CHARSET(str)

  • 作用:查看字符串str使用的字符集
SELECT CHARSET(555)

cb0654f72acd4db8aa3f7a625861458c.png

5. COLLATION()

  • 作用:查看字符串排列方式
SELECT COLLATION('sssfddsfds')


44af017007fd44d086b91f4df77ca662.png


六. 加密函数

1. PASSWORD(str)

  • 作用:从原明文密码str计算并返回加密后的字符串密码,注意这个函数的加密是单向的(不可逆),因此不应将它应用在个人的应用程序中而应该只在MySQL服务器的鉴定系统中使用
SELECT PASSWORD('mima')

cfaef03a7f184fc689296f32b2b9f5b9.png

2. MD5(str)

  • 作用:为字符串算出一个MD5 128比特校验和,改值以32位十六进制数字的二进制字符串形式返回
SELECT MD5('mima')


99e4fc00c7e140b59d97c4e9036494a1.png

3. ENCODE(str, pswd_str)

  • 作用:使用pswd_str作为密码,加密str
SELECT ENCODE('fdfdz','mima')

0c41ce4455864accb008001f4120bb46.png

4. DECODE(crypt_str,pswd_str)

  • 作用:使用pswd_str作为密码,解密加密字符串crypt_str,crypt_str是由ENCODE函数返回的字符串
SELECT DECODE('fdfdz','mima')

03c1c54104114674804bf096af5969c9.png

七. 其他函数

1. FORMAT(x,n)

  • 作用:将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串形式返回
SELECT FORMAT(446.454,2)


a9fca31470374884996657433eb90595.png

2. CONV(N,from_base,to_base)

  • 作用:不同进制数之间的转换,返回值为数值N的字符串表示,由from_base进制转换为to_base进制

3. INET_ATON(expr)

  • 作用:给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数,地址可以使4或8比特

4. INET_NTOA(expr)

  • 作用:给定一个数字网络地址(4或8比特),返回作为字符串的该地址的点地址表示

5. BENCHMARK(count,expr)

  • 作用:重复执行count次表达式expr,它可以用于计算MySQL处理表达式的速度,结果值通常是0(0只是表示很快,并不是没有速度)。
  • 另一个作用是用它在MySQL客户端内部报告语句执行的时间

6. CONVERT(str USING charset)

  • 作用:使用字符集charset表示字符串str

更多用法还请参考:http://www.geezn.com/documents/gez/help/117555-1355219868404378.html

fbacd2b6f4f44005b7e98d42372c7861.png

【SQL实战练习】

  • 题目来自互联网,建议每道题都在本地敲一遍巩固记忆 !

创建数据库

aa54242663664a1184216e9b88db6e8a.png


创建表(并初始化数据)

-- 学生表
CREATE TABLE `student`(
`s_id` VARCHAR(20),
`s_name` VARCHAR(20) NOT NULL DEFAULT '',
`s_birth` VARCHAR(20) NOT NULL DEFAULT '',
`s_sex` VARCHAR(10) NOT NULL DEFAULT '',
PRIMARY KEY(`s_id`)
);
-- 课程表
CREATE TABLE `course`(
`c_id` VARCHAR(20),
`c_name` VARCHAR(20) NOT NULL DEFAULT '',
`t_id` VARCHAR(20) NOT NULL,
PRIMARY KEY(`c_id`)
);
-- 教师表
CREATE TABLE `teacher`(
`t_id` VARCHAR(20),
`t_name` VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY(`t_id`)
);
-- 成绩表
CREATE TABLE `score`(
`s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT(3),
PRIMARY KEY(`s_id`,`c_id`)
);
-- 插入学生表测试数据
insert into student values('01' , '赵信' , '1990-01-01' , '男');
insert into student values('02' , '德莱厄斯' , '1990-12-21' , '男');
insert into student values('03' , '艾希' , '1990-05-20' , '男');
insert into student values('04' , '德莱文' , '1990-08-06' , '男');
insert into student values('05' , '俄洛依' , '1991-12-01' , '女');
insert into student values('06' , '光辉女郎' , '1992-03-01' , '女');
insert into student values('07' , '崔丝塔娜' , '1989-07-01' , '女');
insert into student values('08' , '安妮' , '1990-01-20' , '女');
-- 课程表测试数据
insert into course values('01' , '语文' , '02');
insert into course values('02' , '数学' , '01');
insert into course values('03' , '英语' , '03');
-- 教师表测试数据
insert into teacher values('01' , '死亡歌颂者');
insert into teacher values('02' , '流浪法师');
insert into teacher values('03' , '邪恶小法师');
-- 成绩表测试数据
insert into score values('01' , '01' , 80);
insert into score values('01' , '02' , 90);
insert into score values('01' , '03' , 99);
insert into score values('02' , '01' , 70);
insert into score values('02' , '02' , 60);
insert into score values('02' , '03' , 80);
insert into score values('03' , '01' , 80);
insert into score values('03' , '02' , 80);
insert into score values('03' , '03' , 80);
insert into score values('04' , '01' , 50);
insert into score values('04' , '02' , 30);
insert into score values('04' , '03' , 20);
insert into score values('05' , '01' , 76);
insert into score values('05' , '02' , 87);
insert into score values('06' , '01' , 31);
insert into score values('06' , '03' , 34);
insert into score values('07' , '02' , 89);
insert into score values('07' , '03' , 98);

表结构

  • 这里建的表主要用于sql语句的练习,所以并没有遵守一些规范。下面让我们来看看相关的表结构吧

学生表(student)

1503861c9c77405b8e083b6b0595ec55.png

  • s_id = 学生编号,s_name = 学生姓名,s_birth = 出生年月,s_sex = 学生性别

课程表(course)

0c221e9384264e68b0e4760069daa733.png

  • c_id = 课程编号,c_name = 课程名称,t_id = 教师编号

教师表(teacher)

cece47274e3145c2859d7f25e1246b75.png

  • t_id = 教师编号,t_name = 教师姓名

成绩表(score)

22c6f01a00374a48b5f6880764865f3a.png

  • s_id = 学生编号,c_id = 课程编号,s_score = 分数

习题

  • 开始之前我们先来看看四张表中的数据。


99fe938a9fa44a1fa2e5ef922c5420ba.png


9b0f4f851899495ebd9e73a5ed752ee8.png

0ea368756f5944ff8c3bab6a202ecb96.png


7544084d59f74803a068583f2c510393.png

1. 查询"01"课程比"02"课程成绩高的学生的信息及课程分数

SELECT
  st.*,
  sc.s_score AS '语文',
  sc2.s_score '数学' 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id 
  AND sc.c_id = '01'
  LEFT JOIN score sc2 ON sc2.s_id = st.s_id 
  AND sc2.c_id = '02'

ed35a1a92c954a7da0db2b7e005ace4b.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
存储 SQL 关系型数据库
MySQL阅读网上MySQL文章有感的杂记
MySQL阅读网上MySQL文章有感的杂记
45 0
|
10月前
|
关系型数据库 MySQL Linux
让安装变简单:Linux下安装Mysql一篇文章搞定
让安装变简单:Linux下安装Mysql一篇文章搞定
130 0
|
19天前
|
SQL 关系型数据库 MySQL
一篇文章解析mysql的 行转列(7种方法) 和 列转行
一篇文章解析mysql的 行转列(7种方法) 和 列转行
541 0
|
19天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
19天前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
63 0
|
19天前
|
Cloud Native 关系型数据库 MySQL
AnalyticDB MySQL文章汇总
AnalyticDB MySQL文章汇总
48 0
|
8月前
|
SQL 存储 关系型数据库
MySQL的第一篇文章——了解数据库、简单的SQL语句
MySQL的第一篇文章——了解数据库、简单的SQL语句
|
8月前
|
SQL 关系型数据库 MySQL
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
59 0
|
12月前
|
SQL 存储 算法
【MySQL速通篇004】这可能最详细的关于MySQL基础知识点的文章了
【MySQL速通篇004】这可能最详细的关于MySQL基础知识点的文章了
121 0
|
存储 SQL 缓存
看了这一篇文章,你还不懂MySQL体系结构,你来找我
工作很长时间了,对于数据库的掌握程度却仅仅停留在表面的CRUD阶段,对于深层次的原理和技术知识了解的少之又少,随着岁数不断的增长。很多时候,出去找工作很迷茫,被面试官问的感觉自己很菜。现在利用工作休息时间,把自己现有的资料和新学的知识进行总结。也算是一种深层次的理解和掌握。本文章收录在MySQL性能优化+原理+实战专栏,更多的MySQL优化点击此处查看开篇介绍。 在以后的学习中,我会创建一个没有权限的用户,进行MySQL权限和优化的实战。 关于有些系统变量的作用及在学习中遇见的ERROR会全部会收录到开篇介绍一文当中。
370 0