sql查询步骤

时间:2018-11-15 17:52:29

标签: sql postgresql

有3种关系:

  • person(id, first_name, original_surname, new_surname, birth_date)
  • marriage(m_id, w_id, date)
  • child_of(child_id, father_id, mother_id)

对同胞的查询为:

(
  select P1.id, P2.id
  from (
    person join child_of on id=child_id
  ) as P1
    natural join (person join child_of on id=child_id) as P2
         using (father_id)
  where P1.mother_id < P2.mother_id
)
union
(
   select P1.id, P2.id
   from (
     person join child_of on id=child_id
   ) as P1
     natural join (person join child_of on id=child_id) as P2
             using (mother_id)
   where P1.father_id < P2.father_id
 )

我是sql的新手,我试图了解“幕后”的情况。最后创建哪个表,以及查询如何查找同父异母的兄弟。

是否已创建P1,然后将其与P2联接,然后它们都联接在一起,where对表有何影响?

这里的时间顺序是什么,首先发生什么,其次发生...

1 个答案:

答案 0 :(得分:1)

此处的处理不会超出解析器步骤,该步骤将检测查询中的语法错误。自然连接(最好避免)不会使用USING子句。

但是假设您的意思是INNER而不是NATURAL,答案很大程度上取决于表中数据的数量和分布以及数据库的配置。

此外,表上的索引也会影响答案。

执行这种查询的方式有很多,数据库引擎将自动选择在给定情况下最快的查询。

您可以使用EXPLAIN命令查看PostgreSQL选择哪种执行计划。