正确答案:
① 患者(病历号,姓名,性别,年龄,联系电话,科室编号),主码(病历号)
② 医生(工号,医生姓名,职称,科室编号,专长),主码(工号)
③ 科室(科室编号,科室名称,位置,电话),主码(科室编号)
④ 就诊记录(就诊编号,就诊日期,诊断结果,处方内容,挂号费,病历号,工号),主码(就诊编号)
正确答案:CREATE USER 'tom'@'localhost' IDENTIFIED BY '123456';
2. 事务操作
请将以下事务操作按照正确顺序排列(填写序号)。
① UPDATE account SET balance = balance - 100 WHERE id = 'A';
② START TRANSACTION;
③ COMMIT;
④ UPDATE account SET balance = balance + 100 WHERE id = 'B';
⑤ ROLLBACK;
正确答案:CREATE VIEW vip_orders AS SELECT order_id, member_id, book_id, unit_price FROM sale_order WHERE unit_price >= 60;
(8) 存储过程 proc_update_price(按图书编号修改定价)
正确答案:
CREATE PROCEDURE proc_update_price(IN p_book_id INT, IN p_new_price DECIMAL(10,2))
BEGIN
UPDATE book SET price = p_new_price WHERE book_id = p_book_id;
END
2. 商品订单系统
(1) 增加字段"产地"GOrigin VARCHAR(50)
正确答案:ALTER TABLE Goods ADD GOrigin VARCHAR(50);
(2) 将所有"电子产品"价格降低10%
正确答案:UPDATE Goods SET GPrice = GPrice * 0.9 WHERE GCategory = '电子产品';
(3) 查询单价 < 50 元的商品编号、名称和库存
正确答案:SELECT GID, GName, GStock FROM Goods WHERE GPrice < 50;
(4) 查询客户 C001 的所有订单(商品名称、购买数量、下单日期)
正确答案:SELECT Goods.GName, Orders.OQuantity, Orders.ODate FROM Orders JOIN Goods ON Orders.GID = Goods.GID WHERE Orders.CID = 'C001';
(5) 统计每个客户的下单次数,降序
正确答案:SELECT CID, COUNT(*) AS OrderCount FROM Orders GROUP BY CID ORDER BY OrderCount DESC;
(6) 查询没有购买过任何商品的客户编号和姓名
正确答案:SELECT Customer.CID, Customer.CName FROM Customer LEFT JOIN Orders ON Customer.CID = Orders.CID WHERE Orders.OID IS NULL;
(7) 在 ODate 上创建普通索引 idx_odate
正确答案:CREATE INDEX idx_odate ON Orders(ODate);
(8) 存储过程 proc_add_order(插入订单记录)
正确答案:
CREATE PROCEDURE proc_add_order(IN p_cid VARCHAR(20), IN p_gid VARCHAR(20), IN p_qty INT)
BEGIN
INSERT INTO Orders(CID, GID, OQuantity, ODate) VALUES(p_cid, p_gid, p_qty, CURDATE());
END
三、综合练习5-补充
1. 课程预约系统
(1) 增加字段"上课地点"CLocation VARCHAR(50)
正确答案:ALTER TABLE Class ADD CLocation VARCHAR(50);
(2) 将所有"瑜伽"类课程价格降低10%
正确答案:UPDATE Class SET CPrice = CPrice * 0.9 WHERE CCategory = '瑜伽';
(3) 查询单价 < 100 元的课程编号、名称和剩余名额
正确答案:SELECT CID, CName, CSeats FROM Class WHERE CPrice < 100;
(4) 查询会员 M001 的所有预约信息(课程名称、预约数量、预约日期)
正确答案:SELECT CName, RQuantity, RDate FROM Reservation LEFT JOIN Class ON Reservation.CID = Class.CID WHERE MID = 'M001';
(5) 统计每个会员的预约次数,降序
正确答案:SELECT MID, COUNT(*) AS OrderCount FROM Reservation GROUP BY MID ORDER BY OrderCount DESC;
(6) 查询没有预约过任何课程的会员编号和姓名
正确答案:SELECT MID, MName FROM Member WHERE MID NOT IN (SELECT MID FROM Reservation);
(7) 在 RDate 上创建普通索引 idx_rdate
正确答案:CREATE INDEX idx_rdate ON Reservation(RDate);
(8) 存储过程 proc_add_reservation(插入预约记录)
正确答案:
CREATE PROCEDURE proc_add_reservation(IN p_mid VARCHAR(20), IN p_cid VARCHAR(20), IN p_qty INT)
BEGIN
INSERT INTO Reservation (MID, CID, RQuantity, RDate) VALUES (p_mid, p_cid, p_qty, CURDATE());
END