简单的查询:
- 无条件查询:
select * from table_name;
select col1,col2,... from table_name;
- 条件查询:
select * from table_name where 条件;
- 排序查询:
select col1,col2,...from table_name where 条件 .. order by 列名 desc/asc
desc:从大到小排序。asc:从小到大排序 ,默认是asc
比如:
select s_id,s_name,s_score from student where s_score>=60 order by s_id asc
(查询出及格的学生,并按学生的id从小到大排序)
- 模糊查询:
查询关键字 like 主要使用 % 、 _ 、[ ] 三个字符 ,% 表示匹配0个或多个字符(通配符), _ 匹配一个字符,[ ] 匹配其中中的一个(类似正则表达式)
select * from student where s_name like '张%'
查询学生中姓张的,两个字,三个字的都可以查出来,如:张三、张麻子
select * from student where s_name like '张_'
查询学生中姓张的,且只有两个字的,如:张三、张四
select * from student where s_name like '[张李王]三'
查询学生中姓名为:张三、李三、王三 的信息
- 分组查询:
select * from table_name group by 列名
关键字 group by ,将统计的列中相同数据进行分组
select s_score,count(*) '人数' from student group by s_score
查询学生中每个分数有多少人,就是对相同的成绩进行了分组
分组查询常用函数:
max:求最大值
select s_name,max(math_score) from student group by s_name
查询数学成绩最高的学生姓名
min:求最小值
select s_name,min(math_score) from student group by s_name
查询数学成绩最低的学生姓名
avg:求平均值
select class_id,avg(math_score) from student group by class_id
查询每个班的平均数学成绩
sum:求总数和
select sum(s_id) from student
查询表中一共有多少学生
count:求总行数
- having用法:
筛选成组后的各种数据,它可以筛选真实表中没有的数据作为查询条件
select s_name,sum(s_score) from student group by s_name having sum(s_score)>600
查询总成绩大于600分的学生,但我们表没有总分这个记录
只有每科的成绩,这时就可以用having了,where就不能来筛选总成绩大于600的学生了。
having和where的区别:
having:having对查询结果中的列发挥作用,筛选数据
wherer:where针对表中的列发挥作用,查询数据
- limit用法:
limit 主要是用于分页,limit n,m 表示从n+1开始取m条数据
select * from student limit 2,5
表示去所有信息的 第3条后面的5条记录:3、4、5、6、7
- 简单的多表查询:
select table1.*,table2.* from table1,table2 where 条件