SQL复杂查询语句-SELECT * FROM cs WHERE score>70 GROUP BY s_id HAVING COUNT(*)>1

如果同时存在where,group by,的时候的执行顺序应该是这样的:

1,首先where后面添加条件把数据进行了过滤,返回一个结果集

2,然后group by将上面返回的结果集进行分组,返回一个结果集

3,然后having将上面分组好了的结果集进行再次过滤,返回最后的结果集

4,select开始查询结果集

查询语句中select from where group by having order by的执行顺序

1.查询中用到的关键词主要包含六个,并且他们的顺序依次为

select--from--where--group by--having--order by

其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序

与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行

from--where--group by--having--select--order by,

from:需要从哪个数据表检索数据

where:过滤表中数据的条件

group by:如何将上面过滤出的数据分组

having:对上面已经分组的数据进行过滤的条件

select:查看结果集中的哪个列,或列的计算结果

order by :按照什么样的顺序来查看返回的数据

2.from后面的表关联,是自右向左解析的

而where条件的解析顺序是自下而上的。

也就是说,在写SQL文的时候,尽量把数据量小的表放在最右边来进行关联(用小表去匹配大表),

而把能筛选出小量数据的条件放在where语句的最左边 (用小表去匹配大表)

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序

使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。

二、数据分组(group by ): 

select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a

group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。

三、使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式

需要注意having和where的用法区别:

1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。

2.where肯定在group by 之前,即也在having之前。

3.where后的条件表达式里不允许使用聚合函数,而having可以。

四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

1.执行where xx对全表数据做筛选,返回第1个结果集。

2.针对第1个结果集使用group by分组,返回第2个结果集。

4.针对第2个结集执行having xx进行筛选,返回第3个结果集。

3.针对第3个结果集中的每1组数据执行select xx,有几组就执行几次,返回第4个结果集。

5.针对第4个结果集排序。

例子

完成一个复杂的查询语句,需求如下:

按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩。 分析:

1.要求显示学生姓名和平均分

因此确定第1步select s_name,avg(score) from student

2.计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩

因此确定第2步 where score>=60 and s_name!=’jr’ 3.显示个人平均分

相同名字的学生(同一个学生)考了多门科目 因此按姓名分组 确定第3步 group by s_name 4.显示个人平均分在70分以上

因此确定第4步 having avg(s_score)>=70 5.按由高到低的顺序

因此确定第5步 order by avg(s_score) desc

五、索引

1.索引是单独的数据库对象,索引也需要被维护。 2.索引可以提高查询速度,但会降增删改的速度。 3.通过一定的查询触发,并不是越多越好。 什么时候不适合用索引?

1.当增删改的操作大于查询的操作时。 2.查询的语句大于所有语句的三分之一时。

创建索引语法:create index 索引名 on 表明 (列名) 删除索引语法:drop index 索引名

原文地址:https://www.cnblogs.com/shiwanming/p/9864947.html

时间: 2024-11-12 12:40:11

SQL复杂查询语句-SELECT * FROM cs WHERE score>70 GROUP BY s_id HAVING COUNT(*)>1的相关文章

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何在SQL Server存储过程中获取另一存储过程的执行结果记录集?如何在存储过程中检索动态SQL语句的执行结果?如何实现类似SELECT * FROM (EXEC procedure_name @parameters_var) AS datasource ... 的功能?procedure_

sql的基础语句-sql的查询语句select

SQL查询语句介绍--select语句 1.简单的select查询语句 1.1 查行 SQL> select * from emp; 1.2 查列 SQL> select empno,ename from emp; 1.3 关联查询 oracle的语法: select  a.*,b.*  from emp a,dept b where a.deptno=b.deptno; 通用的语法: select  a.*,b.* from emp a join dept b on(a.deptno = b

NumberFormatException: Invalid int类型不匹配异常——使用SQL数据库查询语句select * from blacknumber order by _id desc limit ?,20;出现

异常:类型不匹配 05-06 08:12:38.151: E/AndroidRuntime(14904): java.lang.NumberFormatException: Invalid int: "18600000099" 05-06 08:12:38.151: E/AndroidRuntime(14904): at com.itheima.mobilesafe74.activity.BlackNumberActivity$Myadapter.getView(BlackNumber

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

MySQL 抓取SQL慢查询语句

当MySQL服务器出现异常(慢),首先要考虑是否因,SQL语句引起数据库慢,如果情况比较紧急,我们就要立刻 SHOW FULL PROCESSLIST; 去查看,但我建议大家使用-e参数,采用非交互的方式,因为这样可以使用grep等命令,对结果进行过滤,更方便直观的看到结果 一.抓SQL慢查询语句的方法,有2种: 1,临时紧急抓取 通过SHOW FULL PROCESSLIST; 的方式,执行几次,有相同语句,就可能是SQL慢查询语句: SHOW FULL PROCESSLIST; #查看MyS

PL/SQL 编写查询语句时LIKE中文不起作用

在使用PL/SQL时经常出现SELECT表时,明明有符合条件的数据,但是在WHERE语句中的LIKE中文查询不到结果. 解决办法如下: 1.打开一个SQL Window 执行查询语句"select * from v$nls_parameters ;"得到查询结果如下, 1 NLS_LANGUAGE AMERICAN 2 NLS_TERRITORY AMERICA 3 NLS_CURRENCY $ 4 NLS_ISO_CURRENCY AMERICA 5 NLS_NUMERIC_CHAR

mysql第四篇--SQL逻辑查询语句执行顺序

mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition&g

SQL模糊查询语句

SQL模糊查询语句: SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下: 1.LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden). 2.LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer.Stringer). 3.LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet.Green.McBadden). 4.LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称

MySQL 查询语句SELECT和数据条件过滤

MySQL 查询语句SELECT ,主要是用 * 表示任意字段,也可以写id,name,content 等,数据条件过滤主要是between,and,or ,WHERE,in,like,limit,not in等. 1,查询语句SELECT的用法 select * from biao 2,查询语句数据条件的用法where 条件的开始and 并联关系or 或者的关系between 两者之间like 模糊查询limit 限制查询的条数in 在什么里面not in 不在什么里面 文章来自(www.dc