MySQL-单表查询
Posted xiaochen2715
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-单表查询相关的知识,希望对你有一定的参考价值。
单表查询
简单查询
查询所有字段
SELECT * FROM 表名 ;
查询指定字段
SELECT 字段名1,字段名2,... FROM 表名 ;
按条件查询
带关系运算符的查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 关系表达式 ;
"等于 =" "不等于 !=或<>“ ”小于 <“ ”大于 >“ ”小于等于 <=” ”大于等于 >=“
带IN关键字的查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 字段名 [NOT] IN (元素1,元素2,...) ;
NOT是可选参数,表示查询不在IN关键字指定集合范围中的记录。
例如查询student表中id值为1,2,3的记录:select * from student where id in(1,2,3);
带BETWEEN AND关键字的查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 字段名 [NOT] BETWEEN 值1 AND 值2 ;
NOT是可选参数,表示查询不在在指定范围中的记录。
例如查询student表中id范围为【2,5】的name:select name from student where between 2 and 5;
空值查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 字段名 IS [NOT] NULL ;
NOT是可选参数,表示查询不是空值的记录。
例如查询student表中grade为空的学生姓名:select name from student where grade is NULL;
带DISTINCT关键字的查询(用于过滤重复记录)
SELECT DISTINCT 字段名 FROM 表名 ;
当DISTINCT后字段名有多个时,只有多个字段的值一起重复才被认为是重复记录。
带LIKE关键字的查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 字段名 [NOT] LIKE ‘匹配字符串‘ ;
NOT是可选参数,使用NOT表示查询与指定字符串不匹配的记录。
其中‘匹配字符串’指的是包含百分号(%)或者下划线( _ )的通配字符串:
百分号(%)通配符,匹配任意长度的字符串,包括空字符串。例如"c%"指的是以c开头的字符串,"%c"指的是以c结尾的字符串,"%c%"指的是包含c的字符串(包含开头和结尾)。select id,name from student where name like ‘%c%‘ ;
下划线( _ )通配符,一个下划线代表一个字符,例如"c_t"表示开头为c结尾为t长度为3的字符串;而且要注意空格,带有空格的“M_ _QL
”只能匹配到MY SQL,不能匹配到mysql。
特殊的:如果要匹配字符串中的%或_需要用转译字符“”,例如“%\%%”表示包含%的字符串。
带AND关键字的多条件查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 表达式1 AND 表达式2 [... AND 表达式n]
例如查询student表中id为1和2、name以c开头并且grade>50的记录:select * from student where id in(1,2) and name like ‘c%‘ and grade>50;
带OR关键字的多条件查询
SELECT *|(字段名1,字段名2,... )
FROM 表名
WHERE 表达式1 OR 表达式2 [... OR 表达式n]
满足其中一个表达式即可,例如查询student表中id<3或者sex为女的学生姓名:select name from student where id<1 or sex=‘女‘;
拓展:OR和AND关键字一起使用时,AND的优先级高于OR,一起使用时,先运算AND两边的条件表达式,再算OR条件两边的条件表达式。
高级查询
聚合函数
函数名称 | 作用 |
---|---|
COUNT( ) | 返回某列的行数 |
SUM( ) | 返回某列的和 |
AVG( ) | 返回某列的平均值 |
MAX( ) | 返回某列的最大值 |
MIN( ) | 返回某列的最小值 |
- COUNT( )函数:统计记录条数
SELECT COUNT( * ) FROM 表名 ;
- SUM( )函数:某个字段求和
SELECT SUM(字段名) FROM 表名 ;
- AVG( )函数:某个字段求平均值
SELECT AVG(字段名) FROM 表名 ;
- MAX( )函数:某个字段求最大值
SELECT MAX(字段名) FROM 表名 ;
- MIN( )函数:某个字段求最小值
SELECT MIN(字段名) FROM 表名 ;
对查询结果排序
SELECT *|字段名1,字段名2,...
FROM 表名
ORDER BY 字段名1 [ASC|DESC],字段名2 [ASC|DESC]... ;
ASC升序,DESC降序,rand()为随机排序,默认为升序。
例如查出student表所有记录并按照grade排序:select * from student order by grade;
当指定按照多个字段进行排序时,先对第一个字段排序,如果遇到字段值相同的再把这些按照下一个进行排序。
分组查询
使用GROUP BY按某个字段或者多个字段中的值进行分组,字段中值相同的为一组。
SELECT *|字段名1,字段名2,...
FROM 表名
GROUP BY 字段名1,字段名2,...[HAVING 条件表达式] ;
单独使用GROUP BY分组:
查询的是每个分组中的一条记录。
GROUP BY和聚合函数一起使用:
例如查询student表的count( * )和sex,按照sex进行分组查询,再计算每个分组中各有多少学生select count(*),sex from student group by sex;
结果为(其中1、5、3表示对应性别的个数)
+----------+------+
| count(*) | sex |
+----------+------+
| 1 | NULL |
| 5 | 女 |
| 3 | 男 |
+----------+------+
3 rows in set (0.00 sec)
GROUP BY和HAVING关键字一起使用
HAVING关键字和WHERE关键字作用相同,都用于设置条件表达式,对查询结果进行过滤,两者区别:HAVING关键字之后可以跟聚合函数,而WHERE关键字不能。
例如将student表按照sex字段进行分组查询,查出grade字段值之和大于200的分组:select sum(grade),sex from student group by sex having sum(grade)>200;
使用LIMIT限制查询结果的数量
该关键字可以指定查询结果从哪一条记录开始以及查询多少条信息。
SELECT 字段名1,字段名2,...
FROM 表名
LIMIT [OFFSET,] 记录数 ;
OFFSET为可选参数,表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,偏移量为1从里二条开始,以此类推。不指定时默认值为0。‘记录数’表示返回查询记录的条数。
例如查询student表中第2条到第5条的记录:select * from student limit 1,4;
以上是关于MySQL-单表查询的主要内容,如果未能解决你的问题,请参考以下文章