多表连接
前面我们演示的是两张表的连接,那么可不可以3张表或更多的表进行连接呢?当然是可以的。实际上他和两张表的连接是基本相同的。
下面我们就以商品表、商品类别表、商品品牌表为例来给大家做一下演示。操作命令及部分结果如下。
SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS a INNER JOIN tdb_goods_cates AS b ON a.cate_id = b.cate_id
INNER JOIN tdb_goods_brands AS c ON a.brand_id = c.brand_id \G;
a、b和c都是别名。
我们发现是这样一个结果,跟我们最初查看商品表的信息基本一样。不一样的是我们这是通过多表连接实现的而之前是纯粹的通过单表的查询实现的。
其实,我们现在可以发现,我们表的连接实际上就是外键约束的逆向操作,我们通过外键把数据分开来存储,我们又通过连接把多张表连接到一块来处理。这就是我们学习的简单的多表连接。
关于连接的补充说明:
1、下面我们来看一下这个例子A LEFT JOIN B join_conditio
这是一个典型的左外连接,数据表B的结果集依赖数据表A,也就是说数据表A中有的记录在B表中才显示出来。否则B表中不能显示。我们再往下看数据表A的结果集根据左连接条件依赖所有数据表(B表除外)左外连接条件决定如何检索数据表B(在没有指定WHERE 条件的情况下) 也就是说A表来决定着B表,如果数据表A的某条记录符合WHERE条件,但是在数据表B中不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。这句话的意思就是有符合条件的就连接,没有的就显示为NULL,这就是左外连接的一点补充说明,当然右外连接调一下方向就行。
2、如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作:col_name IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连接条件的记录后停止搜索更多的行。
这个应该很好理解,就是说你在查找的时候是NULL的,但是你在定义的时候却说不能为NULL,这样两者就会产生冲突,所以说就会在查找到符合连接条件的记录后就会停止搜索。Ok,这就是对连接做的一个简单的补充。