单表数据查询
一.避免重复查询-distinct
语法格式:select distinct 字段一,字段二 from student
select distinct groupNum,qq from student
二.实现数学运算的查询
MySQL中的数学运算符:+ - * / %
select name,salary*12 as 年收入 from student
三.concat连字符查询
格式化显示查询结果:使用字符串拼接函数将查询出来的数据进行再加工
as是给查询出来的字段起的别名,在后续做视图查询或者应用程序对字段进行解析的时候会起到作用
1 -- concat连字符查询 2 select CONCAT('皇家大应用-',name,'同学') as 学生,email from student
四.条件记录的数据查询
4.1 带关系运算符和逻辑运算符的表达式
MySQL中的关系运算符:> 、>=、<、<=、!=(<>)、=
MySQL中的逻辑运算符:&&(and)、‖(or)、!(not)
1 -- 下面例子使用到了算术运算符和逻辑运算符 2 -- 在逻辑表达式中,我们一般用and和or来表示 3 select name,salary from student where salary>=3500 and salary<=4000
4.2 带between and关键字的条件查询
1 -- between and关键字查询 2 -- 其中查询出来的结果集包含了4000和4500,在实际开发中,对日期类型的数据查询场景使用较多 3 select name,salary from student where salary between 4000 and 4500
-- 查询月薪不在4000到4500的
select name,salary from student where not(salary between 4000 and 4500)
4.3 is null关键字查询
1 -- is null关键字查询 2 -- 先设置一下 3 -- update student set code=null,password=null,salary='',email='' WHERE name="林英方" 4 select name from student where code is null and password is null 5 select name from student where salary='' or email=''
其中不为空表示为is not null
select name from student where salary is not null
4.4 带in关键字的数据条件查询
温馨小提示:查询的是一个集合
select id,name from student where id in(1,3,5)
select id,name from student where id not in(1,3,5)
温馨小提示:不在某个集合范围内的查询
select id,name from student where id not in(1,3,5)
4.5 带like关键字的查询
1 -- like关键字模糊查询 2 select name from student where name like '阿%'-- 以阿开头,后面0~任意个字 3 select name from student where name like '%果子'-- 前面0~任意个字,以果子结尾
五.排序查询
1 -- 排序查询 asc升序(从小到大) desc降序(从大到小) 2 select * from student as s order by s.groupNum asc,salary desc
温馨小提示:前面是将groupNum字段升序(从小到大),在groupNum相同的时候以salary字段以降序(从大到小)方式排序
六.限制数据记录的查询
1 -- 限制数据记录的查询数量 2 -- 在实际的程序开发中,我们不可能一次性的把所有数据都查询出来 3 -- 然后在服务器中对数据进行分页的过滤 4 -- 所以我们在数据查询的时候自己进行分页 5 -- limit后面的两个参数代表着从哪一行开始,查询几行记录 6 select * from student as s order by s.groupNum asc,s.salary desc LIMIT 0,3
七.统计函数和分组数据查询
7.1 统计查询
除了count函数外,其它函数如果没有找到记录,返回值是null,count函数返回0
1 -- 统计函数查询 2 select avg(salary) as 平均薪水 from student -- 平均数 3 select max(salary) as 最高薪水 from student -- 最大值 4 select min(salary) as 最低薪水 from student -- 最低值 5 select sum(salary) as 所有人薪水总和 from student-- 求和
6 select count(*) from student-- 代表student表中有多少条记录
7 select avg(salary) as 平均薪水 from student where id='-1'-- 平均数
8 select count(*) from student where groupNum='10' -- groupNum等于10的记录有几条
7.2 分组查询
1 -- 分组查询执行顺序分析 2 -- 先以groupNum字段执行分组,查询groupNum字段 3 -- group_concat(name)每组中的成员姓名 4 -- 再计算出每组的平均薪水 5 select groupNum ,GROUP_CONCAT(name),AVG(salary) 6 from student 7 group by groupNum 8 9 -- 先以groupNum字段执行分组,再以age字段执行分组 10 -- 查询groupNum,age 11 -- 查询出同一组且同一年龄有哪些成员 12 select groupNum,age,GROUP_CONCAT(name) 13 from student 14 group by groupNum,age
7.3 使用HAVING对聚合完的数据进行条件限制查询
1 -- 使用having对聚合完的数据进行条件限制查询 2 -- having就是用来聚合函数进行条件过滤的 3 -- 先执行age='20'进行数据过滤 4 -- 在进行group by分组 5 -- 再执行select后的所有代码 6 -- 最后having对聚合完成的数据进行再次过滤 7 select groupNum,GROUP_CONCAT(name),avg(salary) 8 from student 9 where age='20' 10 group by groupNum 11 HAVING avg(salary)>3500