SQL面试题

问题描述: 为管理岗位业务培训信息,建立3个表:

S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩

要求实现如下5个处理:

  1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
SELECT SN,SD FROM S
WHERE [S#] IN(
    SELECT [S#] FROM C,SC
    WHERE C.[C#]=SC.[C#]
        AND CN=N'税收基础')

2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位

SELECT S.SN,S.SD FROM S,SC
WHERE S.[S#]=SC.[S#]
    AND SC.[C#]='C2'
  1. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
SELECT SN,SD FROM S
WHERE [S#] NOT IN(
    SELECT [S#] FROM SC 
    WHERE [C#]='C5')
  1. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
SELECT SN,SD FROM S
WHERE [S#] IN(
    SELECT [S#] FROM SC 
        RIGHT JOIN C ON SC.[C#]=C.[C#]
    GROUP BY [S#]
    HAVING COUNT(*)=COUNT(DISTINCT [S#]))

COUNT(*):明确的返回表中的数据个数,是最准确的。

COUNT(字段):不统计为null的数据个数,如果某一列的数据不可能为空,那么结果与COUNT(*)相同。

COUNT(DISTINCT 字段):统计消除重复数据后的数据个数。

  1. 查询选修了课程的学员人数
COUNT(DISTINCT [S#]) FROM SC
  1. 查询选修课程超过5门的学员学号和所属单位
SELECT SN,SD FROM S
WHERE S# IN (
SELECT S# FROM SC
GROUP BY S# 
HAVAING COUNT(DISTINCT C#>5)
)
posted @ 2020-07-18 16:36  柒丶月  阅读(132)  评论(0编辑  收藏  举报