高级子查询(嵌套,相关)与分页
高级子查询(嵌套) Select StuId,StuName, SelCourses=(Select Count(CourseId) From tblScore t1 Where t1.StuId=s1.StuId), SumScore=(Select Sum(Score) From tblScore t2 Where t2.StuId=s1.StuId) From tblStudent s1 嵌套查询
select a.username,numa,numb from ( select username,count(username) as numa from a where isdel=0 group by username order by numa desc) a, (select username,count(username) as numb from a where isdel=0 and isx=1 group by username) bwhere a.username = b.username
相关子查询
SElECT booksName,press,classNo,price FROM Books As a WHERE price > ( SELECT AVG(price) FROM Books AS b WHERE a.classNo=b.classNo ) GO
详解: 先将Books表中的第一条记录的“class”的值“2”代入子查询中,子查询变为: SELECT AVG(price) FROM Books AS b WHERE b.class=2 子查询的结果为该类图书的平均价格,所以外部查询变为: SElECT booksName,press,classNo,price
FROM Books As a WHERE 价格 > 34 如果WHERE条件为True,则第一条结果包括在结果集中,则否不包括。对Books表中的所有行运行相同的过程,最后形成的结果集及最后返回结果。 分页 SQL分页语句
说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。 方法1:
SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) ORDER BY id
方法2:
SELECT TOP 页大小 * FROM table1 WHERE id > ( SELECT ISNULL(MAX(id),0) FROM ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) A ) ORDER BY id
方法3: SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) A WHERE RowNumber > 页大小*(页数-1) SELECT查询语句是由七个子句构成,其中SELECT和FROM子句是一个完整SELECT查询语句必须要有的。 (1) SELECT子句 列出所有要求SELECT语句进行检索的数据项,这些项可能取自数据库中关系表的列,也可以是SQL在执行查询时进行计算的表达式。这里的ALL和DISTINCT选项,表示查询出的结果中是否容许有内容重复的行出现,缺省时是ALL项,表示容许有重复的行出现,而*则表示查询出所指定关系表中所有的列。 (2)FROM子句 FROM子句列出包含所要查询的数据关系表。 (3)WHERE子句 WHERE子句告诉SQL只查询某些关系表中满足一定要求的行的数据,查询要求由WHERE子句中的查询条件确定。 (4)GROUP BY子句 GROUP BY子句指定当前查询是汇总查询,即不是对根据每行产生一个查询结果,而是对相似的行进行分组,然后再对每组产生一个汇总查询的结果。 (5)HAVING子句 HAVING子句告诉SQL只对由GROUP BY所得到的某些行组的结果进行过滤,选择出满足分组条件的分组。 (6)ORDER BY子句 ORDER BY子句确定是否将查询出的结果按一列或多列中的数据进行排序,缺省时是不排序的。 (7)INTO子句 INTO子句确定是否将查询出的结果存入一张新的关系表中,缺省时只将查询出现的结果显示在屏幕上。这是非标准SELECT语句中的子句,但目前绝大多数实际应用的SQL数据库系统的SQL语言提供了这一选项