单表查询
主要是针对一张表的数据查询操作,以下是单表查询中的各种查询方式的总结:
查询所有字段
SELECT * FROM 表名;
查询指定字段
SELECT 列名1,列名2,...,列名n FROM 表名;
查询指定记录
通过WHERE
子句来对数据进行过滤,以获得过滤后的数据
SELECT 列名1,列名2,...,列名n FROM 表名 WHERE 查询条件
IN关键字
IN关键字用于查询满足指定范围内的条件的记录,在使用时,将检索条件用括号括起来,多个检索条件之间用逗号分隔,当满足其中一个条件即可以匹配到。
SELECT * FROM 表名 WHERE 列名 IN (n1,n2,n3,...); //条件范围内
SELECT * FROM 表名 WHERE 列名 NOT IN (n1,n2,n3,...); //条件范围外
BETWEEN AND范围查询
用于查询某个范围内的值,满足字段值指定的范围查询条件,即被返回。
SELECT * FROM 表名 WHERE 列名 BETWEEN min AND max; //条件范围内
SELECT * FROM 表名 WHERE 列名 NOT BETWEEN min AND max; //条件范围外
BETWEEN AND 和 IN 之间的区别:
- IN将括号内的数值当作数组处理,只要满足属性值等于括号内的数值之一,才会匹配到;
- BETWEEN AND指属性值在min和max之间,包括min和max
LIKE模糊查询
’%’:匹配任意长度的字符,包括零字符
‘_’:匹配任意一个字符,需要匹配多个则是使用多个’_’
SELECT * FROM 表名 WHERE 列名 LIKE '%xx'; //匹配以xx结尾的数据
SELECT * FROM 表名 WHERE 列名 LIKE '%xx%'; //匹配包含有xx的数据
SELECT * FROM 表名 WHERE 列名 LIKE 'xx%'; //匹配以xx开头的数据
SELECT * FROM 表名 WHERE 列名 LIKE '_xx'; //匹配xx结尾,且前面有一个字符的数据
SELECT * FROM 表名 WHERE 列名 LIKE '____xx'; //匹配xx结尾,且前面有四个字符的数据
空值查询
通过IS NULL子句,查询某字段内容为空的记录。
SELECT * FROM 表名 WHERE 字段名 IS NULL; //查询字段值为null的记录
SELECT * FROM 表名 WHERE 字段名 IS NOT NULL; //查询字段值不为null的记录
AND
SELECT * FROM 表名 WHERE 条件1 AND 条件2 AND ... AND 条件n;
OR
SELECT * FROM 表名 WHERE 条件1 OR 条件2 OR ... OR 条件n;
去重
SELECT DISTINCT 列名 FROM 表名;
排序
DESC排序方式只应用到直接位于其前面的字段上。
SELECT * FROM 表名 ORDER BY 字段1,字段2,...,字段n; //默认升序 ASC可以不写
SELECT * FROM 表名 ORDER BY 字段1,字段2,...,字段n DESC; //降序
分组
将数据按照某个或多个字段进行分组,使用GROUP BY关键字
SELECT * FROM 表名 [GROUP BY 字段名][HAVING <条件表达式>]; //HAVING用于过滤分组
HAVING 和 WHERE 的区别:
+ 都用于过滤数据
+ HAVING在分组之后进行过滤
+ WHERE在分组之前用来选择记录,且排除的记录不包括在分组中
LIMIT限制查询
SELECT * FROM 表名 LIMIT [位置偏移量],行数; //偏移量默认从0开始
聚合函数查询
COUNT()
返回某列的行数
SELECT COUNT(*) FROM 表名; //计算表中的总行数,无论有数值还是为空值
SELECT COUNT(字段名) FROM 表名; //计算指定列名下总行数,忽略为空值的行
SUM()
返回某个值的和,忽略值为NULL的行
SELECT SUM(字段名) FROM 表名;
AVG()
返回某列的平均值,如果要得到多个列的平均值,则需每一列都使用AVG()函数
SELECT AVG(字段名1),AVG(字段名2),...,AVG(字段名N) FROM 表名;
MAX()
返回某列的最大值
SELECT MAX(字段名) FROM 表名;
MIN()
返回某列的最小值
SELECT MIN(字段名) FROM 表名;
连接查询
内连接
把表当作是一个集合,内连接使用关键字 INNER JOIN ON来进行查询,返回的结果就是表的交集。
SELECT * FROM A INNER JOIN B ON A.字段名 = B.字段名;
外连接
左外连接
使用关键字 LEFT JOIN ON(或者 LEFT OUTER JOIN ON),返回的结果是A表的结果和AB的交集。
SELECT * FROM A LEFT JOIN ON A.字段名 = B.字段名;
右外连接
使用关键字 RIGHT JOIN ON(或者 RIGHT OUTER JOIN ON),返回的结果是 AB的交集和B表的结果。
SELECT * FROM A RIGHT JOIN B ON A.字段名 = B.字段名;
参考资料
Mysql—— 内连接、左连接、右连接以及全连接查询