SQL各子句介绍以及执行顺序
时间:2019-05-17 13:20 来源:linux.it.net.cn 作者:IT
首先有个表:
create table student(
id char(1) primary key,
name varchar(8),
sex char(2) default '男' ,
age int(3) default 0
)
insert into student values ('1','王明','男',18);
insert into student values ('2','孙丽','女',17);
insert into student values ('3','王明','男',27);
insert into student (id,sex,age) values ('4','男',27);
1、ORDER BY
对查询结果进行排序,必须置于SQL语句的最后。
语法:order by {column_name1, column_name2, column_name3, …column_namen} [asc|desc]
例:
select * from student order by age;#按照age升序排列
select * from student order by age asc;#按照age升序排列
select * from student order by age desc;#按照age降序排列
order by之后可以跟多个字段,排序时首先按照第一个字段进行排序,若之间有相同数据在以第二个字段进行排序,之后以此类推直至排序完成。
order by 若不指定asc或者desc则默认升序排列。
2、group by
group by用于将表中数据划分为若干个组,group by后面用于指定分组的依据
select sex,count(id) from student group by sex; #将student表学生按照sex分组,然后统计每组中的人数
执行结果:女生1人,男生3人
如果select语句中使用group by进行了分组,则select子句中只可以有聚集函数和分组字段,不能含有其他字段,否则SQL语句报错,并且如果group by子句后面跟着order by子句,则order by子句用于排序的字段也必须是聚集函数或分组字段;
3、having
因为where后面不能使用多行函数,只能使用单行函数和字段,having关键字弥补了这一不足:having子句用于对分组结果进行约束
select name from student group by name having count(name)>1#查询哪些名字重名了
执行结果:王明
4、distinct
表中,可能会包含重复值。这并不成问题,不过,有时也许希望仅仅列出不同(distinct)的值。
关键词 DISTINCT 用于返回唯一不同的值。
select distinct name from student;
执行结果:王明,孙丽
各个子句执行顺序
有如下代码:
select sex,count(sex) total from student where name like '%' group by sex order by total
此处SQL语句执行过程为,首先筛选出符合where子句的数据,然后对这些数据以sex进行分组,最后将这些数据以count(sex)进行升序排序。
执行结果为:
女,1
男,2
各子句优先级为,where>group by >order by
(责任编辑:IT)
首先有个表: create table student( id char(1) primary key, name varchar(8), sex char(2) default '男' , age int(3) default 0 ) insert into student values ('1','王明','男',18); insert into student values ('2','孙丽','女',17); insert into student values ('3','王明','男',27); insert into student (id,sex,age) values ('4','男',27); 1、ORDER BY 对查询结果进行排序,必须置于SQL语句的最后。 语法:order by {column_name1, column_name2, column_name3, …column_namen} [asc|desc] 例: select * from student order by age;#按照age升序排列 select * from student order by age asc;#按照age升序排列 select * from student order by age desc;#按照age降序排列 order by之后可以跟多个字段,排序时首先按照第一个字段进行排序,若之间有相同数据在以第二个字段进行排序,之后以此类推直至排序完成。 order by 若不指定asc或者desc则默认升序排列。 2、group by group by用于将表中数据划分为若干个组,group by后面用于指定分组的依据 select sex,count(id) from student group by sex; #将student表学生按照sex分组,然后统计每组中的人数 执行结果:女生1人,男生3人 如果select语句中使用group by进行了分组,则select子句中只可以有聚集函数和分组字段,不能含有其他字段,否则SQL语句报错,并且如果group by子句后面跟着order by子句,则order by子句用于排序的字段也必须是聚集函数或分组字段; 3、having 因为where后面不能使用多行函数,只能使用单行函数和字段,having关键字弥补了这一不足:having子句用于对分组结果进行约束 select name from student group by name having count(name)>1#查询哪些名字重名了 执行结果:王明 4、distinct 表中,可能会包含重复值。这并不成问题,不过,有时也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值。 select distinct name from student; 执行结果:王明,孙丽 各个子句执行顺序 有如下代码: select sex,count(sex) total from student where name like '%' group by sex order by total 此处SQL语句执行过程为,首先筛选出符合where子句的数据,然后对这些数据以sex进行分组,最后将这些数据以count(sex)进行升序排序。 执行结果为: 女,1 男,2 各子句优先级为,where>group by >order by (责任编辑:IT) |