,对“商品信息”表和“供应商信息”表进行交叉连接。要求返回商品的产地和供应商所在城市都是“上海市”或者构思“南京市”的相关信息。
SELECT 商品信息.商品名称,商品信息.产地,供应商信息.供应商名称
FROM 商品信息 CROSS JOIN 供应商信息
WHERE 商品信息.产地=供应商信息.供应商所在城市
AND (商品信息.产地='上海市' OR 商品信息.产地='南京市')
ORDER BY 商品信息.产地
5.2自连接
连接不仅可以再不同表之间进行,也可以使一个表同其自身进行连接,这种连接成为自连接,相应的查询称为子连接查询。子连接是与表本身进行的内连接或者外连接。
子连接的连接操作可以利用别名的方法实现一个表自身的连接。实质上,这种子身连接方法与两个表的连接操作完全相似。只是在每次列出这个表时便为它命名一个别名。
例如,对数据库“销售管理系统”中的“客户信息”表进行自连接,查询“客户地址”相同的客户信息,并在查询结果中只返回“客户地址”为“北京市海淀区”或者“北京市朝阳区”的相关信息。
SELECT A.客户姓名,A.联系电话,A.客户地址,B.客户姓名,B.联系电话
FROM 客户信息 A INNER JOIN 客户信息 B
ON A.客户地址=B.客户地址
WHERE A.客户地址='北京市海淀区'
OR A.客户地址='北京市朝阳区'
由于此查询涉及“客户信息”表与自身的连接,因此“客户信息”表以两种角色显示。要区分这连个角色,必须在FROM子句中为“客户信息”表中提供两个不同的别名(A 和B),这两个别名用来限定查询中的列名。如果希望消除客户与自身相匹配的行,则只需在上述语句中添加一个限定条件,即将上述语句改为:
SELECT A.客户姓名,A.联系电话,A.客户地址,B.客户姓名,B.联系电话
FROM 客户信息 A INNER JOIN 客户信息 B
ON A.客户地址=B.客户地址
WHERE (A.客户地址='北京市海淀区'
OR A.客户地址='北京市朝阳区')
AND A.客户姓名<>B.客户姓名
该查询结果和上述查询结果相比较,发现在该查询结果中消除了客户与其自身相匹配的行。
6.学习小结
在学习本章节的内容时,很是感到头疼,这内容也的确是多了点儿。但是,其联系却是十分的紧密,学起来不是很费力,总算把学的知识总结起来了。
在对于多个数据表的连接学习中,数据表的联系很是实际化,在不断练习中学到更多的知识。