多表操作语法:
分析:
- 简单查看表中的内容,可以看到有很多重复的数据。例如goods_cate字段中光’笔记本配件’就重复了好几次,而一般情况下汉字所占的字节数比数字占的字节数多(GBK 编码中,一个汉字字符存储需要2个字节。UTF-8编码中,一个汉字字符储存需要3到4个字节。而当规定数字类型为TINYINT时,只占用1个字节),当记录数目很庞大的时候重复的数据就会占用很多内存空间。
- 可以新建一张数据表存储goods的cate,再通过外键约束两张表的内容,可以省略一些内存空间
新建商品类型表与插入类型数据:
多表更新(参照tdb_goods_cates表中每个cate_name的cate_id更新tdb_goods表中每个记录的goods_cate):
多表更新二(先新建tdb_goods_brands的同时插入来自tdb_goods中的brand_name分组,再内连接表tdb_goods实现数据更新):
修改tdb_goods表中原有列的数据类型:
分析:其实写到这里,就已经实现了逻辑外键!这样数据表tdb_goods中的cate_id字段与brand_id字段都是逻辑外键约束,是数字,当呈现给用户时应该呈现相应的中文内容,因此要通过内连接(INNER JOIN)实现联合查询:
三张表的联合查询:
- 用 AS 关键字规定表(或列)的别名,这样书写SQL语句时就可以变得简练
- 注意三张表或三张表以上的多表 INNER JOIN 之间不需要逗号分隔开,直接换行即可
- 从返回结果可以看到cate_name与brand_name都通过逻辑约束得到了相应内容。
顺便一提:左外连接与右外连接
左外连接:
- A LEFT JOIN B ON 条件
- 显示A中全部记录,若B中无匹配,则为NULL
右外连接:
- A RIGHT JOIN B ON 条件
- 显示B中全部记录,若A中无匹配,则为NULL