banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

[SQL]两条学校索迪杯软件大赛预赛试卷SQL语句考试试题

今天参加了学校的索迪杯预赛考试,结果看到试卷上的日文就懵了,考这玩意要考日文?就跟美国 GRE 考试要考《论语》一样,反正很变态!!不过还有两条比较经典的 SQL 题目值得跟大家分享,适合 SQL 的初学者学习,好像俺也就是算个初学者吧,好了,看题目。

第一题 用 SQL 判断今年或者某一年是否是闰年 说明:SQL?闰年?两者好像没多大关系吧,跟考试考日文一样,真佩服考官了,不过详细用过 SQL server2000 的朋友肯定知道 NOW () 这个函数,我一开始也是这么想的,可是 now () 包含太多的无用信息了,而且处理比较麻烦,于是又想到另一个函数 GETDATE (), 目前在 MSSQL2000 可用,其他的不太清楚,可以参阅用户手册,GETDATE () 的返回信息是今天的日期。

比如 :

SELECT GETDATE() AS DATE

结果是:

Dec 18 2008 22:20PM

包括 日期,时间,好,那我们就要这个年份

另外介绍一个日期截取函数 DATEPART ()

从函数名就可以知道了吧,就是用特定的索引截取响应的数据,我目前知道的 year mouth 都是可用,具体的参看用户手册

用法如下:

DATEPART(month, GETDATE())

那如何判断一年是否是闰年呢?如果年份能整除 4 且不是 100 的倍数的是闰年,如果 是 100 的倍数,那么就要除以 400 了

所以可以这么判断

DECLARE @year INT
IF (@YEAR % 4 =0 AND @YEAR %100 <> 0) OR (@YEAR % 400 = 0)
SELECT 'YES'
ELSE
SELECT 'NO'

所以综上所述,SQL 语句如下:

DECLARE @year INT

SET @year = DATEPART(month, GETDATE())

IF (@YEAR % 4 =0 AND @YEAR %100 <> 0) OR (@YEAR % 400 = 0)
SELECT 'YES'
ELSE
SELECT 'NO'

第二题 现有学生的课程成绩表 (SCG) 的包含学生 ID (SID, int)、课程 ID (CID ,int)、 成绩 (grade ,int) 这几列,求这些学生成绩中每门学科成绩的前两名,按学号排序, 不考虑成绩并列情况

分析,主要就是求出 TOP 2 就好了,另外要具体课程具体分析,因为包括不只一门 成绩,因此需要多级嵌套查询,效率可能较低,如果大家有更好的想法的话,欢迎 留言讨论

SQL 语句如下:

SELECT t.SID AS 学生 ID , t.CID AS 课程 ID , t.grade as 分数
FROM SCG AS t
WHERE grade IN
(
SELECT TOP 2 grade
FROM SCG
WHERE
t.CID = SCG.CID
ORDER BY grade DESC
)
ORDER BY SID

* 注,经过‘汉子’网友的提醒,修改了部分语句

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。