商品(编号,品名,进价,库存,售价,厂商编号) 顾客(卡号,姓名,电话,积分)厂商(编号,厂址,名称、电话)销售(顾客卡号,商品编号,数量,日期)根据上面基本表的信息完成下列查询。1 查询积分最高的顾客姓名2 查询销售数量1000以上的商品的厂商电话。3 查询生产商品5种以上的厂商信息。4 查询没有顾客买的商品信息。
时间: 2023-06-20 11:04:31 浏览: 60
1. 查询积分最高的顾客姓名
```
SELECT 姓名 FROM 顾客 ORDER BY 积分 DESC LIMIT 1;
```
2. 查询销售数量1000以上的商品的厂商电话
```
SELECT DISTINCT 厂商.电话 FROM 商品
INNER JOIN 销售 ON 商品.编号 = 销售.商品编号
INNER JOIN 厂商 ON 商品.厂商编号 = 厂商.编号
WHERE 销售.数量 >= 1000;
```
3. 查询生产商品5种以上的厂商信息
```
SELECT 厂商.编号, 厂商.厂址, 厂商.名称, 厂商.电话 FROM 厂商
INNER JOIN 商品 ON 厂商.编号 = 商品.厂商编号
GROUP BY 厂商.编号
HAVING COUNT(DISTINCT 商品.品名) >= 5;
```
4. 查询没有顾客买的商品信息
```
SELECT 商品.* FROM 商品
LEFT JOIN 销售 ON 商品.编号 = 销售.商品编号
WHERE 销售.商品编号 IS NULL;
```
相关问题
商品(编号,品名,进价,库存,售价,厂商编号) 顾客(卡号,姓名,电话,积分)厂商(编号,厂址,名称、电话)销售(顾客卡号,商品编号,数量,日期)根据上面基本表的信息定义一个存储过程,完成下面功能:入
库商品并更新库存信息,同时更新顾客积分信息。
存储过程如下:
```
CREATE PROCEDURE sp_add_stock_and_update_customer_points
@product_id INT,
@quantity INT,
@customer_id INT
AS
BEGIN
-- 获取商品信息
DECLARE @product_cost FLOAT, @product_price FLOAT, @manufacturer_id INT
SELECT @product_cost = 进价, @product_price = 售价, @manufacturer_id = 厂商编号 FROM 商品 WHERE 编号 = @product_id
-- 更新商品库存
UPDATE 商品 SET 库存 = 库存 + @quantity WHERE 编号 = @product_id
-- 计算顾客积分
DECLARE @points INT
SELECT @points = FLOOR(@product_price * @quantity / 10) FROM 商品 WHERE 编号 = @product_id
-- 更新顾客积分
UPDATE 顾客 SET 积分 = 积分 + @points WHERE 卡号 = @customer_id
END
```
该存储过程接收三个参数:商品编号、数量、顾客卡号。它首先获取商品的进价、售价和厂商编号,并将商品库存增加指定数量。然后,它根据购买的商品数量和单价计算顾客应该获得的积分,并将积分添加到顾客的积分中。
注意,这个存储过程只更新商品库存和顾客积分,不涉及销售信息。如果需要记录销售信息,可以在存储过程中添加相应的 INSERT 语句。
商品(编号,品名,进价,库存,售价,厂商编号) 顾客(卡号,姓名,电话,积分) 厂商(编号,厂址,名称、电话) 销售(顾客卡号,商品编号,数量,日期) 建立商品的delete 触发器,只有当此商品没有人买时才可删除,若有销售记录不能删除。
您可以参考下面的 SQL 代码实现商品表的删除触发器:
```
CREATE TRIGGER trig_delete_product
BEFORE DELETE ON 商品
FOR EACH ROW
BEGIN
DECLARE count_sale INT;
SELECT COUNT(*) INTO count_sale FROM 销售 WHERE 商品编号 = OLD.编号;
IF (count_sale > 0) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该商品已有销售记录,无法删除!';
END IF;
END;
```
上述代码中,`BEFORE DELETE ON 商品` 表示在商品表执行删除操作之前触发该触发器;`FOR EACH ROW` 表示对于每个将被删除的行都会执行该触发器;`OLD` 是一个伪记录,代表即将被删除的记录。
该触发器会在删除商品记录时,先查询是否有销售记录与该商品相关联。如果有销售记录,则触发器会抛出一个异常,导致删除操作失败。如果没有销售记录,则触发器不会做任何操作,商品记录会被成功删除。
阅读全文