主要是针对一张表的数据查询操作,以下是单表查询中的各种查询方式的总结:
通过WHERE子句来对数据进行过滤,以获得过滤后的数据
SELECT 列名1,列名2,...,列名n FROM 表名 WHERE 查询条件IN关键字用于查询满足指定范围内的条件的记录,在使用时,将检索条件用括号括起来,多个检索条件之间用逗号分隔,当满足其中一个条件即可以匹配到。
SELECT * FROM 表名 WHERE 列名 IN (n1,n2,n3,...); //条件范围内 SELECT * FROM 表名 WHERE 列名 NOT IN (n1,n2,n3,...); //条件范围外用于查询某个范围内的值,满足字段值指定的范围查询条件,即被返回。
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’%’:匹配任意长度的字符,包括零字符
‘_’:匹配任意一个字符,需要匹配多个则是使用多个’_’
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的记录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在分组之前用来选择记录,且排除的记录不包括在分组中返回某列的行数
SELECT COUNT(*) FROM 表名; //计算表中的总行数,无论有数值还是为空值 SELECT COUNT(字段名) FROM 表名; //计算指定列名下总行数,忽略为空值的行返回某个值的和,忽略值为NULL的行
SELECT SUM(字段名) FROM 表名;返回某列的平均值,如果要得到多个列的平均值,则需每一列都使用AVG()函数
SELECT AVG(字段名1),AVG(字段名2),...,AVG(字段名N) FROM 表名;返回某列的最大值
SELECT MAX(字段名) FROM 表名;返回某列的最小值
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—— 内连接、左连接、右连接以及全连接查询
《MySQL5.7从入门到精通》