sqlserver,有一张学生作业表,有3列:课程号、学号、成绩。同一个学号可能会对应多个课程号,如何查询没有选修课程号K001和K002的学生的学号、成绩,请用子查询
时间: 2024-01-14 21:03:22 浏览: 78
可以使用子查询和 NOT IN 来查询没有选修课程号 K001 和 K002 的学生的学号和成绩,SQL语句如下:
```
SELECT 学号, 成绩
FROM 学生作业表
WHERE 学号 NOT IN (
SELECT 学号
FROM 学生作业表
WHERE 课程号 IN ('K001', 'K002')
)
```
这个子查询会先找出选修了课程号 K001 或 K002 的学生,然后外层查询使用 NOT IN 找出没有选修这些课程的学生。
相关问题
sql创建学生成绩表 其中属性有:课程号 学号 选课时间 平时成绩 平时成绩比重 考试成绩
在SQL中,你可以创建一个名为`StudentGrades`的表来存储学生的成绩信息。下面是一个基本的CREATE TABLE语句示例:
```sql
CREATE TABLE StudentGrades (
CourseID INT NOT NULL,
StudentID INT NOT NULL,
EnrollmentDate DATE,
RegularScore DECIMAL(5,2),
RegularScoreWeight FLOAT,
ExamScore DECIMAL(5,2) NOT NULL,
PRIMARY KEY (CourseID, StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
```
在这个例子中:
- `CourseID` 表示课程号,通常为主键的一部分,可以参考另一个名为`Courses`的表;
- `StudentID` 表示学号,也是一个主键,并引用了`Students`表;
- `EnrollmentDate` 学生选择该课程的时间;
- `RegularScore` 平时成绩,保留两位小数;
- `RegularScoreWeight` 平时成绩的比重,通常作为浮点数;
- `ExamScore` 考试成绩,同样保留两位小数,不能为空。
sqlserver,有一个成绩表,共有三列:课程号、学号、成绩,如何求选了3门课程及以上的学生的学号,和他们成绩的平均分
可以使用GROUP BY和HAVING子句来实现:
```
SELECT 学号, AVG(成绩) AS 平均分
FROM 成绩表
GROUP BY 学号
HAVING COUNT(DISTINCT 课程号) >= 3
```
其中GROUP BY将结果按学号分组,AVG函数计算每个学生的平均分,HAVING子句筛选出选了3门课程及以上的学生。
阅读全文