在students数据库中创建一个内联表值函数ncourse,返回指定系的学号、姓名、选修课程名和成绩,并用相关数据进行测试。
时间: 2024-06-08 17:09:47 浏览: 76
首先,我们需要创建一个students数据库,并在其中创建相应的表和数据。在这里,我们创建了一个名为student的表,其中包含学号、姓名和系别三个字段,以及一个名为course的表,其中包含学号、课程名和成绩三个字段。以下是创建表和插入数据的SQL语句:
```sql
-- 创建students表
CREATE TABLE student (
sid INT PRIMARY KEY,
sname VARCHAR(20),
dept VARCHAR(20)
);
-- 插入学生数据
INSERT INTO student VALUES
(1, '张三', '计算机科学'),
(2, '李四', '数学'),
(3, '王五', '物理');
-- 创建course表
CREATE TABLE course (
sid INT,
cname VARCHAR(20),
score INT
);
-- 插入课程数据
INSERT INTO course VALUES
(1, '数据库', 85),
(1, '计算机网络', 90),
(2, '高等数学', 95),
(2, '线性代数', 92),
(3, '力学', 80),
(3, '电磁学', 87);
```
接下来,我们可以创建一个名为ncourse的内联表值函数,用于返回指定系的学号、姓名、选修课程名和成绩。以下是该函数的SQL语句:
```sql
CREATE FUNCTION ncourse (@dept VARCHAR(20))
RETURNS TABLE
AS
RETURN (
SELECT s.sid, s.sname, c.cname, c.score
FROM student s JOIN course c
ON s.sid = c.sid
WHERE s.dept = @dept
);
```
以上SQL语句创建了一个名为ncourse的内联表值函数,该函数接受一个系别参数,返回一个包含学号、姓名、选修课程名和成绩四个字段的结果集。该函数中使用了JOIN操作将student表和course表连接起来,并根据系别参数筛选出符合条件的记录。
最后,我们可以使用以下SQL语句测试该函数:
```sql
SELECT * FROM ncourse('计算机科学');
```
运行以上SQL语句后,将返回一个包含以下记录的结果集:
```
sid | sname | cname | score
----+-------+-------------+-------
1 | 张三 | 数据库 | 85
1 | 张三 | 计算机网络 | 90
```
阅读全文