查询三个表

时间:2010-09-02 08:09:31

标签: sql

select  record1.fname, record2.fname, record3.fname 
from record1, record2, record3 
where record1.country= record2.country
or record1.country=record3.country

如果您将使用内部联接和左联接,上述代码的等效查询是什么?我还不熟悉join,但我知道如果只有两个表,如何使用join。

3 个答案:

答案 0 :(得分:2)

您应该开始使用官方的ANSI SQL Join语法 - 使用这样的内部联接:

select  
   record1.fname, record2.fname, record3.fname 
from 
   record1
inner join 
   record2 on record1.country= record2.country
inner join 
   record3 on record1.country=record3.country

使用这种方法,在需要的地方切换到外连接非常容易:

select  
   record1.fname, record2.fname, record3.fname 
from 
   record1
left outer join 
   record2 on record1.country= record2.country
left outer join 
   record3 on record1.country=record3.country

所以开始使用显式的JOIN语法 - 不要只列出一堆表并在WHERE子句中定义连接条件 - 这是不推荐使用的,当你读它时不是很清楚。

杰夫阿特伍德(这个网站背后的人之一)也有一篇很棒的博客文章visualizing the join types - 强烈推荐,非常容易理解和“获取”类型是什么以及它们如何运作。

答案 1 :(得分:1)

我将其作为内部联接查询呈现,而不是左联接查询。左连接版本将完全相同,只需将INNER替换为LEFT

SELECT r1.fname, 
       r2.fname, 
       r3.fname 
FROM   record1 r1
INNER
JOIN   record2 r2
       ON r1.country = r2.country
INNER
JOIN   record3 r3
       ON r2.country = r3.country

我还使用了r1r2r3的表别名,因为至少对我来说,它使查询更容易阅读/更少“忙”而不是使用表的全名作为别名。

答案 2 :(得分:1)

-- INNER  
SELECT r1.fname, r2.fname, r3.fname
FROM record1 r1

    INNER JOIN record2 r2 ON r2.country = r1.country
    INNER JOIN record3 r3 ON r3.country = r2.country

-- LEFT OUTER
SELECT r1.fname, r2.fname, r3.fname
FROM record1 r1

    LEFT OUTER JOIN record2 r2 ON r2.country = r1.country
    LEFT OUTER JOIN record3 r3 ON r3.country = r2.country