定义
SQL 是用于访问和处理数据库的标准的计算机语言。
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
注:ANSI,美国国家标准化组织
RDBMS 指的是关系型数据库管理系统
- RDBMS 中的数据存储在被称为表(tables)的数据库对象中。
- 表是相关的数据项的集合,它由列和行组成。
分类
数据操作语言 (DML) 和 数据定义语言 (DDL)
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
数据操作语言 (DML)
查询和更新指令构成了 SQL 的 DML 部分:更多的是操作表里的数据
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
数据定义语言 (DDL)
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。更多的是操作数据库及表
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
SELECT 和 SELECT * 语句
SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。
# 语法 SELECT 列名称 FROM 表名称 SELECT * FROM 表名称
SELECT DISTINCT 语句
在表中,可能会包含重复值。该语句用于列出不同(distinct)的值。
关键词 DISTINCT 用于返回唯一不同的值。
# 语法 SELECT DISTINCT 列名称 FROM 表名称
WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
# 语法 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
操作符 描述 = 等于 <> 不等于 <=> = 或 != 只能判断基本数据类型
is 关键字只能判断null
<=> 既能判断null 又能判断 基本数据类型
> 大于 < 小于 >= 大于等于 <= 小于等于 BETWEEN 在某个范围内 LIKE 搜索某种模式
AND 和 OR 运算符
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
# 以字母顺序显示公司名称 SELECT Company, OrderNumber FROM Orders ORDER BY Company # 以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber) SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber # 以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber) SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber # 以逆字母顺序显示公司名称,并以数字顺序显示顺序号 SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
# 语法 INSERT INTO 表名称 VALUES (值1, 值2,....) INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing') 我们也可以指定所要插入数据的列 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
Update 语句
Update 语句用于修改表中的数据。
# 语法 UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
DELETE 语句
DELETE 语句用于删除表中的行。
# 语法 DELETE FROM 表名称 WHERE 列名称 = 值
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的
DELETE FROM table_name 或者: DELETE * FROM table_name
练习题目:196. 删除重复的电子邮箱
https://leetcode-cn.com/problems/delete-duplicate-emails/
TOP 子句
TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
# SQL Server 的语法 SELECT TOP number|percent column_name(s) FROM table_name SELECT TOP 2 * FROM Persons / SELECT TOP 50 PERCENT * FROM Persons # MySQL 语法 SELECT column_name(s) FROM table_name LIMIT number SELECT * FROM Persons LIMIT 5 # Oracle 语法 SELECT column_name(s) FROM table_name WHERE ROWNUM <= number SELECT * FROM Persons WHERE ROWNUM <= 5
LIMIT数据分页
#提取n条数据 limit n #跳过m跳数据,提取n条数据 limit m,n
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
# 语法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern SELECT * FROM Persons WHERE City LIKE 'N%' SELECT * FROM Persons WHERE City LIKE '%g' SELECT * FROM Persons WHERE City NOT LIKE '%lon%' # NOT 关键字 不包含 SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
提示:"%" 可用于定义通配符(模式中缺少的字母)。
通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
通配符 描述 % 代表零个或多个字符 _ 仅替代一个字符 [charlist] 字符列中的任何单一字符 [^charlist]
或者
[!charlist]
不在字符列中的任何单一字符 # 使用 _ 通配符 仅替代一个字符 SELECT * FROM Persons WHERE FirstName LIKE '_eorge' # 使用 [charlist] 通配符 字符列中的任何单一字符 SELECT * FROM Persons WHERE City LIKE '[ALN]%' -- 包含 SELECT * FROM Persons WHERE City LIKE '[!ALN]%' --不包含
IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
# 语法 SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...) SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
not in 与 null之间的关系
#判断id为根节点 满足p_id为null ,且在p_id中 #判断id为内部节点 满足id ,p_id中都有值 #判断id为叶子节点 满足p_id有值 ,p_id为null select id ,case when p_id is null then 'Root' when id not in (select p_id from tree) then 'Leaf' else 'Inner' end as type # 报错 判断都为Inner from tree
A not in B
的原理是拿A
表值与B
表值做是否不等的比较, 也就是a != b
. 在sql中,null
是缺失未知值而不是空值(详情请见MySQL reference).当你判断任意值
a != null
时, 官方说, "You cannot use arithmetic comparison operators such as =, <, or <> to test for NULL", 任何与null
值的对比都将返回null
. 因此返回结果为否,这点可以用代码select if(1 = null, 'true', 'false')
证实.练习题目:
BETWEEN 操作符
操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。
这些值可以是数值、文本或者日期
# 语法 SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter' SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter' -- 不在该范围内
重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!(左闭右开or全开or左开右闭or全闭)
Alias(别名)
通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
# 表的 SQL Alias 语法 SELECT column_name(s) FROM table_name AS alias_name SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Product_Orders WHERE Persons.LastName='Adams' AND Persons.FirstName='John' SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John' # 列的 SQL Alias 语法 SELECT column_name AS alias_name FROM table_name SELECT LastName AS Family, FirstName AS Name FROM Persons
JOIN
join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
"Persons" 表:
Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing "Orders" 表:
Id_O OrderNo Id_P 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 65 JOIN
如果表中有至少一个匹配,则返回行
INNER JOIN 内连接
在表中存在至少一个匹配时,则返回行。INNER JOIN 与 JOIN 是相同的。
#语法 SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P #可以使用join优化 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
LEFT JOIN / LEFT OUTER JOIN 左连接
即使右表中没有匹配,也从左表返回所有的行
# 语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
RIGHT JOIN / RIGHT OUTER JOIN 右连接
即使左表中没有匹配,也从右表返回所有的行
# 语法 SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
FULL JOIN / FULL OUTER JOIN 全连接
只要其中一个表中存在匹配,就返回行
# 语法 SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
UNION 操作符默认选取不同的值。如果允许重复的值,请使用 UNION ALL。
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
Employees_China:
E_ID E_Name 01 Zhang, Hua 02 Wang, Wei 03 Carter, Thomas 04 Yang, Ming Employees_USA:
行转列用groupby+sumif列转行用union all 1795. 每个产品在不同商店的价格
E_ID E_Name 01 Adams, John 02 Bush, George 03 Carter, Thomas 04 Gates, Bill https://leetcode.cn/problems/rearrange-products-table/
# UNION 语法 SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA -- UNION 命令只会选取不同的值 # UNION ALL 语法 SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 SELECT E_Name FROM Employees_China UNION ALL SELECT E_Name FROM Employees_USA -- UNION ALL 命令会列出所有的值
——函数——
IFNULL()函数
IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是
NULL
,则返回第一个参数。 否则,IFNULL
函数返回第二个参数。两个参数可以是文字值或表达式
# 语法 如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。 # IFNULL函数根据使用的上下文返回字符串或数字。 IFNULL(expression_1,expression_2);
请注意,应避免在WHERE子句中使用
IFNULL
函数,因为它会降低查询的性能。如果要检查值是否为
NULL
,则可以在WHERE
子句中使用IS NULL
或IS NOT NULL
。
COALESCE函数
返回从左至右第一个非空表达式的值。
COALESCE(expr1, expr2, ...., expr_n) select coalesce(null,null,"1"); -- 返回结果 1
COALESCE和IFNULL函数的区别
当只有2个表达式的时候,两者的用法可以互换 ;
当有多个参数判断是否null时,只能使用COALESCE。
NULLIF函数
NULLIF(expr1,expr2)
如果expr1不等于epxr2.那么返回expr1,如果相等就返回null;
left()函数、right()函数
LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)
LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING
eg: SELECT LEFT(NAME,2),RIGHT(NAME,2) FROM T1
//返回结果为 'NA' 、'ME' *从字符串左边开始截取长度为2的字符串 从字符串右边开始截取长度为2的字符串
substring()和substr()函数
用途 : 截取字符串
相同点:如果只是写一个参数,两者的作用都一样:都是是截取字符串从当前下标以后直到字符串最后的字符串片段。
var str = '123456789'; console.log(str.substr(2)); // "3456789" console.log(str.substring(2)) ;// "3456789"
不同点:第二个参数
substr(字符串,截取开始位置,截取长度) //返回截取的字
substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串
substr('Hello World',1,1) //返回结果为 'H' *0和1都是表示截取的开始位置为第一个字符
substr('Hello World',2,4) //返回结果为 'ello'
substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符substr(startIndex,lenth): 第二个参数是截取字符串的长度(从起始点截取某个长度的字符串);
substring(startIndex, endIndex): 第二个参数是截取字符串最终的下标 (截取2个位置之间的字符串,‘含头不含尾’)。
console.log("123456789".substr(2,5)); // "34567" console.log("123456789".substring(2,5)) ;// "345" var a="abcdefghiklmnopqrstuvwxyz"; var b=a.substr(3,5); var c=a.substring(3,5); 打印输出的结果是: defgh de 截取的时候是不会截取到最后一个[3,5)
练习题目:
1667. 修复表中的名字
https://leetcode-cn.com/problems/fix-names-in-a-table/
Split()函数用途 : 截取字符串
格式:字段.split(字段名,'分隔字符',取出的第几个字符串)
如果没有分隔的字符,则返回整个字符串。例 : ${cdxd_refund_management.CREATED_DEPT_IDS.split(',')[0]}
其中CREATED_DEPT_IDS的值为:{98780318030426894,98780318030426686,25140425559900225}
以逗号为分割点,截取经办人公司下标为 0 的 经办人公司编码 98780318030426894
SUBSTRING_INDEX(str,delim,count)函数
在定界符 delim 以及count 出现前,从str返回自字符串。
若count为正值,则返回最终定界符(从左边开始) 不包含count
若count为-1,则是从后往前截取 不包含第一个
# 语法 SUBSTRING_INDEX(str,delim,count)
MySQL中没有split()函数功能
CASE WHEN 及 SELECT CASE WHEN函数
简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
trim()函数
作用 : 去掉首尾空格
CONCAT拼接函数
作用 : 用于将两个字符串连接起来,形成一个单一的字符串。
replace()替换函数
REPLACE(String,from_str,to_str)
即:将String中所有出现的from_str替换为to_str。
也可以用于去掉不需要的字符
# 语法 REPLACE ( string_expression , string_pattern , string_replacement )
round()函数
作用 : 用于数据的四舍五入
#这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0; round(x,d) -- #x指要处理的数,d是指保留几位小数 round(x) -- 其实就是round(x,0),也就是默认d为0;
SUM()函数
作用 : 用于计算一组值或表达式的总和
SUM(DISTINCT expression)
- 如果在没有返回匹配行SELECT语句中使用
SUM
函数,则SUM
函数返回NULL
,而不是0
。DISTINCT
运算符允许计算集合中的不同值。SUM
函数忽略计算中的NULL
值。
rank ()开窗函数
-- <窗口函数> OVER ( [PARTITION BY <列清单> ] -- ORDER BY <排序用列清单> ) #其中[ ]中的内容可以忽略 select emp_no, salary,dense_rank() over (order by salary desc) as rank from salaries where to_date='9999-01-01' order by rank asc,emp_no asc;
RANK()
在计算排序时,若存在相同位次,会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,4······
DENSE_RANK()
这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,2······
ROW_NUMBER()
这个函数赋予唯一的连续位次。
例如,有3条排在第1位时,排序为:1,2,3,4······
format()千分位函数
FORMAT 函数用于对字段的显示进行格式化
SELECT FORMAT(column_name,format) FROM table_name select format(123456789,0) -- format(字段,保留小数点位数)
MOD()函数
用途:对数据进行取余
举例: mod(id, 2)=1 求是奇数的数
STRCMP(x,y) 字符串对比函数
STRCMP结果=0 表示相等
char(x)函数
x 实际上是ASCII表中的十进制
ASCII码表
练习题目 : 627. 变更性别
ASCII值
控制字符
ASCII值
控制字符
ASCII值
控制字符
ASCII值
控制字符
0
NUL
32
(space)
64
@
96
、
1
SOH
33
!
65
A
97
a
2
STX
34
”
66
B
98
b
3
ETX
35
#
67
C
99
c
4
EOT
36
$
68
D
100
d
5
ENQ
37
%
69
E
101
e
6
ACK
38
&
70
F
102
f
7
BEL
39
'
71
G
103
g
8
BS
40
(
72
H
104
h
9
HT
41
)
73
I
105
i
10
LF
42
*
74
J
106
j
11
VT
43
+
75
K
107
k
12
FF
44
,
76
L
108
l
13
CR
45
-
77
M
109
m
14
SO
46
.
78
N
110
n
15
SI
47
/
79
O
111
o
16
DLE
48
0
80
P
112
p
17
DCI
49
1
81
Q
113
q
18
DC2
50
2
82
R
114
r
19
DC3
51
3
83
X
115
s
20
DC4
52
4
84
T
116
t
21
NAK
53
5
85
U
117
u
22
SYN
54
6
86
V
118
v
23
TB
55
7
87
W
119
w
24
CAN
56
8
88
X
120
x
25
EM
57
9
89
Y
121
y
26
SUB
58
:
90
Z
122
z
27
ESC
59
;
91
[
123
{
28
FS
60
<
92
\
124
|
29
GS
61
=
93
]
125
}
30
RS
62
>
94
^
126
~
31
US
63
?
95
—
127
DEL
https://leetcode-cn.com/problems/swap-salary/
大小写转换函数
SQL UPPER()函数
SQL upper()函数字母大小写转换函数,将字母转成大写 - 返回字符串str,根据当前字符集映射的所有字符更改为大写。
SQL LOWER()函数
SQL lower()字母大小写转换函数,将字母转成小写 - 返回根据当前字符集映射所有字符改变为小写,即返回小写的字符串。SQL UCASE() 函数
UCASE() 函数把字段的值转换为大写。SELECT UCASE(column_name) FROM table_name;
SQL LCASE() 函数
LCASE() 函数把字段的值转换为小写SELECT LCASE(column_name) FROM table_name;
TRIM()函数
用于去除字符串左右两边的空格(字符串字之间的空格不能去除)
group_concat函数
格式 : group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
mysql中 all & any 的用法
any,all关键字必须与一个比较操作符一起使用。
any关键词可以理解为“对于子查询返回的列中的任一数值,如果比较结果为true,则返回true”。
all的意思是“对于子查询返回的列中的所有值,如果比较结果为true,则返回true”
any 可以与=、>、>=、结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据。
all可以与=、>、>=、结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。mysql里all什么意思_mysql中all的用法是什么_落地后的阿飞们的博客-CSDN博客mysql中all的用法:1、all是“对于子查询返回的列中的所有值,如果比较结果为true,则返回true”;2、all可以与【=、>、>=、】结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于。mysql中all的用法:最近一直在练习MYSQL的多表查询,基本上每个查询语句我都会写至少两次:一次join连接,一次子查询。来对比一下MYSQL在不同的查询方式下的工作方...
https://blog.csdn.net/weixin_29822105/article/details/113956981
日期函数MySQL 时间函数加减计算_云中鲸的博客-CSDN博客_mysql 时间计算一、MySQL 获得当前日期时间 函数1.1 获得当前日期 + 时间(date + time)1.2 获得当前日期 + 时间(date + time)1.3 获得当前日期(date)1.4 获得当前时间(time)1.5 获得当前 UTC 日期时间二、MySQL 日期时间 Extract(选取) 函数2.1 选取日期时间的各个部分:2.2 MySQL Extract() ...
https://blog.csdn.net/qq_38486203/article/details/80654040
DATEDIFF()函数
DATEDIFF() 函数返回两个日期之间的天数,通俗的讲就是计算时间差。
#语法格式 DATEDIFF(date1,date2)
得到的结果为 date1 与 date2 相差天数,如果 date1 比 date2 大,则结果为正,反之则为负。
练习题目:
JSON_EXTRACT() 函数
MySQL
JSON_EXTRACT()
函数在 JSON 文档提取路径表达式指定的数据并返回。格式 :JSON_EXTRACT(json, path, ...)
JSON_EXTRACT()
函数将在以下情况下返回错误:Invalid JSON text in argument 1 to function json_extract: "The document is empty." at position 0
- 如果参数
json
不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用JSON_VALID() 验证 JSON 文档的有效性。- 如果参数
path
不是有效的路径表达式, MySQL 将会给出错误。
JSON_VALID() 函数
MySQL
JSON_VALID()
函数返回 0 和 1 来指示给定的参数是否是一个有效的 JSON 文档。格式 :JSON_VALID(str)
返回值
JSON_VALID()
函数验证给定的参数是否是一个有效的 JSON 文档。如果给定的参数是有效的 JSON 文档,JSON_VALID()
函数返回1
,如果不是 JSON 文档,JSON_VALID()
函数返回0
。如果参数为
NULL
,此函数将返回NULL
。MySQL JSON_VALID() 函数
https://www.sjkjc.com/mysql-ref/json_valid/
JSON_UNQUOTE() 函数
MySQL
JSON_UNQUOTE()
函数取消双引号引用 JSON 值,并将结果作为字符串返回。格式 :JSON_UNQUOTE(json_val)
参数
json_val
必需的。一个字符串。
返回值
JSON_UNQUOTE()
函数取消双引号引用 JSON 值,并将结果作为字符串返回。如果参数为
NULL
,JSON_UNQUOTE()
函数返回NULL
。如果值以双引号开头和结尾,但不是有效的 JSON 字符串文本,MySQL 将返回类似的错误:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: xxx.
。MySQL 能够识别下表中的转义字符:
MySQL JSON_UNQUOTE() 函数
转义序列 序列表示的字符 \"
双引号 "
\b
退格字符 \f
换页符 \n
换行符 \r
回车符 \t
制表符 \\
反斜杠 \
\uXXXX
Unicode 值 XXXX
的 UTF-8 字节https://www.sjkjc.com/mysql-ref/json_unquote/
数据类型
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
Text 类型:
数据类型 描述 CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。
注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT 存放最大长度为 255 个字符的字符串。 TEXT 存放最大长度为 65,535 个字符的字符串。 BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。 MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。 LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 ENUM(x,y,z,etc.) 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。
注释:这些值是按照你输入的顺序存储的。
可以按照此格式输入可能的值:ENUM('X','Y','Z')
SET 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 Number 类型:
数据类型 描述 TINYINT(size) -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 SMALLINT(size) -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 INT(size) -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。 * 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Date 类型:
数据类型 描述 DATE() 日期。格式:YYYY-MM-DD
注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME() *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 时间。格式:HH:MM:SS
注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR() 2 位或 4 位格式的年。
注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
重要事项
- 一定要记住,SQL 对大小写不敏感 !
- 分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。
条件值周围使用的是单引号。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。