一、数据记录的查询
数据准备:
create table exam(
id int primary key auto_increment,
name varchar(20) not null,
chinese double,
math double,
english double
);
insert into exam values(null,'关羽',85,76,60);
insert into exam values(null,'张飞',70,75,70);
insert into exam values(null,'赵云',90,65,95);
insert into exam values(null,'刘备',97,50,50);
insert into exam values(null,'曹操',90,89,80);
insert into exam values(null,'司马懿',90,67,65);
1.查询所有信息
语法:select * from 表名;
表示查询表的所有信息。会把表的所有的列,所有的行都列出来。
2.查询指定列的信息
语法: select 列名,列名… from 表名;
显示指定列数据。列出所有行信息。
3. 条件查询
语法:select * from 表名 where 条件;
运算符
虑重
查询排重:select distinct 列名 from 表名 [where 条件];
别名以及列运算
语法:select 列名 as 别名,列名 as 别名,列名 as 别名… from 表名 [where 条件];
order by 排序
语法:select * from 表名 order by 列名 asc|desc ;
注意 : 可以有多个排序条件, 首先按照第一列进行排序,如果第一列相同,按照第二列再进行排序。
null的问题
如果使用null来进行表达式运算,那么计算的结果也会是null.
SQL中的 聚合
聚集函数:多个数据进行运算,运算出一个结果。例如,求和,平均值,最大值,最小值。
count函数–统计记录数(统计行数)
语法:select count(*) | count(列名) from 表名
sum求和函数
语法:select sum(列名) from 表名;
sum(列名) ------统计该列的所有的值的和。sum 也可排除null
注意:如
这种写法会先将每一行的语数外成绩进行相加,然后再把每一行的语数外相加后的值进行求和。这样写会出现一个问题,因为null值和任何值相加为null,而最后sum求和的时候,总成绩null给排除。
avg函数–平均值
语法: select avg(列名) from 表名;
avg里面的null不作为统计。
max/min 最大值/最小值
null 排除在外
group by分组查询(重点)
分组: 按照某一列或者某几列。把相同的数据,进行合并输出。
完整写法 : select … from … group by 列名;
说明:其实就是按列进行分类,然后可以对分类完的数据使用聚集函数进行运算。
注意事项:
1、聚合函数:分组之后进行计算;
2、通常 select的内容:a 被分组的列,b 聚合函数。
3、如果遇到这种情况 按照 每种,每个。 类似的这些语句的时候,通常会使用分组。
4、如果使用group by 对数据进行分组之后还要过滤。只能使用having关键字。
5、where 后不能跟 聚合函数,having中可以跟 聚合函数。
where 和 having 的区别
1、having 通常与group by 分组结合使用。 where 和分组无关。
2、having 可以书写聚合函数 count,sum,avg,max,min),是不可以出现where条件中。
3、where 是在分组之前进行过滤的。having 是在分组之后进行过滤的。
select 语句的执行顺序与查询
select …要显示的内容… from …表名… where 条件…. group by …分组的列 …having …分组后的条件… order by …排序