AI智能
改变未来

MySQL(四)DQL


DQL:查询表中的记录

select * from 表名;

一、语法

select字段列表from表名列表where条件列表group by分组字段having分组之后的条件order by排序limit分页限定

二、基础查询

1、多个字段的查询

select 字段名1,字段名2,字段名3,...from 表名;

注意:如果查询所有字段,可以用*表示。

select address from student;

2、去除重复

distinct

select distinct address from student

两条记录的话,要保证全部一样才会去重复

3、计算列

select name,math,english,math+english from student;//会新建一个叫math+english的列
//如果有null参与的计算,结果都是为nullselect name,math,english,math+ifnull(english,0) from student;//加了lfnull的意思,当english为null时,当成0来算

一般可以用四则运算计算一些列的值。(一般只进行数据列的计算)
ifnull(表达式1,表达式2):null参与的计算,计算结果都为null

4、起别名

select name,math,english,math+ifnull(english,0) as 总分 from student;select name,math,english,math+ifnull(english,0)  总分 from student;//可以不写,用空格就好

as:也可以省略

三、条件查询

where子句后跟条件

select * from student;-- 年龄大于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 between 20 and 30;--查询年龄为18,20,50岁的select * from student where age=18 or age=20 or age=50;select * from student where age in (18,20,50);--查询英语成绩为null的select * from student where age is null;--查询英语成绩不为null的select * from student where age is not null;

like模糊查询:

--查询姓马的人select * from student where name like \'马%\';--查询姓第二个字是化的人select * from student where name like \'_化%\';--查询姓名是三个字的人select * from student where name like \'___\';--三个下划线_--查询包含了马的人select * from student where name like \'%马% \';

‘_’:单个字符
‘%’:多个字符

四、排序查询

语法:order by 排序字段1 排序方法1, 排序字段2 排序方法2,...

排序方法:
ASC:升序,默认的。
DESC:降序。

select * from student order by math DESC;select * from student order by math ASC;--按照数学成绩排序,如果一样,按照英语成绩排序select * from student order by math ASC, english ASC;

注意:当多个条件时,只有第一个条件生效,才会进行第二个条件排序。

五、聚合函数

将一列数据当做一个整体,进行纵向计算。
1、count:计算个数(一般选择主键)
2、max:计算最大值
3、min:计算最小值
4、sun:计算和
5、avg:计算平均值

select count(ifnull(english,0) from student ;select count(id) from student;select max(math) from student;select min(math) from student;

注意:
聚合函数的计算,排除null值,选择主线,非空列,或者用ifnull解决。

六、分组查询

语法:group by 分组字段
--按性别分组,求男女的平均分select sex avg(math) from student group by sex;--按性别分组,求男女的平均分,人数select sex avg(math),count(id) from student group by sex;--按性别分组,求男女的平均分,人数,分数低于70的不参与分组select sex avg(math),count(id) from student where math>70 group by sex;--按性别分组,求男女的平均分,人数,分数低于70的不参与分组,分组后人数要大于2个人select sex avg(math),count(id) from student where math>70 group by sex having count(id)>2;

注意:

1、分组之后查询的字段:分组字段,聚合字段。
2、where和having的区别:
where:
在分组之前进行限定,如果不满足条件,则不参与分组。
having:
在分组之后进行限定,如果不满足结果,则不会被查询出来。
3、where不可以跟聚合函数的判断,having可以。

七、分页查询

语法:limit 开始的索引,每条的页数;
select * from student limit 0,3;--从0开始查,查三条记录--第一页select * from student limit 3,3;--从3开始,查三条记录--第二页

公式:开始的索引=(当前的页码数-1)*每页显示的条数
分页操作是一个方言。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » MySQL(四)DQL