学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 根据上面基本表的信息完成下列查询。 1统计每位学生订数数量 2 统计每位学生应缴书费。 3 统计订购3册以上的教材信息。 4 统计没有人定的教材信息。
时间: 2024-05-04 16:21:07 浏览: 24
1. 统计每位学生订数数量:
```
SELECT 学生.学号, COUNT(*) AS 订购数量
FROM 学生, 订购
WHERE 学生.学号 = 订购.学号
GROUP BY 学生.学号;
```
2. 统计每位学生应缴书费:
```
SELECT 学生.学号, SUM(订购.数量 * 教材.价格) AS 应缴书费
FROM 学生, 订购, 教材
WHERE 学生.学号 = 订购.学号 AND 订购.书号 = 教材.编号
GROUP BY 学生.学号;
```
3. 统计订购3册以上的教材信息:
```
SELECT 教材.书名, SUM(订购.数量) AS 订购数量
FROM 教材, 订购
WHERE 教材.编号 = 订购.书号
GROUP BY 教材.书名
HAVING SUM(订购.数量) >= 3;
```
4. 统计没有人定的教材信息:
```
SELECT 教材.编号, 教材.书名
FROM 教材
WHERE 教材.编号 NOT IN (SELECT DISTINCT 书号 FROM 订购);
```
相关问题
学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址)代码实现sql
创建表格:
```
CREATE TABLE student (
id INT PRIMARY KEY,
age INT,
gender VARCHAR(10),
department VARCHAR(20)
);
CREATE TABLE textbook (
id INT PRIMARY KEY,
name VARCHAR(50),
publisher_id INT,
price DECIMAL(10, 2)
);
CREATE TABLE orders (
student_id INT,
textbook_id INT,
quantity INT,
PRIMARY KEY (student_id, textbook_id)
);
CREATE TABLE publisher (
id INT PRIMARY KEY,
name VARCHAR(50),
address VARCHAR(100)
);
```
插入数据:
```
INSERT INTO student (id, age, gender, department)
VALUES
(1, 18, 'male', 'Computer Science'),
(2, 20, 'female', 'Mathematics'),
(3, 19, 'male', 'Physics');
INSERT INTO textbook (id, name, publisher_id, price)
VALUES
(1, 'Introduction to Algorithms', 1, 99.99),
(2, 'Linear Algebra and Its Applications', 2, 79.99),
(3, 'Classical Mechanics', 3, 69.99),
(4, 'Introduction to Probability', 1, 59.99);
INSERT INTO orders (student_id, textbook_id, quantity)
VALUES
(1, 1, 1),
(1, 2, 2),
(2, 3, 1),
(3, 4, 3);
INSERT INTO publisher (id, name, address)
VALUES
(1, 'MIT Press', 'Cambridge, MA'),
(2, 'Wiley', 'Hoboken, NJ'),
(3, 'Pearson', 'London');
```
查询数据:
1. 查询所有学生的信息
```
SELECT * FROM student;
```
2. 查询所有教材的信息
```
SELECT * FROM textbook;
```
3. 查询所有出版社的信息
```
SELECT * FROM publisher;
```
4. 查询所有订单的信息
```
SELECT * FROM orders;
```
5. 查询学号为1的学生订购的所有教材及数量
```
SELECT textbook.name, orders.quantity
FROM textbook
JOIN orders ON textbook.id = orders.textbook_id
WHERE orders.student_id = 1;
```
6. 查询订购了教材编号为2的教材的学生的信息
```
SELECT student.*
FROM student
JOIN orders ON student.id = orders.student_id
WHERE orders.textbook_id = 2;
```
7. 查询出版社名称为“MIT Press”的所有教材
```
SELECT textbook.*
FROM textbook
JOIN publisher ON textbook.publisher_id = publisher.id
WHERE publisher.name = 'MIT Press';
```
学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格)订购(学号,书号.数量)出版社(编号,名称,地址) 建立学生的insert触发器,若向学生表中插入一条记录,则自动向订购表中插入一行,令该学生订购被订购数量最多的教材。
好的,您的问题是如何建立学生表的insert触发器,实现向订购表中插入一行,记录该学生订购数量最多的教材。
以下是实现该功能所需的SQL代码:
首先,我们需要创建订购表:
```sql
CREATE TABLE 订购 (
学号 VARCHAR(10),
书号 VARCHAR(10),
数量 INT,
PRIMARY KEY (学号, 书号)
);
```
然后,我们需要创建一个触发器,在学生表中插入新记录时,自动向订购表中插入一行,记录该学生订购数量最多的教材。
```sql
CREATE TRIGGER insert_order_trigger
AFTER INSERT ON 学生
FOR EACH ROW
BEGIN
-- 查询该学生订购数量最多的教材
SELECT 教材.编号 INTO @book_id
FROM 教材
JOIN 订购 ON 订购.书号 = 教材.编号
WHERE 订购.学号 = NEW.学号
GROUP BY 教材.编号
ORDER BY SUM(订购.数量) DESC
LIMIT 1;
-- 插入一行到订购表中
INSERT INTO 订购 (学号, 书号, 数量) VALUES (NEW.学号, @book_id, 1);
END;
```
触发器的作用是在学生表中插入新记录时触发,查询该学生订购数量最多的教材,然后插入一行到订购表中,记录该学生订购数量最多的教材。
注意:以上代码仅供参考,具体实现可能需要根据实际情况进行调整。同时,该触发器可能会对数据库性能产生一定影响,建议在实际应用中进行充分测试和优化。