学生(学号,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 根据上面基本表的信息完成下列查询。 1 查询选修了数据库原理的学生的人数和平均成绩。 2 查询选修3门课 以上的学生姓名。 3列出人数超过1000人的系名。 4 查询所有课程都及格的学生姓名。用sql语句完成查询curpos-1232-396-438
时间: 2023-09-18 17:06:36 浏览: 146
1. 查询选修了数据库原理的学生的人数和平均成绩。
```
SELECT COUNT(DISTINCT 选课.学号) AS 选修人数, AVG(选课.成绩) AS 平均成绩
FROM 选课
JOIN 学生 ON 学生.学号 = 选课.学号
JOIN 课程 ON 课程.课号 = 选课.课号
WHERE 课程.课名 = '数据库原理';
```
2. 查询选修3门课以上的学生姓名。
```
SELECT 学生.姓名
FROM 学生
JOIN (
SELECT 学号, COUNT(*) AS 选修课程数
FROM 选课
GROUP BY 学号
HAVING COUNT(*) >= 3
) AS 选修课程数表 ON 选修课程数表.学号 = 学生.学号;
```
3. 列出人数超过1000人的系名。
```
SELECT 系名
FROM 学生
GROUP BY 系名
HAVING COUNT(DISTINCT 学号) > 1000;
```
4. 查询所有课程都及格的学生姓名。
```
SELECT 学生.姓名
FROM 学生
WHERE NOT EXISTS (
SELECT *
FROM 课程
WHERE NOT EXISTS (
SELECT *
FROM 选课
WHERE 选课.学号 = 学生.学号 AND 选课.课号 = 课程.课号 AND 选课.成绩 >= 60
)
);
```
相关问题
利用SQL Server Management Studio对象资源管理器建立学生信息数据库,并定义以下基本表: 学生(学号,年龄,性别,系号) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 定义主码、外码、和年龄、学分、学分的取值范围
好的,您想了解如何利用SQL Server Management Studio对象资源管理器建立学生信息数据库,并定义以下基本表:学生(学号,年龄,性别,系号)、课程(课号,课名,学分,学时)、选课(学号,课号,成绩),同时定义主码、外码、和年龄、学分、学分的取值范围。
下面是利用SQL Server Management Studio对象资源管理器建立学生信息数据库的步骤:
1. 打开SQL Server Management Studio,并通过连接器连接到服务器。
2. 在“对象资源管理器”窗口下,右击“数据库”文件夹,并选择“新建数据库”。
3. 输入数据库名称,并选择文件夹用于存储数据库文件。
4. 点击“选项”设置数据库参数,如数据文件增长方式、日志文件增长方式等。
5. 点击“确定”创建数据库。
下面是定义基本表的步骤:
1. 在“对象资源管理器”窗口下,右击数据库名称,并选择“新建查询”。
2. 输入如下SQL语句:
CREATE TABLE 学生 (
学号 INT PRIMARY KEY,
年龄 INT CHECK (年龄 > 0 AND 年龄 < 120),
性别 CHAR(1),
系号 INT REFERENCES 系(系号)
);
CREATE TABLE 课程 (
课号 INT PRIMARY KEY,
课名 VARCHAR(50) NOT NULL,
学分 DECIMAL(4,1) CHECK (学分 > 0 AND 学分 <= 10),
学时 INT CHECK (学时 > 0 AND 学时 <= 200)
);
CREATE TABLE 选课 (
学号 INT REFERENCES 学生(学号),
课号 INT REFERENCES 课程(课号),
成绩 DECIMAL(4,1) CHECK (成绩 >= 0 AND 成绩 <= 100),
CONSTRAINT PK_选课 PRIMARY KEY (学号, 课号)
);
3. 点击“执行”运行SQL语句,完成基本表的定义。
在上述SQL语句中,主码包括学生表的学号、课程表的课号和选课表的学号和课号。外码包括学生表的系号和选课表的学号和课号。年龄和学分的取值范围通过CHECK约束进行定义。
希望以上信息能够帮助到您。
学生(学号,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 根据上面基本表的信息定义一个存储过程,完成下面功能: 入口参数:学号 1 显示学生的选课信息 2 如果学生没选课,让他选1号课,插入一条选课记录,成绩为0 3 如果学生所有课都不及格,删掉该学生记录
好的,根据您的要求,我设计了以下存储过程:
```
CREATE PROCEDURE show_student_course_info
@student_id INT
AS
BEGIN
-- 查询学生选课信息
SELECT c.course_name, c.course_credit, c.course_hour, s.grade
FROM 选课 s
JOIN 课程 c ON s.course_id = c.course_id
WHERE s.student_id = @student_id;
-- 如果学生没选课,让他选1号课,插入一条选课记录,成绩为0
IF NOT EXISTS (SELECT * FROM 选课 WHERE student_id = @student_id)
BEGIN
INSERT INTO 选课 (student_id, course_id, grade)
VALUES (@student_id, 1, 0);
PRINT '学生未选课,已为其插入一条选课记录,成绩为0';
END
-- 如果学生所有课都不及格,删掉该学生记录
IF NOT EXISTS (SELECT * FROM 选课 WHERE student_id = @student_id AND grade >= 60)
BEGIN
DELETE FROM 学生 WHERE student_id = @student_id;
PRINT '学生所有课都不及格,已删除该学生记录';
END
END
```
这个存储过程接收一个学号参数,会根据学号查询该学生的选课信息,并根据题目要求进行处理。如果学生没有选课,会插入一条选课记录,成绩为0;如果学生所有课都不及格,会删除该学生记录。
阅读全文