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-单表查询的主要内容,如果未能解决你的问题,请参考以下文章

关于MySQL的关联查询

单表查询

MySQL之单表查询

MySQL之单表查询

mysql加强~单表查询mysql查询常用的函数

MySQL之单表查询