SQL Server面试精华:查询难题与合并列技巧

需积分: 13 4 下载量 69 浏览量 更新于2024-09-10 收藏 203KB DOC 举报
本文档主要围绕SQL Server的相关面试题展开,涵盖了SQL查询技巧、数据处理和基本的数据库操作。首先,我们来看第一个问题,如何使用SQL查询找出每门课成绩都大于80分的学生姓名。有两种方法: 1. 方法一:通过子查询排除低于80分的学生,然后选择剩余学生的姓名。SQL语句如下: ``` SELECT DISTINCT name FROM stu WHERE name NOT IN (SELECT DISTINCT name FROM stu WHERE fenshu <= 80) ``` 这里假设有一个名为"stu"的表,包含学生姓名(name)和各科成绩(fenshu)。 2. 方法二:利用GROUP BY 和 HAVING 子句来统计每个学生各科成绩,并检查至少有3门课程且最低分大于等于80。SQL语句是: ``` SELECT name FROM stu GROUP BY name HAVING COUNT(kecheng) >= 3 AND MIN(fenshu) >= 80 ``` 接着,是关于SQL查询中数据合并的问题。比如,我们需要合并"FullName"和"FirstName"列,如果其中一个非空则显示其名称,可以使用CASE WHEN语句实现: ``` SELECT Name = CASE WHEN EMPLOYEE.FullName IS NOT NULL THEN EMPLOYEE.FullName WHEN EMPLOYEE.FirstName IS NOT NULL THEN EMPLOYEE.FirstName END FROM EMPLOYEE ``` 第三部分,涉及创建一个名为"tb1"的表,存储学生姓名和各科成绩,以及使用UNION和UNION ALL进行数据记录合并。UNION用于去除重复项,而UNION ALL则保留所有记录,包括重复。例如,以下查询将语文、数学和物理的成绩分别列出,然后合并: ``` CREATE TABLE tb1 ( 姓名 VARCHAR(10), 语文 INT, 数学 INT, 物理 INT ) INSERT INTO tb1 (姓名, 语文, 数学, 物理) VALUES ('张三', 74, 83, 93) INSERT INTO tb1 (姓名, 语文, 数学, 物理) VALUES ('李四', 74, 84, 94) SELECT Name AS '姓名', Subject = '语文', Result = 语文 FROM tb1 UNION ALL SELECT Name AS '姓名', Subject = '数学', Result = 数学 FROM tb1 UNION ALL SELECT Name AS '姓名', Subject = '物理', Result = 物理 FROM tb1 ORDER BY Name, CASE WHEN Subject = '语文' THEN 1 WHEN Subject = '数学' THEN 2 WHEN Subject = '物理' THEN 3 END ``` 总结起来,这些题目考察了SQL查询的逻辑思维、数据筛选与合并、表结构设计以及基本的SQL操作技巧。掌握这些知识对于应聘SQL Server相关的职位非常重要,能够展现出对数据库管理及数据分析的熟练程度。