SQL server实验学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 根据上面基本表的信息完成下列查询。 1 查询订购高教出版社教材的学生姓名 2 查询比所有高教出版的图书都贵的图书信息 3 列出每位学生姓名、订购教材书名、价格。心得体会
时间: 2023-09-30 14:02:38 浏览: 36
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代码列表实现
创建学生表:
```
CREATE TABLE student (
sno VARCHAR(10) PRIMARY KEY,
age INT,
gender CHAR(1),
dept VARCHAR(20)
);
```
创建教材表:
```
CREATE TABLE textbook (
tno VARCHAR(10) PRIMARY KEY,
title VARCHAR(50),
pno VARCHAR(10),
price DECIMAL(8,2),
FOREIGN KEY (pno) REFERENCES publisher(pno)
);
```
创建订购表:
```
CREATE TABLE order (
sno VARCHAR(10),
tno VARCHAR(10),
quantity INT,
PRIMARY KEY (sno, tno),
FOREIGN KEY (sno) REFERENCES student(sno),
FOREIGN KEY (tno) REFERENCES textbook(tno)
);
```
创建出版社表:
```
CREATE TABLE publisher (
pno VARCHAR(10) PRIMARY KEY,
name VARCHAR(50),
address VARCHAR(100)
);
```
以上是创建表的代码,接下来就可以向表中插入数据,进行查询等操作。注意,该代码仅供参考,具体实现可能需要根据实际需求进行调整。
sql server学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 建立学生的insert触发器,若向学生表中插入一条记录,则自动向订购表中插入一行,令该学生订购被订购数量最多的教材。
您好,根据您提供的表结构,可以编写如下的 SQL Server 触发器代码:
```
CREATE TRIGGER trg_insert_student ON student
AFTER INSERT
AS
BEGIN
DECLARE @max_book_id INT, @max_book_count INT, @book_id INT, @student_id INT, @quantity INT;
-- 获取插入的学生信息
SELECT @student_id = inserted.学号 FROM inserted;
-- 获取该学生订购数量最多的教材编号和数量
SELECT TOP 1 @book_id = book.编号, @quantity = SUM(订购.数量)
FROM book INNER JOIN 订购 ON book.编号 = 订购.书号
WHERE 订购.学号 = @student_id
GROUP BY book.编号
ORDER BY SUM(订购.数量) DESC;
-- 向订购表中插入一行
INSERT INTO 订购 (学号, 书号, 数量) VALUES (@student_id, @book_id, @quantity);
END;
```
该触发器会在向学生表中插入一条记录时自动触发,获取该学生订购数量最多的教材编号和数量,然后向订购表中插入一行记录。请注意,该触发器假设订购表中已经存在该学生的订购记录。如果该学生没有订购任何教材,则插入的订购记录的数量为 NULL。