大家跟我一起涨知识(高级查询与分页)
高级查询
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语言提供了这一选项