文章目录
一、基础查询
1、查询多列
select 列名1,列名2……列名n from 表名;
2、查询全表
select * from 表名;
3、去除重复记录
这里把重复的地址去掉
select distinct 列名 from 表名;
4、查询时修改表头
select 列名1 as 新列名1,列名2 as 新列名2……列名n as 新列名n from 表名;
其中as关键字可以不写。
二、条件查询
1、基础语法
select 列名 from 表名 where 条件;
2、几类条件
-
比较条件
包括:=, >, <, >=, <=, !=, <>(不等于), !>, !<;
下面完成几个需求实现查询:-- 比较条件 -- 查找总分大于80分的同学信息 select * from student where score > 80;
-- 查找不在上海住的同学信息
select * from student where adr <> '上海';
-
确定范围条件
包括:between and,not between and-- 查找id在5到10之间的同学信息 select * from student where id between 5 and 10;
-
确定集合条件
包括:in,not in-- 查询住在北京和上海的同学 select * from student where adr in ('北京','上海');
-
空值
包括:is null,not is null-- 查询成绩为空的同学信息 select * from student where score is null;
-
多重运算(逻辑运算)
包括:and,or,not-- 查询成绩大于80或者在北京并且id小于10同学 select * from student where score > 80 or adr in ('北京') and id < 10;
3、模糊查询(字符匹配)
_表示匹配单个任意字符
%表示匹配多个任意字符
-- 查询姓李的同学
select * from student where name like '李%';
-- 查询分数第二位为8的同学
select * from student where score like '_8';
-- 查询地址包含州或者包含上海的同学
select * from student where
adr like '%州%' or adr like '%上海%';
三、排序查询
1、排序查询语法
select 列名 from 表名 order by 排序列名1 排序方式……排序列表n 排序方式;
2、排序方式
asc:升序排列
desc:降序排列
如果多列排序,当前边值一样时才会进行后面的排序。
-- 将成绩降序排列
select * from student order by score desc;
-- 将姓名升序排列(好像是笔画)
select * from student order by name asc;
-- 先将成绩奖序排列,再按姓名升序排列
select * from student order by score desc,name asc;
四、聚合函数
1、聚合函数语法
聚合函数就是将一列作为整体纵向计算。
select 聚合函数(列名) from 表名;
注意null值不参与计算
2、5个聚合函数
1.count(列)求总数
2.max(列)求最大值
3.min(列)求最小值(null不参与计算)
4.sum(列)求和函数
5.avg(列)求平均数
五、分组查询
1.分组查询语法
select 列名 from 表名 分组条件 group by 分组列 过滤条件;
分组之后表示的列为可以用聚合函数计算的列,其他列信息无效,如姓名,地址等。
2.where与having的区别
having用来分组后过滤信息,如分组后人数小于3人的组不要,就可以用having过滤。
where和having的区别:
1.不满足where条件不参与分组。
2.where在分组前限定,而having在分组后过滤。
3.having可以对聚合函数进行判断,但是where不行。
3.举例
先加一个性别的列,便于分组
alter table student add gender varcher(4);
-- 将男生女生分组,查询他们各自平均分
select gender,avg(score) from student group by gender;
-- 将男生女生分组,查询他们各自平均分,以及各自总人数
select gender,avg(score),count(*) from student group by gender;
-- 将男生女生分组,查询他们各自平均分, 以及各自总人数,低于70分不参与分组
select gender,avg(score),count(*) from student
where score > 70 group by gender;
-- 将男生女生分组,查询他们各自平均分, 以及各自总人数,低于70分不参与分组,分组后要大于5人
select gender,avg(score),count(*) from student
where score > 70 group by gender having count(*)>5;
六、分页查询
分页查询语法:
select 列名 from 表名 limit 起始索引 ,每页条数;
起始索引(0开始) = (页码-1)* 每页条数;
-- 每页5条,查询第三页
select * from student limit 10,5;
-- 每页7条,查询第三页
select * from student limit 14,7;
七、全部代码
SELECT * FROM student;
-- 创建数据库
CREATE DATABASE IF NOT EXISTS dbcsdn;
-- 使用数据库
USE dbcsdn;
-- 创建表
CREATE TABLE student(
id int(5) PRIMARY KEY,
name VARCHAR(20) UNIQUE,
adr VARCHAR(50),
score int(3)
);
-- 向表里面添加数据
insert into student values
(1,'李华','上海',82),
(2,'李明','厦门',98),
(3,'李刚','北京',67),
(4,'李丽','重庆',66),
(5,'小赵','北京',88),
(6,'小钱','上海',76),
(7,'小孙','武汉',94),
(8,'小李','广东',64),
(9,'小周','成都',82),
(10,'小刘','重庆',69),
(11,'小智','深圳',78),
(12,'小王','厦门',66),
(13,'小陈','泉州',99),
(14,'小成','福州',85),
(15,'小郑','北京',68),
(16,'小吴','上海',96),
(17,'小宋','武汉',88)
(18,'小伍','天津');
-- insert into student(id,name,adr) VALUES(18,'小伍','天津');
-- 查询多列
select name,score from student;
-- 查询全部
select * from student;
-- 去除重复数据
select distinct adr from student;
-- 查询时修改列名
select id,name as 姓名,adr as 地址,score as 总分 from student;
-- 比较条件
-- 查找总分大于80分的同学信息
select * from student where score > 80;
-- 查找不在上海住的同学信息
select * from student where adr <> '上海';
-- 查找ID不小于10的同学信息
-- select * from student where id <! 10;
-- 查找id在5到10之间的同学信息
select * from student where id between 5 and 10;
-- 查询住在北京和上海的同学
select * from student where adr in ('北京','上海');
-- 查询成绩为空的同学信息
select * from student where score is null;
-- 查询成绩大于80或者在北京并且id小于10同学
select * from student where score > 80 or
adr in ('北京') and id < 10;
-- 查询姓李的同学
select * from student where name like '李%';
-- 查询分数第二位为8的同学
select * from student where score like '_8';
-- 查询地址包含州或者包含上海的同学
select * from student where
adr like '%州%' or adr like '%上海%';
-- 将成绩降序排列
select * from student order by score desc;
-- 将姓名升序排列
select * from student order by name asc;
-- 先将成绩奖序排列,再按姓名升序排列
select * from student order by score desc,name asc;
-- 查询一共有多少个同学
select count(id) from student;
-- 查询成绩最高分
select max(score) from student;
-- 查询成绩最低分
select min(score) from student;
-- 求该班成绩总和
select sum(score) from student;
-- 求该班成绩平均数
select avg(score) from student;
-- 增加一列性别便于分组
alter table student add gender varchar(4);
select * from student;
-- 将男生女生分组,查询他们各自平均分
select gender,avg(score) from student group by gender;
-- 将男生女生分组,查询他们各自平均分,以及各自总人数
select gender,avg(score),count(*) from student group by gender;
-- 将男生女生分组,查询他们各自平均分, 以及各自总人数,低于70分不参与分组
select gender,avg(score),count(*) from student
where score > 70 group by gender;
-- 将男生女生分组,查询他们各自平均分, 以及各自总人数,低于70分不参与分组,分组后要大于5人
select gender,avg(score),count(*) from student
where score > 70 group by gender having count(*)>5;
-- 每页5条,查询第三页
select * from student limit 10,5;
-- 每页7条,查询第三页
select * from student limit 14,7;