今日学习内容:
在某仓库管理系统中,有两个表:KC表和CKMX表, 其结构和部分数据如下: ;
表 1 、KC 表结构和数据
材料代码
材料名称
单位
单价
库存数量
01
计算机
台
5000
10
02
电视机
台
2000
20
…
…
…
…
…
表 2 、CKMX 表结构和数据
编号
材料代码
出库日期
出库数量
1
01
2009-10-10
4
2
01
2009-11-20
3
3
02
2009-11-20
5
…
…
…
…
其中, KC 表保存当前仓库库存材料的信息,CKMX 表存放库存材料的出库名细。(例
如, KC 表第一行表示该仓库中现有计算机 10 台。CKMX 表第二行表示 2009 年 11 月 20 日
从仓库中出库 3 台计算机。)
完成如下题目(每个题目限用一个 SQL 语句实现):
1 、写出创建 KC 表和 CKMX 表的 SQL 语句。(数据类型自己定义)。(3 分)
复制代码
1 CREATE TABLE KC (
2 材料代码 CHAR(2),
3 材料名称 VARCHAR(50),
4 单位 VARCHAR(10),
5 单价 DECIMAL(10, 2),
6 库存数量 INT,
7 PRIMARY KEY (材料代码)
8 );
9
10 CREATE TABLE CKMX (
11 编号 INT PRIMARY KEY,
12 材料代码 CHAR(2),
13 出库日期 DATE,
14 出库数量 INT,
15 FOREIGN KEY (材料代码) REFERENCES KC(材料代码)
16 );
复制代码
2 、向 KC 表中添加一条记录,材料代码:09,材料名称:打印机,单位:箱,单价:50,库存数量: 10(3 分)
1 INSERT INTO KC (材料代码, 材料名称, 单位, 单价, 库存数量)
2 VALUES ('09', '打印机', '箱', 50, 10);
3 、删除 CKMX 表中出库数量为空的记录。(3 分)
1 DELETE FROM CKMX WHERE 出库数量 IS NULL;
4 、查询“计算机”的出库总量。(3 分)
1 SELECT SUM(出库数量) AS 出库总量
2 FROM CKMX
3 WHERE 材料代码 = '01';
5、查询 KC 表所有材料的库存情况,并按库存数量从大到小排序。(3 分)
1 SELECT * FROM KC
2 ORDER BY 库存数量 DESC;
6 、从表 CKMX 中统计出各种材料的出库次数和出库总数量。(3 分)
1 SELECT 材料代码, COUNT(*) AS 出库次数, SUM(出库数量) AS 出库总数量
2 FROM CKMX
3 GROUP BY 材料代码;
7 、查询材料名称含“电”字, 单价大于 3000 的材料情况。(3 分)
SELECT * FROM KC
WHERE 材料名称 LIKE '%电%' AND 单价 > 3000;
8、创建视图 view_ 1 ,查询电视机的出库情况。(3 分)
1 CREATE VIEW view_1 AS
2 SELECT CKMX.编号, KC.材料名称, CKMX.出库日期, CKMX.出库数量
3 FROM CKMX
4 JOIN KC ON CKMX.材料代码 = KC.材料代码
5 WHERE KC.材料名称 = '电视机';
9 、创建带输入参数的存储过程 proc_c,根据输入参数查询指定材料代码的材料名称、单位、单价、出库日期、出库数量。(3 分)
复制代码
1 CREATE PROCEDURE proc_c(IN 材料代码 CHAR(2))
2 BEGIN
3 SELECT KC.材料名称, KC.单位, KC.单价, CKMX.出库日期, CKMX.出库数量
4 FROM KC
5 JOIN CKMX ON KC.材料代码 = CKMX.材料代码
6 WHERE KC.材料代码 = 材料代码;
7 END;
复制代码
10 、创建触发器 trig_p,使得插入 KC 表中的一条记录时, 默认单位为“台”。(3 分)
复制代码
1 CREATE TRIGGER trig_p BEFORE INSERT ON KC
2 FOR EACH ROW
3 BEGIN
4 IF NEW.单位 IS NULL THEN
5 SET NEW.单位 = '台';
6 END IF;
7 END