写复杂sql的思路套路

2017-11-29  本文已影响0人  刘程旭

Group by

Having

Distinct

Count

Min

Max

Avg

Sum

where对from出来的表数据进行筛选

group

by是再where执行之后才执行

having对group by的结果进行筛选

SQL的执行顺序:

[if !supportLists]1.[endif]From:视图1

[if !supportLists]2.[endif]Where:视图2

[if !supportLists]3.[endif]Group

by:视图3

[if !supportLists]4.[endif]Having:视图4

[if !supportLists]5.[endif]Select:视图5

[if !supportLists]6.[endif]Distinct:视图6

[if !supportLists]7.[endif]Order

by:视图7

1.“增删改查”哪一种?

select*

2.从哪些表能够找全字段?

from表1 a,表2 b

3.是否是多表?

wherea.字段1=b.字段2

4.是否有字段约束?

and字段名

5.什么约束?

=字段值

6.是否有非全表的聚合函数?

group by

7.谁的聚合函数(按哪些字段进行聚合)?

字段名1,字段名2

8.将展现字段改为聚合字段

select字段名1,字段名2

9.对聚合函数是否有约束?

having

10.什么约束?

聚合函数>条件

12.最终要展现什么字段?

字段+聚合函数

13.是否去重?

Distinct

11.是否有排序?

order by

Student(S#, Sname,Sage,Ssex)学生表

Course(C#,Cname,T#)课程表

SC(S#,C#,score)成绩表

Teacher(T#,Tname)教师表

问题:

[if !supportLists]1、[endif]查询“001”课程比“002”课程成绩高的所有学生的学号:

[if !supportLists]2、[endif]查询平均成绩>60分的同学的学号和平均成绩

SelectS#,avg(score)fromsc tgroup by S# having avg(score) >60

查询“001”课程比“002”课程成绩高的所有学生的学号

Selecta.S#from SC a , SC b where a.S#=b.S# and a.C#=’001’and b.C#=’002’

[if !supportLists]1.[endif]“增删改查”哪一种?

查询“001”课程比“002”课程成绩高的所有学生的学号

select*

[if !supportLists]2.[endif]从哪些表能够找全字段?

查询“001”课程比“002”课程成绩高的所有学生的学号

Select*fromSC

a, SC b

3.是否是多表?

Select*from SC a, SC bwherea.sno=b.sno

4.是否有字段约束?

Select*from SC a, SC bwherea.sno=b.snoand a.C#=’001’ and b.C#=’002’

5.什么约束?

=字段值

6.是否有非全表的聚合函数?

group by

7.谁的聚合函数(按哪些字段进行聚合)?

字段名1,字段名2

8.将展现字段改为聚合字段

select字段名1,字段名2

9.对聚合函数是否有约束?

having

10.什么约束?

聚合函数>条件

11.是否有排序?

order by

12.按什么字段排序?

字段名

13.最终要展现什么字段?

字段+聚合函数

Selecta.S#from SC a, SC bwherea.sno=b.sno and a.C#=’001’ and b.C#=’002’

14.是否去重?

distinct

上一篇下一篇

猜你喜欢

热点阅读