如何处理查询?

时间:2012-06-18 21:29:53

标签: mysql

有人可以一步一步解释如何处理此查询吗?

SELECT F.ID,
       F.FirstName,
       h.UserID,
       h.TYPE,
       L.UserID,
       L.LOGGEDIN
FROM   users AS F
       INNER JOIN history AS h
         ON h.USERID = F.ID
       LEFT JOIN Login AS L
         ON L.USERID = f.MONEY 

如果我删除了L.UserID, L.LOGGEDIN and LEFT JOIN,它会给我这个结果:

SELECT F.ID,
       F.FirstName,
       h.UserID,
       h.TYPE
FROM   users AS F
       INNER JOIN history AS h
         ON h.USERID = F.ID 

ID  FirstName   UserID  TYPE
6   rafal            6  A
6   rafal            6  A
6   rafal            6  A
5   rafal            5  B

是否意味着INNER Join在第一步中返回结果并进一步LEFT Joined?

2 个答案:

答案 0 :(得分:1)

是。您还可以将查询的FROM部分写为:

FROM   ( users AS F
         INNER JOIN history AS h
           ON h.USERID = F.ID
       )
       LEFT JOIN Login AS L
         ON L.USERID = f.MONEY 

如果这有助于你。这就是FROM部分的解析方式。

现在订单或处理首先是FROM子句,然后是SELECT。对于更复杂的查询,它是:

FROM -> WHERE  -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> 
-> UNION -> ORDER BY -> OFFSET -> LIMIT 

请注意,这并不意味着DBMS将按此顺序处理查询。它可以选择采取不同的路径。无论它如何处理它,结果集应该与以这种方式处理相同。

答案 1 :(得分:0)

最有可能的是,运行EXPLAIN后跟您的查询,它会告诉您。