系列文章目录
文章目录
MySQL查询子句
1. WHERE过滤
-
作用:
通过限制一些条件,过滤出符合条件的数据。
-
语法:
SELECT或UPDATE或DELETE 字段名…… FROM 表名 WHERE 条件;
比如:查询学生的姓名和年龄,条件是年龄大于18岁且性别为男:
SELECT name,age FROM students WHERE age>18 AND gender='male';
除了AND、>、=外,操作符还有以下这些:
操作符 意义 >、<、=、<=、>= 就是符号本身的意义 <>或!= 不等于 AND 并且 OR 或者 NOT 不 x BETWEEN a AND b x在a到b这个范围中 x IN(a,b,c……) x在(a,b,c……)中 x NOT IN(a,b,c……) x不在(a,b,c……)中 x IS NULL x是空的
2. LIKE模糊查询
-
作用:
使用WHERE过滤查询时,搜索匹配表达式的指定内容SELECT 字段名,…… FROM 表名 WHERE 字段 LIKE 表达式;
比如:查询名字中带字母h的学生记录:
SELECT * FROM students WHERE name LIKE "%h%";
%
用来匹配多个任意字符;_
用来匹配单个任意字符。 -
计算字段长度:
CHAR_LENGTH(字段名)
3. GROUP BY分组
-
作用:
根据一个或多个列对结果集进行分组,分组之后,操作的最小单位是组,而不是记录。在严格模式下,尝试操作单个记录会直接报错。在关闭严格模式后,就可以进行单个记录的操作,但是不应该这样做。
-
语法:
分组依据通常是一个字段,比如性别,这会使数据分为两组(男生组、女生组)。
SELECT 分组依据 FROM 表名 GROUP BY 分组依据;
查询的字段只能是分组依据!乍一看,这个分组语句很没用,只能查询出分组依据字段。但其实,它更多的是配合聚合函数一起使用。
比如,查询男生和女生中,各自年龄最大的一个。
SELECT gender,MAX(age) FROM students GROUP BY gender;
返回:
gender MAX(age) male 19 female 18 上面结果中,显示
MAX(age)
不够雅观。可以使用AS
关键字来给字段取别名:SELECT gender AS "性别", MAX(age) AS "最大年龄"FROM students GROUP BY gender;
返回结果:
性别 最大年龄 male 19 female 18 AS
关键字还可以给表起别名。当然,这些别名都是临时有效。AS
关键字可以省略,然后直接写别名,但是不推荐这种写法。 -
聚合函数:
聚合函数只能在分组之后使用。
函数名 作用 AVG() 求平均值 MAX() 求最大值 MIN() 求最小值 SUM() 求和 COUNT() 求行数(记录数),不包括NULL值 -
GROUP_CONCAT()函数:
该函数将分组中的字符串与各种选项进行拼接。
使用该函数可以在分组中查询任意字段,包括分组依据字段以外的字段:
SELECT GROUP_CONCAT(name),gender FROM students GROUP BY gender;
还可以连接字符串和数据,比如将两个原本分开的字段,拼接在一起返回,比如:以
姓名:性别
的形式显示结果:SELECT GROUP_CONCAT(name,":", gender) FROM students GROUP BY gender;
返回结果:
GROUP_CONCAT(name,":", gender) hugh:male,tom:male lucy:female GROUP_CONCAT()是给分组用的,类似的有一个CONCAT()是给未分组的使用,作用相同。
-
注意:
不能在WHERE的过滤条件中,使用聚合函数:
WHERE MAX(AGE)=19
在不分组的情况下,默认整张表是一组,可以直接使用聚合函数。
4. HAVING过滤
- 作用:
HAVING的语法和作用与WHERE是一致的,不同之处在于:前者是对分组(即分组之后)的过滤,后者是对记录(即分组之前)的过滤。因此,HAVING可以使用聚合函数。SELECT 字段,…… FROM 表名 GROUP BY …… HAVING 条件;
5. DISTINCT去重
-
作用:
针对查询字段中重复的值,只返回一次,包括NULL值。如果是多个字段,只要字段的组合不是一模一样的,还是会返回。SELECT DISTINCT 字段,…… FORM 表名;
6. ORDER BY排序
-
作用:
将查询到的结果,进行排序。SELECT 字段,…… FORM 表名 ORDER BY 排序依据 DESC;
默认为升序
ASC
,可以不写,降序写DESC
。排序依据可以是一个或多个字段,当无法用前一个字段比较出顺序时,就使用后一个字段进行比较。
7. LIMIT分页
-
作用:
限制每次查询时返回的记录数量。
SELECT 字段,…… FORM 表名 LIMIT 起始位置,条数;
不写起始位置,默认从第一条开始。
8. 正则
MySQL支持正则表达式,语法如下:
SELECT 字段,…… FORM 表名 WHERE 字段 REGEXP "正则表达式";