700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【数据库】select from where group by having order by limit的组合用法

【数据库】select from where group by having order by limit的组合用法

时间:2023-03-14 11:29:53

相关推荐

【数据库】select from where group by having order by limit的组合用法

select、from、where、group by、having、order by、limit组合用法

一、关键词意义

【1】select用来指定查询哪些列,可以使用聚合函数。

【2】from用来指定查询哪张表。

【3】where用来指定过滤条件,针对原表,那么条件中的列名只能是是原表的列名,不可以是别名或者使用聚合函数。

【4】group by用来对结果集进行分组,条件中的列可以使用原名,也可以使用别名。

【5】having用来指定对分组后的数据进行再次过滤的条件,条件中的列可以使用原名,也可以使用别名。

【6】order by对结果集中某一列进行排序,默认降序。有asc升序,desc降序两种选择。条件中的列可以使用原名,也可以使用别名。

【7】limit用来取出结果集中的某些行.limit m,n取出的是从第m+1行开始一共n行的数据。limit n相当于limit 0,n

oracle中返回前10条数据不用limit,而是用where rownum<=10;

二、sql语句编写顺序

select .. from ..是必须的,其他的关键词可选。

那么他们的组合顺序为

select ... from .. where ... group by... having ... order by ... limit ...

三、sql语句执行顺序

【1】from用于指定待查询的表

【2】where由where后面的提交过滤表中的数据,形成结果集1

【3】group by由后面的列对结果集1中的数据进行分组,形成结果集2

【4】having对结果集2再次进行过滤,形成结果集3

【5】order by对结果集3进行排序操作,形成结果集4

【6】limit取结果集4中的某些行,返回最终结果集

四、一个简单的例子

(1)数据库建表语句

CREATE TABLE `t_score` (`sc_id` int(11) NOT NULL auto_increment COMMENT '自增序号',`sc_student_id` varchar(20) NOT NULL COMMENT '学号',`sc_student_name` varchar(20) NOT NULL COMMENT '姓名',`sc_course_name` varchar(50) NOT NULL COMMENT '课程名称',`sc_course_credit` double(3,1) NOT NULL COMMENT '课程学分',`sc_course_nature` varchar(10) NOT NULL COMMENT '课程性质',`sc_score` varchar(10) NOT NULL COMMENT '总评成绩',`sc_remark` varchar(20) default NULL COMMENT '备注',`sc_gpa` double(3,1) default NULL COMMENT '绩点',`sc_make_up_score` varchar(10) default NULL COMMENT '补考成绩',`sc_rebuild_score` varchar(10) default NULL COMMENT '重修成绩',`sc_class_name` varchar(20) NOT NULL COMMENT '班级',`sc_class_belong` varchar(10) default NULL COMMENT '课程归属',`sc_rebuild_mark` int(11) default NULL COMMENT '重修标记',`sc_select_course_id` varchar(50) NOT NULL COMMENT '选课课号',`sc_edu_year` varchar(12) NOT NULL COMMENT '学年',`sc_edu_term` varchar(2) NOT NULL COMMENT '学期',`sc_academy_name` varchar(20) NOT NULL COMMENT '学生所属学院',PRIMARY KEY (`sc_student_id`,`sc_select_course_id`),KEY `sc_id` (`sc_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

(2)数据截图,数据量还是比较大的,有15万条数据。

(3)查询嵌入式1511这个班级中,平均绩点高于2.6前三位同学以及他们的平均绩点

select sc_student_name as name,avg(sc_course_credit) as avg_credit from t_score where sc_class_name='嵌入式1511' group by name having avg_credit>2.6 order by avg_credit desc limit 0,3;

查询结果:

五、几点注意

【1】count

count(*)会返回结果集中的所有行数,即使有一行全为null,也会参与行数计算。

count(列名)当列名出现null值时,不会参与行数计算。

【2】select与groupby的一个原则

当select后出现的列中没有使用到聚合函数时,那么尽量出现在groupby中。否则的话,查询会变得没有意义。比如查询课程分类下的选课人数

select 课程类别 ,sum(人数) from 选课表 where 班级='嵌入式1511' group by 课程类别;

【3】待补充

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。