仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪) 商品(编号,品名,仓库编号、数量,单价) 1根据上面基本表的信息定义视图显示每个仓库保管员姓名、保管商品价值总额 2 观察基本表数据变化时,视图中数据的变化。 3利用视图,查询保管商品价值金额最高的保管员
时间: 2023-10-03 22:10:09 浏览: 70
好的,我会根据您的要求进行回答。
1. 定义视图如下:
```
CREATE VIEW warehouse_info AS
SELECT w.编号 AS 仓库编号, b.姓名 AS 保管员姓名, SUM(g.数量 * g.单价) AS 商品价值总额
FROM 仓库 w
JOIN 保管员 b ON w.保管员编号 = b.编号
JOIN 商品 g ON w.编号 = g.仓库编号
GROUP BY w.编号, b.姓名;
```
2. 当基本表中的数据发生变化时,视图中的数据会实时更新。例如,如果添加了一个新的商品到某个仓库中,该仓库对应的保管员的商品价值总额会相应增加。
3. 利用视图查询保管商品价值金额最高的保管员可以使用以下语句:
```
SELECT 保管员姓名
FROM warehouse_info
WHERE 商品价值总额 = (SELECT MAX(商品价值总额) FROM warehouse_info);
```
这将返回商品价值总额最高的保管员的姓名。
相关问题
仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪) 商品(编号,品名,仓库编号、数量,单价) 建立仓库的delete 触发器,只有当此仓库没有商品时才可删除。
可以使用以下代码来创建该触发器:
```
CREATE TRIGGER trg_delete_warehouse
BEFORE DELETE ON 仓库
FOR EACH ROW
BEGIN
DECLARE cnt INT;
SELECT COUNT(*) INTO cnt FROM 商品 WHERE 仓库编号 = OLD.编号;
IF cnt > 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '该仓库有商品,不能删除!';
END IF;
END;
```
这个触发器会在删除仓库之前执行,检查该仓库是否有商品。如果有商品,则触发器会抛出一个错误,阻止仓库的删除。如果没有商品,则可以成功删除仓库。
仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪)商品(编号,品名,仓库编号、数量,单价)1根据上面基本表的信息定义视图显示每个仓库保管员姓名、保管商品价值总额 2 观察基本表数据变化时,视图中数据的变化。3利用视图,查询保管商品价值金额最高的保管员。
对于第一个问题,可以使用以下SQL语句定义视图:
```
CREATE VIEW warehouse_info AS
SELECT w.warehouse_id, b.name, SUM(c.quantity * c.unit_price) AS total_value
FROM warehouse w, caretaker b, commodity c
WHERE w.caretaker_id = b.caretaker_id AND w.warehouse_id = c.warehouse_id
GROUP BY w.warehouse_id, b.name;
```
这个视图包含了每个仓库的保管员姓名和保管商品总价值。它连接了仓库、保管员和商品表,并使用了SUM函数计算商品总价值。
对于第二个问题,当基本表数据变化时,视图中的数据也会随之变化。例如,如果添加了一些商品记录,那么视图中对应仓库的商品总价值也会增加。
对于第三个问题,可以使用以下SQL语句查询保管商品价值金额最高的保管员:
```
SELECT name
FROM warehouse_info
WHERE total_value = (SELECT MAX(total_value) FROM warehouse_info);
```
这个查询使用子查询找到所有仓库中商品价值最高的值,然后在视图中查找对应的保管员姓名。
阅读全文