.NET高级工程师面试题之SQL篇

简介:

1 题目

这确实是一个真实的面试题,琢磨一下吧!知识不用,就会丢掉,我太依赖各种框架和dll了,已经忘记了最基本的东西。有多久没有写过SQL了,我已经不记得了。

.NET高级工程师面试题之SQL篇

已知表信息如下:

Department(depID, depName),depID 系编号,DepName系名

Student(stuID, name, depID) 学生编号,姓名,系编号

Score(stuID, category, score) 学生编码,科目,成绩

找出每一个系的最高分,并且按系编号,学生编号升序排列,要求顺序输出以下信息:

系编号,系名,学生编号,姓名,总分

2 实验

 
  1. USE [test] 
  2. GO 
  3. /****** Object:  Table [dbo].[Score]    Script Date: 05/11/2015 23:16:23 ******/ 
  4. SET ANSI_NULLS ON 
  5. GO 
  6. SET QUOTED_IDENTIFIER ON 
  7. GO 
  8. SET ANSI_PADDING ON 
  9. GO 
  10. CREATE TABLE [dbo].[Score]( 
  11.     [stuID] [int] NOT NULL, 
  12.     [category] [varchar](50) NOT NULL, 
  13.     [score] [int] NOT NULL 
  14. ) ON [PRIMARY] 
  15. GO 
  16. SET ANSI_PADDING OFF 
  17. GO 
  18. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (1, N'英语'80
  19. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (2, N'数学'80
  20. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (1, N'数学'70
  21. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (2, N'英语'89
  22. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (3, N'英语'81
  23. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (3, N'数学'71
  24. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (4, N'数学'91
  25. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (4, N'英语'61
  26. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (5, N'英语'91
  27. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (6, N'英语'89
  28. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (7, N'英语'77
  29. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (8, N'英语'97
  30. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (9, N'英语'57
  31. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (5, N'数学'87
  32. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (6, N'数学'89
  33. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (7, N'数学'80
  34. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (8, N'数学'81
  35. INSERT [dbo].[Score] ([stuID], [category], [score]) VALUES (9, N'数学'84
  36. /****** Object:  Table [dbo].[Department]    Script Date: 05/11/2015 23:16:23 ******/ 
  37. SET ANSI_NULLS ON 
  38. GO 
  39. SET QUOTED_IDENTIFIER ON 
  40. GO 
  41. SET ANSI_PADDING ON 
  42. GO 
  43. CREATE TABLE [dbo].[Department]( 
  44.     [depID] [int] IDENTITY(1,1) NOT NULL, 
  45.     [depName] [varchar](50) NOT NULL, 
  46. PRIMARY KEY CLUSTERED  
  47.     [depID] ASC 
  48. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] 
  49. ) ON [PRIMARY] 
  50. GO 
  51. SET ANSI_PADDING OFF 
  52. GO 
  53. SET IDENTITY_INSERT [dbo].[Department] ON 
  54. INSERT [dbo].[Department] ([depID], [depName]) VALUES (1, N'计算机'
  55. INSERT [dbo].[Department] ([depID], [depName]) VALUES (2, N'生物'
  56. INSERT [dbo].[Department] ([depID], [depName]) VALUES (3, N'数学'
  57. SET IDENTITY_INSERT [dbo].[Department] OFF 
  58. /****** Object:  Table [dbo].[Student]    Script Date: 05/11/2015 23:16:23 ******/ 
  59. SET ANSI_NULLS ON 
  60. GO 
  61. SET QUOTED_IDENTIFIER ON 
  62. GO 
  63. SET ANSI_PADDING ON 
  64. GO 
  65. CREATE TABLE [dbo].[Student]( 
  66.     [stuID] [int] IDENTITY(1,1) NOT NULL, 
  67.     [stuName] [varchar](50) NOT NULL, 
  68.     [deptID] [int] NOT NULL, 
  69. PRIMARY KEY CLUSTERED  
  70.     [stuID] ASC 
  71. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] 
  72. ) ON [PRIMARY] 
  73. GO 
  74. SET ANSI_PADDING OFF 
  75. GO 
  76. SET IDENTITY_INSERT [dbo].[Student] ON 
  77. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (1, N'计算机张三'1
  78. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (2, N'计算机李四'1
  79. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (3, N'计算机王五'1
  80. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (4, N'生物amy'2
  81. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (5, N'生物kity'2
  82. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (6, N'生物lucky'2
  83. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (7, N'数学_yiming'3
  84. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (8, N'数学_haoxue'3
  85. INSERT [dbo].[Student] ([stuID], [stuName], [deptID]) VALUES (9, N'数学_wuyong'3
  86. SET IDENTITY_INSERT [dbo].[Student] OFF 
  87. /****** Object:  Default [DF__Departmen__depNa__5441852A]    Script Date: 05/11/2015 23:16:23 ******/ 
  88. ALTER TABLE [dbo].[Department] ADD  DEFAULT ('') FOR [depName] 
  89. GO 
  90. /****** Object:  Default [DF__Score__category__5EBF139D]    Script Date: 05/11/2015 23:16:23 ******/ 
  91. ALTER TABLE [dbo].[Score] ADD  DEFAULT ('') FOR [category] 
  92. GO 
  93. /****** Object:  Default [DF__Score__score__5FB337D6]    Script Date: 05/11/2015 23:16:23 ******/ 
  94. ALTER TABLE [dbo].[Score] ADD  DEFAULT ((0)) FOR [score] 
  95. GO 
  96. /****** Object:  Default [DF__Student__stuName__59063A47]    Script Date: 05/11/2015 23:16:23 ******/ 
  97. ALTER TABLE [dbo].[Student] ADD  DEFAULT ('') FOR [stuName] 
  98. GO 
  99. /****** Object:  ForeignKey [FK__Student__deptID__59FA5E80]    Script Date: 05/11/2015 23:16:23 ******/ 
  100. ALTER TABLE [dbo].[Student]  WITH CHECK ADD FOREIGN KEY([deptID]) 
  101. REFERENCES [dbo].[Department] ([depID]) 
  102. GO 
  103.  
  104. 准备环境 

3 结果

面试的时候,没有写出来,当时脑袋昏沉沉的。也确实好久没有写复杂的sql语句了。今天花了2到3个小时,终于试出来了。不知道有没有更好的写法?

 
  1. -- 每个系里的最高分的学生信息 
  2. SELECT Department.depID, Department.depName, Student.stuID, stuName, Dscore.scores 
  3. FROM Department 
  4. LEFT JOIN Student 
  5. on department.depID = student.deptID 
  6. LEFT JOIN (SELECT Score.stuId, SUM(Score) AS scores  
  7.             FROM Score 
  8.             GROUP by stuID 
  9. ) AS Dscore 
  10. on Student.stuID = dScore.stuID 
  11. where exists    (     
  12. select * 
  13. from 
  14. (         
  15.  SELECT deptID, MAX(scores) AS topScores 
  16.  FROM Student 
  17.  LEFT JOIN  
  18.         ( 
  19.  SELECT stuID,SUM(score) AS scores 
  20.  FROM Score 
  21.  GROUP BY stuID) AS newScore 
  22.  ON Student.stuID = newScore.stuID 
  23.  group by deptID) AS depScore 
  24.  where Department.depID = depScore.deptID and Dscore.scores=depScore.topScores 
  25.  ) 
  26.  order by Department.depID,Student.stuID; 

【编辑推荐】


作者:岁月如初

来源:51CTO

相关文章
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
1月前
|
并行计算 安全 Java
C# .NET面试系列四:多线程
<h2>多线程 #### 1. 根据线程安全的相关知识,分析以下代码,当调用 test 方法时 i > 10 时是否会引起死锁? 并简要说明理由。 ```c# public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } ``` 在给定的代码中,不会发生死锁。死锁通常是由于两个或多个线程互相等待对方释放锁而无法继续执行的情况。在这个代码中,只有一个线程持有锁,且没有其他线程参与,因此不
104 3
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
170 0
|
1月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
14天前
|
安全 应用服务中间件 网络安全
渗透测试工程师面试题大全
渗透测试工程师面试题大全
|
26天前
|
SQL 关系型数据库 MySQL
MySQL SQL语句面试准备
MySQL SQL语句面试准备
12 0
|
28天前
|
敏捷开发 安全 API
C/C++ 工程师面试:如何精彩展示你的项目经验并获得高分
C/C++ 工程师面试:如何精彩展示你的项目经验并获得高分
73 0
|
1月前
|
消息中间件 Dubbo Java
互联网 Java 工程师1000道面试题(485页)
互联网 Java 工程师1000道面试题(485页)
28 0
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识

热门文章

最新文章