阅读目录sql
1. AVG函数函数
该函数的做用是经过对表中行数并计算其列值之和,而后求他们的平均值。spa
以下代码:select avg(password) as avg_password from user;code
如上代码的含义是:从user表中查询password这个字段,求他们的平均值,而后该列的平均值别名叫 avg_password;blog
以下图所示:排序
固然咱们能够对特定的列或行的平均值。以下是对特定的列的平均值。以下代码:it
select avg(password) as avg_password from user where username = 'cccc';
如上代码的含义是:从user表中查找password这个字段平均值,而后根据username='cccc' 这个条件去查找。所以以下图所示:table
如上所示:如上代码包含了where子句这个条件去查找user表中的数据。class
2.理解COUNT()函数select
该函数的做用是肯定表中行的数目或符合特定条件的行的数目。
该函数有2种使用方式:
1. 使用count(*) 对表中行的数目进行计数,无论表中包含的是空值(null) 仍是非空值。
2. 使用count(column) 对特定列中具备值的行进行计数,忽略NULL值。
以下语法:select count(*) as num_count from user;
该代码的做用是:从user表中查询总行数,而后把该列的别名叫作 num_count; 以下图所示:
在如上代码中,使用了count(*) 对全部的行计数,无论行中各列有什么值。它都返回到总行数里面去。
3.理解max()函数
max()函数返回指定列中的最大值。max()要求指定列名,以下所示:
select max(password) as max_value from user;
如上代码的含义是:查询user表中password字段的最大值,取名该列的别名为 max_value. 以下图所示:
4.理解min()函数
min()函数的做用是返回指定列的最小值。该函数和max()方法同样须要指定列名。以下所示:
select min(password) as min_value from user;
以下图所示:
5.理解sum()函数
该函数的做用是返回指定列值的和。以下代码:
select sum(password) as items_password from user where username='cccc';
以下图所示:
6 建立分组(group by)
好比说我想知道user表中的某个数据的总数有多少,咱们通常会使用咱们前面介绍的count这个函数来计算,好比以下代码:
select count(*) as num_count from user where username='cccc';
如上语法的含义是 咱们查询user这张表中的全部数据,而后根据字段 username ='cccc' 这个条件去查找的。以下所示:
可是若是我如今想知道每一个表中的username对应的各个字段的总数是多少,咱们该怎么办呢?咱们总不可能每一个都去执行一遍吧?那么这个时候分组就很是有用了。
分组是使用select语句的group by子句创建的。好比以下代码:
select username, count(*) as num_count from user group by username;
如上代码的含义是: 从user这张表中查询username这个字段,经过username这个字段去获取该总数。而后把该username的别名叫 num_count; 以下所示:
group by 注意事项:
group by子句能够包含任意数目的列,所以能够对分组进行嵌套。更细致地进行数据分组。
7 HAVING过滤分组
除了能用group by分组数据外,咱们还可使用过滤分组,规定包括哪些分组,排除哪些分组。咱们以前也说过 where语句也能够进行过滤条件,可是where只能过滤的是行,而不是分组,所以咱们这边不能使用where来过滤分组。所以 HAVING子句就出现了。
注意:HAVING支持全部的where操做符。
以下代码:
select username,count(*) as num_count from user group by username having count(*) >=2;
如上代码的含义是:查询user这张表,根据username这个字段进行分组,而且根据username这个字段查询到对应的总数,而且过滤的条件是总数大于2的数量。所以会把username这个字段总数小于2的数据会所有过滤掉,以下图所示:
having和where的差异:
where在数据分组前进行过滤的,having在数据分组后进行过滤的。这是这两个用法的最主要的区别。
那么咱们也能够把这二者一块儿使用,以下语法:
select username,count(*) as num_count from user where password > 200 group by username having count(*) = 1;
如上代码的含义是:查询user这张表中全部的数据,根据username这个字段去获取该user表中的总数,而后使用where语句去根据password这个字段进行判断,该值大于200的数据。而且使用username进行分组,而且分组后的数据总数等于1的数据。以下所示:
8 分组和排序(order by)
group by是对数据进行分组,那么order by就是对分组后的数据进行排序。好比以下语法:
select username,count(*) as items from user group by username having count(*) >= 2 order by items, username;
如上代码含义是:查询user这张表中的字段username,经过username这个字段获取总数,而且经过having这个关键字过滤掉总数小于2的数据,最后咱们经过 order by经过别名items进行排序。以下图所示:
select 子句顺序一些含义:
select: 要返回的列或表达式。
where: 行级过滤。
group by: 分组说明
having: 分组过滤
order by: 对分组进行排序。
9. 建立组合查询(UNION 和 UNION ALL)
sql查询只包含从一个或多个表中返回数据的单条select语句。可是sql也容许执行多个查询(多条select语句)。并将结果做为一个查询结果集返回。这些组合查询通常叫复合查询。
有下面两种状况须要组合查询:
1. 在一个查询中从不一样的表返回结构数据。
2. 对一个表执行多个查询,按一个查询返回数据。
可使用UNION操做符来组合多条sql查询。利用UNION, 可给出多条select语句,将他们的结果组合成一个结果集。
使用UNION很简单,在各条select语句之间放上关键字 UNION。
举个列子,好比 我使用 select * from user where username in ('aaaa','eeee'); 这个sql语句查询出数据出来后,我再使用以下这个:select * from user where id=27; 语句也能查询出数据,那么我如今想结合这两种查询,查询出数据,那么须要sql语句以下:
select * from user where username in ('aaaa','eeee') UNION select * from user where id=27;
以下图所示:
可是咱们使用or关键字更简单,如:select * from user where username in ('aaaa','eeee') or id=27;
以下所示:
注意:对于在多个表中检索数据的情形,使用UNION可能处理更简单,可是对于一个表中使用多条语句查询建议使用or关键字可能会简单。
10. 对组合查询结果排序
在使用UNION组合查询时,只能使用一条ORDER BY 子句进行排序,而且它必须位于最后一条select语句以后。
以下语句:
select * from user where username in ('aaaa','cccc') UNION ALL select * from user where id=27 order by username;
以下图所示:
11. 建立表的语句使用 create table 语句。
1. 建立表的语句使用 create table 语句。
CREATE TABLE User ( ID int NOT NULL AUTO_INCREMENT, UserName varchar(255) NOT NULL, Password varchar(255) NOT NULL, PRIMARY KEY (ID) );
12. 更新表使用 alter table 语句
好比咱们想给user表添加一列,就使用 alter table user add age int(20); 语句,会增长一列age。以下所示:
13. 删除表中的列
删除表中的列,使用 alter table user drop column age; 语句,以下所示:
如上是使用drop column 关键字删除age这个列。
14. 删除表 drop table 表名;
删除表 drop table 表名; 语法:drop table user3; 以下所示: