运算符
算术运算符
运算符 | 作用 |
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算,返回商 |
% | 求余运算,返回余数 |
比较运算符
运算符 | 作用 |
= | 等于 |
<=> | 安全的等于 |
<>(!=) | 不等于 |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
< | 小于 |
IS NULL | 判断一个值是否为NULL |
IS NOT NULL | 判断一个值是否不为NULL |
LEAST | 当有两个或多个参数时,返回最小值 |
GREATEST | 当有两个或多个参数时,返回最大值 |
BETWEEN AND | 判断一个值是否落在两个值之间 |
ISNULL | 与IS NULL作用相同 |
IN | 判断一个值是IN列表中的任意一个值 |
NOT IN | 判断一个值不是IN列表中的任意一个值 |
LIKE | 通配符匹配 |
REGEXP | 正则表达式匹配 |
逻辑运算符
运算符 | 作用 |
NOT 或者 ! | 逻辑非 |
AND 或者 && | 逻辑与 |
OR 或者 || | 逻辑或 |
XOR | 逻辑异或 |
位运算符
运算符 | 作用 |
| | 位或 |
& | 位与 |
^ | 位异或 |
<< | 位左移 |
>> | 位右移 |
~ | 位取反,反转所有比特 |
运算符的优先级
优先级 | 运算符 |
最低 | =(赋值运算)、:= |
||、OR | |
XOR | |
&&、AND | |
NOT | |
BETWEEN、CASE、WHEN、THEN、ELSE | |
=(比较运算)、<=>、>=、>、<=、<>、!=、IS、LIKE、REGEXP、IN | |
| | |
& | |
<<、>> | |
-、+ | |
*、/(DIV)、%(MOD) | |
^ | |
-(负号)、~(位反转) | |
最高 | ! |
数据查询
MySQL从数据表中查询数据的基本语句位SELECT语句。基本格式为:
SELECT
字段名1,字段名2,...,字段名n
FROM 表名...
WHERE 查询条件
GROUP BY 分组条件
HAVING 组条件
ORDER BY 字段名
LIMIT 数据条数
单表查询
查询所有字段
SELECT * FROM 表名;
查询指定字段
SELECT 字段名1,字段名2,...,字段名n FROM 表名;
条件查询
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 查询条件;
WHERE条件判断符
操作符 | 说明 |
= | 相等 |
<>、!= | 不相等 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 位于两值之间 |
带IN关键字的查询
字段i的值在{值1,值2,…,值n}范围内
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i IN (值1,值2,...,值n)
同样,字段不在该范围内
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i NOT IN (值1,值2,...,值n)
带BETWEEN AND的范围查询
在某个范围内
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i BETWEEN 值1 AND 值2;
不在某个范围内
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i NOT BETWEEN 值1 AND 值2;
带LIKE的字符匹配查询
百分号通配符"%"用来匹配任意长度的字符
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i LIKE '%匹配值%';
%放在匹配值前后皆可,分别表示前面模糊匹配及后面模糊匹配
下划线通配符"_"一次只能匹配任意一个字符
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i LIKE '_匹配值_';
_放在需要匹配单个字符的位置
查询空值
查询为空记录
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i IS NULL;
查询不为空记录
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i IS NOT NULL;
带AND的多条件查询
在WHERE子句中使用AND操作限定符,各条件在同时成立时返回记录
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i 条件1 AND 条件2 ... AND 条件n;
带OR的多条件查询
在WHERE子句中使用OR操作限定符,各条件有一条满足时返回记录
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
WHERE 字段名i 条件1 OR 条件2 ... OR 条件n;
查询结果去重
SELECT DISTINCT 字段名 FROM 表名;
对查询结果排序
默认为升序
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
ORDER BY 字段名i,字段名j,...,字段名z;
降序在需排序字段后加DESC
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
ORDER BY 字段名i,字段名j,...,字段名z DESC;
分组查询
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
GROUP BY 字段名i,字段名j,...
HAVING 组查询条件
使用LIMIT限制查询结果的数量
SELECT 字段名1,字段名2,...,字段名n
FROM 表名
LIMIT 位置偏移量,行数
聚合函数
聚合函数一般搭配分组查询进行,其输出结果往往类似于数据透视表
函数 | 作用 |
AVG() | 返回某列的平均值 |
COUNT() | 返回某列行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值的和 |
连接查询
INNER JOIN
使用比较运算符进行表间某些列的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录
SELECT 表1.字段名i,...,表1.字段名j,表2.字段名k,...表2.字段名s,...
FROM 表1 INNER JOIN 表2
ON 表1.m=表2.n
LEFT JOIN
返回包括左表中的所有记录和右表中连接字段相等的记录
SELECT 表1.字段名i,...,表1.字段名j,表2.字段名k,...表2.字段名s,...
FROM 表1 LEFT JOIN 表2
ON 表1.m=表2.n
RIGHT JOIN
返回包括右表中的所有记录和左表中连接字段相等的记录
SELECT 表1.字段名i,...,表1.字段名j,表2.字段名k,...表2.字段名s,...
FROM 表1 RIGHT JOIN 表2
ON 表1.m=表2.n
子查询
带ANY、SOME关键字的子查询
ANY关键字接在一个比较操作符的后面,表示若与子查询返回的任何值比较为TRUE,则返回TRUE
SELECT 字段名i,...,字段名j
FROM 表1
WHERE 列名k > ANY(SELECT 字段名m FROM 表2)
返回表1中比表2中任何一个值大的值
带ALL关键字的子查询
ALL关键字接在一个比较操作符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE
SELECT 字段名i,...,字段名j
FROM 表1
WHERE 列名k > ALL(SELECT 字段名m FROM 表2)
返回表1中比表2中所有值都大的值
带EXISTS关键字的子查询
EXISTS关键字后面的参数是一个任意子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为TRUE,此时外层查询语句进行查询;如果查询没有返回任何行,那么EXISTS返回结果是FALSE,此时外层语句将不进行查询。
SELECT 字段名i,...,字段名j
FROM 表名x
WHERE EXISTS (SELECT 字段名m FROM 表名y WHERE 查询条件)
带IN关键字的子查询
IN关键字进行子查询时,内层查询语句仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作
SELECT 字段名i,...,字段名j
FROM 表名x
WHERE IN (SELECT 字段名m FROM 表名y WHERE 查询条件)
相当于
SELECT 字段名i,...,字段名j
FROM 表名x
WHERE IN (符合查询条件的查询结果)
合并查询结果
利用UNION关键字可以给出多条SELECT语句的结果组合成单个结果集。UNION和UNION ALL最大的区别在于组合后UNION会删除重复数据
SELECT 字段名i,... FROM 表1
UNION ALL
SELECT 字段名j,... FROM 表2
或者
SELECT 字段名i,... FROM 表1
UNION
SELECT 字段名j,... FROM 表2
正则表达式查询
正则表达式通常被用来检索或替换那些符合某种模式的文本内容,根据指定的匹配模式匹配符合要求的字符串。
SELECT 字段名i,...
FROM 表名
WHERE 字段名k REGEXP '正则表达式';
正则表达式常用字符串匹配列表
选项 | 说明 | 例子 | 匹配值示例 |
^ | 匹配文本的开始字符 | '^b'匹配以字母b开头的字符串 | book、big、banana、bike |
$ | 匹配文本的结束字符 | 'st$'匹配以st结尾的字符串 | test、resist、persist |
. | 匹配任何单个字符 | 'b.t'匹配b和t之间有一个字符 | bit、bat、but、bite |
* | 匹配零个或多个在它前面的字符 | 'f*n'匹配字符n前面有任意个字符f | fn、fan、faan、fabcn |
+ | 匹配前面的字符1次或多次 | 'ba+'匹配以b开头后面紧跟至少一个a | ba、bay、bare、battle |
字符串 | 匹配包含指定的字符串的文本 | 'fa' | fan、afa、faad |
字符集合 | 匹配字符集合中的任何一个字符 | '[xz]'匹配x或者z | dizzy、zebra、x-ray、extra |
[^] | 匹配不在括号中的任何字符 | '[^abc]'匹配任何不包含a、b或c的字符串 | desk、fox、f8ke |
字符串{n,} | 匹配前面的字符串至少n次 | b{2}匹配2个或更多的b | bbb、bbbb、bbbbbbb |
字符串{n,m} | 匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数 | b{2,4}匹配最少2个,最多4个b | bb、bbb、bbbb |