有人可以一步一步解释如何处理此查询吗?
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?
答案 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
后跟您的查询,它会告诉您。