Q1:表StudentScores如下,用一条SQL语句查询出每门课都大于80分的学生姓名

Q2:表DEMO_DELTE如下,删除除了自动编号不同,其他都相同的学生冗余信息

Q3:Team表如下,甲乙丙丁为四个球队,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合

Q4:请考虑如下SQL语句在Microsoft SQL Server 引擎中的逻辑处理顺序
USE TSQLFundamentals2008SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1
ORDER BY empid,orderyear
本篇文章将剖析一般查询过程中,涉及到的处理逻辑子句,主要包括FROM,WHERE,GROUP BY,HAVING,SELECT,ORDER BY,TOP,OVER等子句。
2 SELECT语句的元素
2.1 常规查询子句和逻辑处理顺序
对数据表进行检索查询时,查询语句一般包括FROM,WHERE,GROUP BY,HAVING,SELECT,ORDER BY,TOP,OVER等子句,请考虑如下例子的逻辑处理顺序。
USE TSQLFundamentals2008SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1
ORDER BY empid,orderyear
如上代码,在SQL中逻辑处理顺序如下:
USE TSQLFundamentals2008FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1
SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
ORDER BY empid,orderyear
逻辑处理顺序可归结为如下:

注释:
a.在常规编程语言中,如c++,java,c#等,程序按照“从上往下”的顺序一步一步地执行,然而在SQL中,SELECT语句所处位置虽然在最开始,却不是在最先执行的;
b.逻辑处理顺序的每一步返回的结果集均是紧接着该步语句的下一步语句要执行的结果集;
c.FROM获取数据源(或者数据表),WHERE在FROM基础上过滤条件,GROUP BY在WHERE的基础上按照至少一列对集合进行分组,HAVING在GROUP BY基础上,对已经分组的集合进行过滤,SELECT语句在HAVING基础上检索,ORDER BY在SELECT基础上按照一定条件进行排序;










