【MySQL】007-记录的查询

时间:2023-02-22 15:56:39
一、基础查询

1、多个字段的查询

select 字段1,字段2...字段n from 表名;
-- 如果要查询所有字段,可以用*代替

 

2、去除重复

select distinct 字段1 from 表名;
-- 完全一样的查询结果才能去重

 

3、计算列

select distinct 字段1,字段2,字段3 字段1+字段2+字段3 from 表名;
-- 计算字段1、2、3之和
-- 如果null参与的计算,结果都是null,若为null,则为0可以这样写:
select distinct 字段1,字段2,字段3 字段1+字段2+ifnull(字段3,0) from 表名;

 

4、起别名

select distinct 字段1,字段2,字段3 字段1+字段2+ifnull(字段3,0) as 别名 from 表名;
-- as可以省略,空格必须有

 

二、条件查询

1、where子句后跟条件;

2、运算符

>、<、<=、>=、=、<>

BETWEEN...AND

IN(集合)

LIKE

IS NULL

and 或 &&

or 或者 ||

not 或者 !

实例:

-- 查询年龄大于等于20的学生
SELECT * FROM student WHERE age >= 20;
-- 查询年龄等于20的学生
SELECT * FROM student WHERE age = 20;
-- 查询年龄不等于20的学生
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
-- 查询大于等于20小于等于30的学生
SELECT * FROM student WHERE age >= 20 && age <= 30;-- 不推荐这么写
SELECT * FROM student WHERE age >= 20 AND age <= 30;-- 推荐这么写
SELECT * FROM student WHERE age BETWEEN 20 AND 30;-- 这么写也行
-- 查询年龄等于20,23,25岁的学生
SELECT * FROM student WHERE age =20 OR age = 23 OR age = 25;
SELECT * FROM student WHERE age IN (20,23,25);
-- 查询英语成绩为null的学生
SELECT * FROM student WHERE english = NULL; -- 错误写法
SELECT * FROM student WHERE english IS NULL; -- 正确写法
-- 查询英语成绩不为null的学生
SELECT * FROM student WHERE english IS NOT NULL; 

 

三、模糊查询

LIKE-模糊查询

占位符:

_:单个任意字符;

%:多个任意字符;

例如:

-- 查询姓马的同学
SELECT * FROM student WHERE name LIKE '马%';
-- 查询姓名中第二个字是‘化’的同学
SELECT * FROM student WHERE name LIKE '_化%';
-- 查询姓名中包含‘马’的人
SELECT * FROM student WHERE name LIKE '%马%';-- 用得多

 

四、排序查询

1、语法

order by 子句;
-- 例如
order by 排序字段1 排序方式1,排序字段2 排序方式2...

2、排序方式

升序(ASC):默认;

降序(DESC);

-- 数学成绩按照降序排序
SELECT * FROM student ORDER BY math DESC;
-- 按照数学成绩排序,如果数学成绩是一样的,按照英语成绩排序
SELECT * FROM student ORDER BY math ASC,english ASC;

注意:多个排序条件,当前面的条件查询到的结果一样的时候,才会去执行后面的条件;

 

五、聚合函数

将一列数据作为一个整体,进行纵向计算;

1、count:计算数量

2、max:计算最大值

3、min:计算最小值

4、sum:求和

5、avg:计算平均值

示例:

-- 计算数学成绩最大值
SELECT MAX(math) FROM student;

 

六、分组查询

1、语法

GROUP BY 分组字段;

 

2、示例

-- 按照性别分组,分别计算男女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;

-- 按照性别分组,分别计算男女同学的平均分,但要求大于70分的才参与分组
SELECT sex , AVG(math) FROM student WHERE age > 70 GROUP BY sex;

-- 按照性别分组,分别计算男女同学的平均分,但要求大于70分的才参与分组,分组之后人数要大于2人
SELECT sex, AVG(math), COUNT(id) FROM student WHERE age > 70 GROUP BY sex HAVING COUNT(id) > 2 ;
SELECT sex, AVG(math), COUNT(id) AS 人数 FROM student WHERE age > 70 GROUP BY sex HAVING 人数 > 2 ;

 

3、注意

分组之后查询的字段:分组字段、聚合函数;

where和having的区别:

where在分组之前进行限定,若不满足条件,则不参与分组;

having在分组之后进行限定,若不满足条件,则不会被查询出来;

where后不可以跟聚合函数,having后可以进行聚合函数的判断;

 

七、分页查询

1、语法

limit 开始的索引,每页查询的条数;

 

2、示例

-- 每页查3条数据
SELECT * FROM student LIMIT 0,3 -- 第一页

SELECT * FROM student LIMIT 3,3 -- 第二页

-- 公式:开始的索引= (当前的页码 - 1) * 每页显示的条数;

 

3、公式

公式:开始的索引= (当前的页码 - 1) * 每页显示的条数;

 

4、limit分页操作是MySQL的一个“方言”,不同数据库实现分页的方式不一样;