学生(学号,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 根据上面基本表的信息完成下列查询。 1 查询选修了数据库原理的学生的人数和平均成绩。 2 查询选修3门课 以上的学生姓名。 3列出人数超过1000人的系名。 4 查询所有课程都及格的学生姓名。用sql语句完成查询curpos-1232-396-438
时间: 2023-09-18 12:06:36 浏览: 89
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数据库引擎。
1. 创建数据库
在对象资源管理器中右键单击“数据库”,选择“新建数据库”,在弹出的对话框中输入数据库名称,例如“StudentDB”,点击“确定”。
2. 创建表
在“StudentDB”数据库下右键单击“表”,选择“新建表”,在弹出的对话框中输入表名称“学生”,然后依次添加“学号”、“年龄”、“性别”、“系号”四个列,并设置它们的数据类型和长度。
输入以下代码:
```
CREATE TABLE 学生
(
学号 CHAR(8) PRIMARY KEY,
年龄 INT CHECK (年龄 BETWEEN 10 AND 100),
性别 CHAR(2) CHECK (性别 IN ('男', '女')),
系号 CHAR(4) FOREIGN KEY REFERENCES 系(系号)
)
```
同样地,创建“课程”和“选课”两个表。
```
CREATE TABLE 课程
(
课号 CHAR(8) PRIMARY KEY,
课名 NVARCHAR(50),
学分 FLOAT CHECK (学分 BETWEEN 0 AND 10),
学时 INT CHECK (学时 BETWEEN 0 AND 100)
)
CREATE TABLE 选课
(
学号 CHAR(8) FOREIGN KEY REFERENCES 学生(学号),
课号 CHAR(8) FOREIGN KEY REFERENCES 课程(课号),
成绩 FLOAT CHECK (成绩 BETWEEN 0 AND 100),
PRIMARY KEY (学号, 课号)
)
```
3. 创建其他表
如果还需要创建其他表,可以参考以上步骤,在SQL语句中定义主码、外码、和取值范围等约束条件。
4. 插入数据
在表中插入数据,可以使用INSERT语句,例如:
```
INSERT INTO 学生 (学号, 年龄, 性别, 系号) VALUES ('10001', 20, '男', '01')
INSERT INTO 课程 (课号, 课名, 学分, 学时) VALUES ('C001', '数据库原理', 3, 48)
INSERT INTO 选课 (学号, 课号, 成绩) VALUES ('10001', 'C001', 85)
```
5. 查询数据
在表中查询数据,可以使用SELECT语句,例如:
```
SELECT * FROM 学生
SELECT * FROM 课程
SELECT * FROM 选课
```
以上就是利用SQL Server Management Studio对象资源管理器建立学生信息数据库,并定义基本表的步骤。
学生(学号,姓名,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 建立学生表的insert触发器,若向学生表中插入一条记录,则自动向选课表中插入一行,令该生选一门选修人数最多的课。
触发器是一种特殊的存储过程,它会在特定的数据库操作(如插入、更新或删除)发生时自动执行。因此,我们可以创建一个触发器来实现向选课表中插入一行的功能。
具体步骤如下:
1. 创建一个名为trg_insert_student的触发器,它将在向学生表中插入一行时自动触发。
```sql
CREATE TRIGGER trg_insert_student
AFTER INSERT ON 学生
FOR EACH ROW
```
2. 在触发器中查询选修人数最多的课程,并将其插入到选课表中。
```sql
INSERT INTO 选课 (学号, 课号)
SELECT NEW.学号, 课程.课号
FROM 课程
WHERE 课程.课号 = (
SELECT 选课.课号
FROM 选课
GROUP BY 选课.课号
ORDER BY COUNT(*) DESC
LIMIT 1
);
```
完整的触发器代码如下:
```sql
CREATE TRIGGER trg_insert_student
AFTER INSERT ON 学生
FOR EACH ROW
BEGIN
INSERT INTO 选课 (学号, 课号)
SELECT NEW.学号, 课程.课号
FROM 课程
WHERE 课程.课号 = (
SELECT 选课.课号
FROM 选课
GROUP BY 选课.课号
ORDER BY COUNT(*) DESC
LIMIT 1
);
END;
```