(4)有学生成绩管理数据库有如下关系模式: 专业表Specialty(zno,zname),zno,zname分别表示专业号,专业名称。 学生Student(sno,sname,sex,sage,zno),其中zno外码。 课程表Course(cno,cname,credit),cno主码。 成绩表SC(sno,cno,grade),其中sno,cno都是外码,grade为成绩。 (1)创建名为proc_s_c_g的存储过程,该存储过程能实现根据专业编号查询某一专业学生的选课信息,包括学生的学号、姓名、专
时间: 2024-02-17 07:00:11 浏览: 146
业名称、课程名称、课程学分和成绩。存储过程的参数为专业编号zno。
创建存储过程的代码如下:
```
CREATE PROCEDURE proc_s_c_g (@zno VARCHAR(10))
AS
BEGIN
SELECT Student.sno, Student.sname, Specialty.zname, Course.cname, Course.credit, SC.grade
FROM Student
JOIN Specialty ON Student.zno = Specialty.zno
JOIN SC ON Student.sno = SC.sno
JOIN Course ON SC.cno = Course.cno
WHERE Student.zno = @zno;
END
```
使用该存储过程查询专业编号为"001"的学生选课信息的代码如下:
```
EXEC proc_s_c_g '001';
```
执行结果会显示专业编号为"001"的学生选课信息,包括学生的学号、姓名、专业名称、课程名称、课程学分和成绩。
相关问题
创建数据库teaching,并创建下列两个表student和sc表,并插入数据。创建表时学号sno,姓名用sname,出生日期用birthday,入学成绩用score,性别用sex,专业用specialty,课号cno,成绩grade。
首先,我们将在MySQL中创建名为"teaching"的数据库。如果你尚未拥有这个数据库,可以使用以下SQL命令来创建它:
```sql
CREATE DATABASE teaching;
```
然后,我们将在"teaching"数据库中创建两个表,分别是"student"和"sc"(假设sc表关联了学生和课程的成绩)。以下是这两个表的创建语句:
### student表
```sql
USE teaching;
CREATE TABLE student (
sno INT PRIMARY KEY, -- 学号
sname VARCHAR(50), -- 姓名
birthday DATE, -- 出生日期
score DECIMAL(4,2), -- 入学成绩
sex ENUM('男', '女'), -- 性别
specialty VARCHAR(50) -- 专业
);
```
### sc表 (假设sno是外键)
```sql
CREATE TABLE sc (
cno INT, -- 课号
sno INT,
grade DECIMAL(4,2), -- 成绩
FOREIGN KEY (sno) REFERENCES student(sno)
);
```
接下来,我们将为每个表插入一些示例数据。由于这里是一个文本环境,我们将提供简单的插入语句,实际操作中你需要运行这些语句。例如:
### 插入student表数据
```sql
INSERT INTO student (sno, sname, birthday, score, sex, specialty) VALUES
(1, '张三', '1998-01-01', 650.00, '男', '计算机科学'),
(2, '李四', '2000-05-20', 720.00, '女', '软件工程');
```
### 插入sc表数据
```sql
INSERT INTO sc (cno, sno, grade) VALUES
(101, 1, 85.00),
(102, 1, 90.00),
(103, 2, 92.50);
```
数据库命令为specialty表(专业表)的limit字段设置一个默认值为“6年”。
在SQL中,如果你想要给"limit"字段设置一个默认值,通常这个操作是在创建表的时候完成的,因为大多数数据库系统并不直接支持修改已存在的表结构并添加默认值。假设"specialty"表是一个PostgreSQL、MySQL或Oracle等支持默认约束的数据库,你可以使用ALTER TABLE语句来实现:
```sql
CREATE OR ALTER TABLE specialty
ADD COLUMN IF NOT EXISTS limit TEXT DEFAULT '6年';
```
对于不支持默认约束的数据库如SQL Server,可以先检查该字段是否存在,如果不存在则添加:
```sql
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'specialty') AND name = N'limit')
BEGIN
ALTER TABLE specialty ADD limit NVARCHAR(10) CONSTRAINT DF_specialty_limit DEFAULT '6年';
END;
```
请注意,上述代码示例假设"limit"是文本类型的字段,并且单位为年。具体的语法可能会因数据库系统的不同而有所差异。
阅读全文