数据库 MySQL 简明学习教程一起来学习 MySQL——进阶篇

2,358次阅读
没有评论
分享至:
数据库 MySQL 简明学习教程一起来学习 MySQL——进阶篇

开篇寄语

前一篇在 MySQL 基础篇稍微了解了 MySQL 知识点,本篇文章则是在基础篇之上的进阶,掌握更多相关技巧,那么本篇文章就不要错过了。

前情提要

内容详情

MySQL 中有很多内构函数,描述作用以及例子来说明。

String 函数

函数 描述 例子
ASCII() 返回特定字符的 ASCII 值 ASCII('abc')
CHAR_LENGTH() 返回字符串的长度(以字符为单位) CHAR_LENGTH('Hello World')
CHARACTER_LENGTH() 返回字符串的长度(以字符为单位) CHARACTER_LENGTH('Hello World')
CONCAT() 将两个或多个表达式加在一起 CONCAT('Hello World', '!!!')
CONCAT_WS() 将两个或多个表达式与分隔符相加 CONCAT_WS('-','a','b')
FIELD() 返回值列表中数值的索引位置 FIELD("a", "b", "c", "d")
FIND_IN_SET() 返回值列表中字符串的索引位置 FIND_IN_SET("ab", "abstract,ab,abs")
FORMAT() 将数字格式化为“#,###,###.##”之类的格式,四舍五入到指定的小数位数 FORMAT(2105.563, 2)
INSERT() 在指定位置的字符串中插入字符串,并插入一定数量的字符 INSERT("Luckydesigner.space", 1, 13, "Example")
INSTR() 返回一个字符串在另一个字符串中第一次出现的位置 INSTR("abstract,ab,abs",'b')
LCASE() 将字符串转换为小写 LCASE("MySQL is Very Good!")
LEFT() 从字符串中提取多个字符(从左开始) LEFT("MySQL Tutorial", 3)
LENGTH() 返回字符串的长度(以字节为单位) LENGTH("MySQL is Very Good!")
LOCATE() 函数返回字符串中子字符串第一次出现的位置 LOCATE('u','Luckydesigner.space')
LOWER() 将字符串转换为小写 LOWER("MySQL is Very Good!")
LPAD() 用另一个字符串向左填充一个字符串,达到一定的长度 LPAD("0123456", 20, "036")
LTRIM() 函数从字符串中删除前导空格 LTRIM("     MySQL Tutorial")
MID() 函数从字符串中提取子字符串(从任意位置开始) MID("MySQL Tutorial", 6, 3)
POSITION() 返回字符串中子字符串第一次出现的位置 POSITION("u" IN "Luckydesigner.space")
REPEAT() 将字符串重复指定的次数 REPEAT("MySQL Tutorial", 3)
REPLACE() 用新的子字符串替换字符串中所有出现的子字符串 REPLACE("SQL Tutorial", "SQL", "MySQL");
REVERSE() 反转一个字符串并返回结果 REVERSE("MySQL Tutorial")
RIGHT() 从字符串中提取多个字符(从右开始) RIGHT('MySQL Tutorial', 8)
RPAD() 用另一个字符串将一个字符串右填充到一定长度 LPAD("0123456", 20, "036")
RTRIM() 函数从字符串中删除后导空格 RTRIM("MySQL Tutorial    ")
SPACE() 指定数量的空格字符的字符串 SPACE(5)
STRCMP() 比较两个字符串 STRCMP('abc','abc')
如果 A = B,返回0;如果 A > B,返回1;如果 A < B,返回-1
SUBSTR() 从字符串中提取子字符串(从任意位置开始) SUBSTR("MySQL Tutorial", 7, 3)
SUBSTRING() 从字符串中提取子字符串(从任意位置开始) SUBSTRING("MySQL Tutorial", 7, 3)
SUBSTRING_INDEX() 在出现指定数量的分隔符之前返回字符串的子字符串 SUBSTRING_INDEX('Luckydesigner.space', '.', 1)
TRIM() 返回清空字符串前后的空格 TRIM(' MySQL Tutorial ')
UCASE() 将字符串转换为大写 UCASE("MySQL is Very Good!")
UPPER() 将字符串转换为大写 UPPER("MySQL is Very Good!")

Numeric 函数

函数 描述 例子
ABS() 返回绝对值 abs(-10)
ACOS() 返回反余弦值 ACOS(0.25)
ASIN() 返回反正弦值 ASIN(0.25)
ATAN() 返回反正切值 ATAN(2.5)
ATAN2() 返回两个数字的反正切 ATAN2(0.50, 1)
AVG() 返回表达式的平均值 AVG(Price)
CEIL() 返回大于或等于数字的最小整数值 CEIL(25.62)
CEILING() 同CEIL() CEILING(25.62)
COS() 返回余弦值 COS(2)
COT() 返回余切值 COT(6)
COUNT() 返回选择查询返回的记录数 COUNT(Price)
DEGREES() 将弧度值转换为度数 DEGREES(1.525)
A DIV B A 除以 B,返回整数 10.52 DIV 5.5
EXP() 返回 e 的指定数字的幂 EXP(1)
FLOOR() 返回小于或等于数字的最小整数值 FLOOR(25.62)
GREATEST() 返回参数列表的最大值 GREATEST(6,12,24,14,66)
LEAST() 返回参数列表的最小值 LEAST(6,12,24,14,66)
LN() 返回数字的自然对数 LN(2)
LOG() 返回指定数的自然对数,或该数与指定底数的对数 LOG(2)
LOG10() 返回以 10 为底的数字的自然对数 LOG10(2)
LOG2() 返回以 2 为底的数字的自然对数 LOG2(2)
MAX() 返回一组值中的最大值 MAX(Price)
MIN() 返回一组值中的最小值 MIN(Price)
MOD() 返回一个数除以另一个数的余数 MOD(21,2)
PI() 返回 Pi 值 PI()
POW(A,B) 返回 A 的指数幂 B POW(2,4)
POWER(A,B) 同 POW() POWER(2,4)
RADIANS() 将度数转换为弧度 RADIANS(180)
RAND() 返回 0(包括)和 1(不包括)之间的随机数 RAND()
ROUND(A, B) 将数字四舍五入到指定的小数位数 ROUND(3.1415926, 2)
SIGN(A) 返回数字符号 SIGN(-23.06)
如果 A > 0,返回1;如果 A = 0,返回0;如果 A < 0,返回 -1
SIN() 返回数字的正弦值 SIN(2)
SQRT() 返回数字的平方根 SQRT(2)
SUM() 计算一组值的总和 SUM(Price)
TAN() 返回数字的正切值 TAN(1.75)
TRUNCATE() 将数字截断为指定的小数位数 TRUNCATE(135.375, 2)

Date 函数

函数 描述 例子
ADDDATE(date, INTERVAL value addunit)
或者
ADDDATE(date,days)
将时间/日期间隔添加到日期,然后返回日期 ADDDATE("2022-05-29", INTERVAL 10 DAY)
例子中的 DAY 可以换成以下类型
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
ADDTIME(A,B) 将时间间隔添加到时间/日期时间,然后返回时间/日期时间 ADDTIME("2022-05-30 09:34:21", "12:02")
CURTIME() 返回当前时间,时间格式是 “HH-MM-SS” CURTIME()
CURDATE() 返回当前日期,格式是 “YYYY-MM-DD” CURDATE()
CURRENT_DATE() 返回当前时间,时间格式是 “YYYY-MM-DD” CURRENT_DATE()
CURRENT_TIME() 返回当前时间,时间格式是 “HH-MM-SS” CURRENT_TIME()
CURRENT_TIMESTAMP() 返回当前时间,时间格式是 “YYYY-MM-DD  HH:MM:SS” CURRENT_TIMESTAMP()
DATE_ADD(date, INTERVAL value addunit) 将时间/日期间隔添加到日期,然后返回日期 参考 ADDDATE()
DATE_FORMAT(A, B) 按指定格式化日期 DATE_FORMAT("2022-05-29", "%Y")
例子中的 “%Y” 可以换成以下类型
%a
星期缩写名称 (Sun to Sat)
%b
月份缩写名称 (Jan to Dec)
%c
月份数字形式 (0 to 12)
%D
单日在月份中缩写 (1st, 2nd, 3rd, ...)
%d
单日在月份中数字形式 (01 to 31)
%e
单日在月份中数字形式 (0 to 31)
%f
微秒显示 (000000 to 999999)
%H
小时数显示 (00 to 23)
%h
小时数显示 (00 to 12)
%I
小时数显示 (00 to 12)
%i
分钟数显示 (00 to 59)
%j
当年到了第几天 (001 to 366)
%k
小时数显示 (0 to 23)
%M
月份名称全称 (January to December)
%m
月份数字表现形式 (00 to 12)
%p
AM or PM
%r
时间在 12 小时制显示 AM or PM 形式 (hh:mm:ss AM/PM)
%S
秒数 (00 to 59)
%s
秒数 (00 to 59)
%T
时间在 24 小时制显示 (hh:mm:ss)
%U
星期天是一周的第一天的星期 (00 to 53)
%u
星期一是一周的第一天的星期 (00 to 53)
%V
星期天是一周的第一天的星期 (01 to 53). 也可以用 %X
%v
星期一是一周的第一天的星期 (01 to 53). 也可以用 %x
%W
星期的完整名称 (Sunday to Saturday)
%w
显示星期几 Sunday=0 and Saturday=6
%Y
年份为 4 位数字值
%y
年份为 2 位数字值
DATE_SUB(date, INTERVAL value addunit) 从日期中减去时间/日期间隔,然后返回日期 参考 ADDDATE()
EXTRACT(part FROM date) 从给定日期提取一部分 EXTRACT(MONTH FROM "2022-05-29")
例子中的 MONTH 可以换成以下类型
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
FROM_DAYS(A) 从数字日期值返回日期 FROM_DAYS(105000)
MAKEDATE() 返回基于年份和天数值的日期 MAKEDATE(2022,125)
MAKETIME() 返回基于小时,分钟数和秒数的时间值 MAKETIME(11,23,56)
NOW() 同 CURRENT_TIMESTAMP() NOW()
SYSDATE() 同 CURRENT_TIMESTAMP() SYSDATE()
LAST_DAY(A) 提取给定日期该月的最后一天 LAST_DAY('2020-02-12')
LOCALTIME() 同 CURRENT_TIMESTAMP() LOCALTIME()
LOCALTIMESTAMP() 同 CURRENT_TIMESTAMP() LOCALTIMESTAMP()
DATE() 从日期时间表达式中提取日期部分 DATE("2022-05-28 09:30:00"),返回 2022-05-28
TIMEDIFF() 返回两个时分秒之间的时间,返回也是时分秒的形式 TIMEDIFF("20:19:11", "12:10:10")
DATEDIFF(A, B) 返回两个日期之间的天数 DATEDIFF("2022-05-28","2022-05-15")
MICROSECOND() 返回时分秒中的毫秒数 MICROSECOND("2022-05-28 09:30:00.000059")
SECOND() 返回时分秒中的秒钟数 SECOND("2022-05-28 09:30:00")
MINUTE() 返回时分秒中的分钟数 MINUTE("2022-05-28 09:30:00")
HOUR() 返回时分秒中的小时数 HOUR("2022-05-28 09:30:00")
DAY() 返回年月日中的日数字 DAY("2022-05-28")
DAYOFMONTH() 同DAY() DAYOFMONTH("2022-05-28")
WEEK() 返回该日期是今年的第几个星期 WEEK("2022-05-28")
WEEKOFYEAR() 同WEEK() WEEKOFYEAR("2022-05-28")
MONTH() 返回年月日中的月数字 MONTH("2022-05-28")
YEAR() 返回年月日中的年数字 YEAR("2022-05-28")
DAYOFYEAR() 返回当年度到了第几天 DAYOFYEAR("2022-05-28")
DAYNAME() 返回星期名称 DAYNAME("2022-05-28")
MONTHNAME() 返回月份名称 MONTHNAME("2022-05-28")
DAYOFWEEK() 返回星期数字 DAYOFWEEK("2022-05-28")
1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday
WEEKDAY 同DAYOFWEEK() WEEKDAY("2022-05-28")
0 = Monday, 1 = Tuesday, 2 = Wednesday, 3 = Thursday, 4 = Friday, 5 = Saturday, 6 = Sunday
YEARWEEK() 返回年数和今年的第几个星期 YEARWEEK("2022-05-28")
TO_DAYS() 返回日期和年份 0 之间的天数 TO_DAYS("2022-05-28")
TIME() 返回时分秒形式 TIME("2020-01-05 19:30:10")
TIMESTAMP() 根据日期或日期时间值返回一个日期时间值 TIMESTAMP("2022-05-28", '12:00:00')
TIME_TO_SEC() 时分秒转换为秒的形式返回 TIME_TO_SEC('12:00:00')
SUBTIME(A,B) 时间减法 SUBTIME("2022-05-27 10:24:21", "09:24:21.001125")
SEC_TO_TIME() 根据指定的秒数返回时间值(格式为 HH:MM:SS) SEC_TO_TIME(100)
QUARTER() 返回给定日期值的一年中的季度(从 1 到 4 的数字) QUARTER("2022-05-27")
1-3 月返回 1
4-6 月回归 2
7-9 月返回 3
10 月至 12 月返回 4
PERIOD_ADD() 将指定的月数添加到期间 PERIOD_ADD(202205,5)
PERIOD_DIFF(A,B) 返回两个时期之间的差异 A 和 B 的日期格式要一致

Advanced 函数

函数 描述 例子
BIN() 返回数字的二进制表示形式,作为字符串值 BIN(15)
BINARY 将值转换为二进制字符串 BINARY "HELLO" = "hello"
CAST(A AS B) 将 A(任何类型的)值转换为指定的数据类型 B B 涉及的类型如下:
DATE
DATETIME
DECIMAL
TIME
CHAR
NCHAR
SIGNED
UNSIGNED
BINARY
CONVERT(A, B) 同 CAST 同 CAST
CONV(A, B, C) 将数字 A 从一个数字进制 B 转换为另一个 C 进制,并将结果作为字符串值返回 CONV(5, 10, 8)
COALESCE() 返回列表中第一个非 NULL 值 COALESCE(1, NULL, 2, 6,NULL)
IF() 如果条件为 TRUE,则返回一个值,如果条件为 FALSE,则返回另一个值 IF(2<3, 'YES', 'NO')
USER() 返回 MySQL 连接的当前用户名和主机名 USER()
CURRENT_USER() 返回服务器用于验证当前客户端的 MySQL 帐户的用户名和主机名 CURRENT_USER()
CONNECTION_ID() 返回当前连接的唯一连接 ID CONNECTION_ID()
DATABASE() 返回当前数据库的名称 DATABASE()
LAST_INSERT_ID() 返回表中已插入或更新的最后一行的 AUTO_INCREMENT id LAST_INSERT_ID()
IFNULL(A,B) 如果 A 是 NULL,则返回B,反之,则返回 A IFNULL(NULL,'YES')
ISNULL() 如果是 NULL,返回1,反之,返回0 ISNULL(NULL)
NULLIF(A,B) 比较 A 和 B,如果 A = B,返回 NULL,反之,返回A NULLIF(10,20)
SESSION_USER() 同 USER() SESSION_USER()
SYSTEM_USER() 同 USER() SYSTEM_USER()
VERSION() 返回当前 MySQL 数据库版本 VERSION()

View 语令

在 SQL 中,视图是基于 SQL 语句结果集的虚拟表。

视图包含行和列,就像真实的表一样,视图中的字段是来自数据库中一个或多个真实表的字段。

可以将 SQL 语句和函数添加到视图并呈现数据,就好像数据来自一个表一样。

创建用 CREATE VIEW

CREATE VIEW Stock AS
SELECT PriceDay, Country
FROM StockStatus
WHERE Country = 'USA';

更新用 CREATE OR REPLACE VIEW

CREATE OR REPLACE VIEW Stock AS
SELECT PriceDay, Country
FROM StockStatus
WHERE Country = 'USA';

删除用 DROP VIEW

DROP VIEW Stock;

正文完
 0
评论(没有评论)