一道sql面试题

--学生表[Table_Student]{[StudentID],[Sex],[StudentName]}
--科目表 [Table_Class]{[CalssID],[ClassName]}
--成绩表 [Table_score]{[StudentID],[ClassID],[Score]}

 查出各科目中前10的学生学号和成绩

select * from Table_score as CJ1
where score >=
( select Min(score) From Table_score As CJ2
Where CJ1.classid = CJ2.classid And CJ1.score <= CJ2.score Having Count(*) <=10)

 另一种方法

SELECT * FROM
( SELECT *,SEQ=ROW_NUMBER() OVER (PARTITION BY classid ORDER BY score desc) FROM Table_score  ) as T
WHERE SEQ<=10
order by classid ,studentid

 

 

truncate和delete之间有什么区别

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。   DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。
DELETE TABLE:删除内容不删除定义,不释放空间。
DROP TABLE:删除内容和定义,释放空间。

你可能感兴趣的:(sql)