SQL server实验学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 根据上面基本表的信息完成下列查询。 1 查询订购高教出版社教材的学生姓名 2 查询比所有高教出版的图书都贵的图书信息 3 列出每位学生姓名、订购教材书名、价格。心得体会
时间: 2023-09-30 13:02:38 浏览: 96
1. 查询订购高教出版社教材的学生姓名:
```
SELECT DISTINCT s.学号, s.姓名
FROM 学生 s
JOIN 订购 d ON s.学号 = d.学号
JOIN 教材 t ON d.书号 = t.编号
JOIN 出版社 p ON t.出版社编号 = p.编号
WHERE p.名称 = '高教出版社';
```
2. 查询比所有高教出版的图书都贵的图书信息:
```
SELECT t.编号, t.书名, t.出版社编号, t.价格
FROM 教材 t
WHERE t.价格 > ALL (
SELECT t2.价格
FROM 教材 t2
JOIN 出版社 p ON t2.出版社编号 = p.编号
WHERE p.名称 = '高教出版社'
);
```
3. 列出每位学生姓名、订购教材书名、价格:
```
SELECT s.姓名, t.书名, t.价格
FROM 学生 s
JOIN 订购 d ON s.学号 = d.学号
JOIN 教材 t ON d.书号 = t.编号;
```
实验中需要注意的是,建立基本表时需要考虑表之间的关系,实现查询时需要使用 JOIN 来关联表。此外,SQL 语言的语法需要严格遵守,不同的 DBMS 可能存在一些差异。
相关问题
SQLserver学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 建立学生的insert触发器,若向学生表中插入一条记录,则自动向订购表中插入一行,令该学生订购被订购数量最多的教材。
您好,根据您的问题,我可以为您提供以下的 SQL Server 触发器示例代码:
```
CREATE TRIGGER insert_order_trigger
ON dbo.学生
AFTER INSERT
AS
BEGIN
INSERT INTO dbo.订购 (学号, 书号, 数量)
SELECT TOP 1 i.学号, t.编号, MAX(t.数量)
FROM inserted i
CROSS APPLY (
SELECT t.编号, COUNT(*) AS 数量
FROM dbo.订购 d
JOIN dbo.教材 t ON d.书号 = t.编号
WHERE d.学号 = i.学号
GROUP BY t.编号
) t
ORDER BY t.数量 DESC;
END
```
这个触发器会在向学生表中插入一条记录后自动向订购表中插入一行,令该学生订购被订购数量最多的教材。触发器是基于 `AFTER INSERT` 事件触发的,当学生表中插入一条记录时,它会执行一个 `INSERT INTO SELECT` 语句,该语句会从 `inserted` 表中获取新插入的学生记录,然后使用 `CROSS APPLY` 连接订购表和教材表,计算出每个教材的订购数量,然后选择订购数量最多的教材插入到订购表中。
sqlserver学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 建立学生的insert触发器,若向学生表中插入一条记录,则自动向订购表中插入一行,令该学生订购被订购数量最多的教材。
好的,这是一个关于SQL Server的问题,需要创建一个insert触发器。触发器的作用是向订购表中插入一行数据,这行数据对应着该学生订购数量最多的教材。
以下是创建该触发器的SQL代码:
```
CREATE TRIGGER trg_insert_student
ON student
AFTER INSERT
AS
BEGIN
DECLARE @student_id int
DECLARE @max_book_id int
DECLARE @max_book_count int
-- 获取刚插入的学生ID
SELECT @student_id = inserted.学生ID
FROM inserted
-- 获取该学生订购数量最多的教材ID及数量
SELECT TOP 1 @max_book_id = book.编号, @max_book_count = SUM(order.数量)
FROM [order]
JOIN book ON [order].书号 = book.编号
WHERE [order].学号 = @student_id
GROUP BY book.编号
ORDER BY SUM(order.数量) DESC
-- 插入订购记录
INSERT INTO [order] (学号, 书号, 数量)
VALUES (@student_id, @max_book_id, @max_book_count)
END
```
这个触发器会在学生表(student)中插入一条记录后自动触发。首先,它会获取刚插入的学生ID,然后根据该ID获取该学生订购数量最多的教材ID及数量。最后,它会将这个订购记录插入到订购表(order)中。
需要注意的是,这个触发器假设订购表(order)中已经存在了该学生订购的所有记录。如果订购表中不存在该学生的任何记录,则该触发器会插入一条空记录。需要根据实际情况进行修改。
阅读全文