该笔记整理自Ben Forta著,钟鸣、刘晓霞译,人民邮电出版社出版的《SQL必知必会》第4版,具体内容有部分省略。
关于存储过程的部分内容,结合了《SQL必知必会》和《MySQL必知必会》。
代码测试环境:Win7-64bit、MySQL 5.7、MySQL Workbench 6.3。
1 样例表解释说明
书中所用的表是一个玩具经销商使用的订单录入系统的组成部分,包括:
管理供应商Vendors。
管理产品目录Products。
管理顾客列表Customers。
录入顾客订单Orders、OrderItems。
具体的创建表、更改表以及插入数据的内容,可参考《SQL必知必会》笔记8-建表create、插入insert、更新update、删除delete:http://www.jianshu.com/p/2e840d679193。
1.1 供应商Vendors表
Vendors表存储销售产品的供应商信息,每个供应商在表中都有一个记录,供应商ID列(vend_id)作为主键,用于进行产品与供应商的匹配。
列
说明
vend_id
唯一的供应商ID
vend_name
供应商的名字
vend_address
供应商的地址
vend_city
供应商所在的城市
vend_state
供应商所在州
vend_zip
供应商地址的邮政编码
vend_country
供应商所在国家
1.2 产品目录Products表
Products表每行代表一个产品,每个产品有唯一的ID(prod_id),并作为表的主键。借助vend_id(供应商唯一ID)这一外键,与供应商Vendors表的vend_id相关联。
列
说明
prod_id
唯一的产品ID
vend_id
产品供应商ID(关联到Vendors表的vend_id)
prod_name
产品名
prod_price
产品价格
prod_desc
产品描述
1.3 顾客信息Customers表
Customers表存储所有顾客信息,每个顾客有唯一的ID(cust_id),并作为表的主键。
列
说明
cust_id
唯一的顾客ID
cust_name
顾客名
cust_address
顾客的地址
cust_city
顾客所在城市
cust_state
顾客所在州
cust_zip
顾客地址邮政编码
cust_country
顾客所在国家
cust_contact
顾客的联系名
cust_email
顾客的电子邮件地址
1.4 订单Orders表
Orders表存储顾客订单(不是订单细节),每个订单有唯一编号(order_num),并作为表的主键。借助cust_id(顾客唯一ID)这一外键,与顾客信息Customers表的cust_id相关联。
列
说明
order_num
唯一的订单号
order_state
订单日期
cust_id
订单顾客ID(关联到Customers表的cust_id)
1.5 订单明细OrderItems表
OrderItems表存储每个订单中的实际产品,每个订单的每个产品一行。对于Orders表的每一行,在OrderItems表中有一行或者多行,也就是一个顾客可以买多件产品。每个订单产品由订单号和订单产品唯一标识,也就是联合主键。订单产品order_num列作为外键,与Orders表的order_num相关联,此外,产品唯一ID(prod_id)与Products表的prod_id相关联。
列
说明
order_num
订单号(关联到Orders表的order_num)
order_item
订单产品号(订单内的顺序)
prod_id
产品ID(关联到Products表的prod_id)
quantity
物品数量
item_price
物品价格
2 创建相关表
2.1 创建供应商Vendors表
CREATE TABLE