2012-06-18 4 views
1

Может кто-нибудь объяснить шаг за шагом, как этот запрос обрабатывается?как обрабатывается запрос?

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 

ли это означает, что результат возвращается внутреннее соединение в самом первом этапе и его дальше LEFT Присоединился?

+0

должен быть запрошен. sorry –

+0

Вы спрашиваете о логических/концептуальных шагах или реальных физических операторах, которые использует MySQL? –

ответ

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 

Обратите внимание, что это не означает, что СУБД будет обрабатывать запрос в таком порядке. Он может выбрать другой путь. Независимо от того, как он его обрабатывает, набор результатов должен быть таким же, как если бы он обрабатывался таким образом.

0

Скорее всего, да, запустите EXPLAIN, а затем ваш запрос, и он скажет вам.

+1

Я сделал, но он не сказал мне, что я мог понять. –

+1

Итак, ваш вопрос должен быть: вы можете объяснить мне вывод EXPLAIN. Конечно: первый шаг - это [руководство] (http://dev.mysql.com/doc/refman/5.5/en/explain-output.html), и если это немного непрактично [это кажется разумным интро] (http://www.slideshare.net/phpcodemonkey/mysql-explain-explained). Если после этого вы все еще чувствуете неуверенность в некоторых деталях, пожалуйста, сообщите нам вывод «EXPLAIN» и сообщите нам, что вы понимаете, и какие части у вас нет. (Я бы посоветовал открыть для этого новый вопрос). – Wrikken

+0

@Wrikken Я считаю, что OP задавал общий вопрос SQL о том, как работает 'LEFT JOIN'. – RandomSeed

Смежные вопросы