5.6 连接查询

关系型数据库中允许表和表之间存在关系,这种关系可以把两个甚至多个表的数据联系在一起。利用这种关系,可以查询出某种符合条件的数据,这些数据将是一套符合实际业务逻辑的数据,而数据中这些表和表之间的关系将不存在。换句话说,获取真实世界的原始数据后,根据某种规则把它们拆分成了各种独立的数据,假如想从数据库中再次获取原始数据,那么需要依靠当初拆分时的规则。而这种规则也可以看成表和表之间的联系,要再次实现这种联系,需要用到连接查询。连接分为内连接、外连接和全连接,还有一种叫做自连接,其中最常用的是内连接和外连接。

5.6.1 最简单的连接查询

最简单的连接查询是利用逗号完成的,它利用逗号把FROM后的表名隔开,这就构成了最简单的连接查询。但这么做的意义不大。

【示例34】最简单的连接查询

利用表PRODUCTINFO和CATEGORYINFO实现最简单的连接查询。脚本如下:


SELECT*FROM productinfo,categoryinfo;


【执行效果】

执行效果见图5.34。

5.6 连接查询 - 图1

图 5.34 最简单的连接查询

图5.34中给出的结果并不是全部的结果,这里只是给出了一部分。利用这种方式查询数据将得到两个表的笛卡儿积,也就是说得到两个表中记录数的乘积。而这么做显然没有什么意义。

关于笛卡儿积,就是一个表中的每一行与另一个表中的每一行连接在一起而形成的新表,也就是查询结果。查询结果的记录数是这两个记录数的乘积。

【示例35】验证笛卡儿积

验证查询结果的记录数是被查询的两张表记录数的乘积。分别执行以下脚本:


SELECT COUNT(*)FROM productinfo;

SELECT COUNT(*)FROM categoryinfo;

SELECT COUNT(*)FROM productinfo,categoryinfo;


【执行效果】

执行效果见图5.35。

5.6 连接查询 - 图2

图 5.35 验证笛卡儿积

如何才能使查询的数据有实际意义呢?需要使用WHERE条件,有了WHERE子句,就能查询出想要的有意义的数据了。