Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Осуществление выборки
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Осуществление выборки

Страниц (1): [1]
 

1. AlexAnder - 14 Июня, 2013 - 09:59:26 - перейти к сообщению
Нужно вывести дату урока, имя учителя, и название курса.
Не долго думая сообразил 2 запроса, оба выводят то, что нужно, но в чём между ними разница и какой когда следует использовать?
"Вариант #1" пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT l.lesson_date AS  `date` , t.name AS teacher, c.title AS course
  2. FROM courses AS c, teachers AS t, lessons AS l
  3. WHERE l.course = c.id
  4. AND l.teacher = t.id
  5. ORDER BY  `date` ASC
  6. LIMIT 0 , 30


"Вариант #2" пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT l.lesson_date AS  `date`, t.name AS teacher, c.title AS course
  2. FROM lessons l
  3. LEFT JOIN teachers t ON l.teacher = t.id
  4. LEFT JOIN courses c ON l.course = c.id
  5. ORDER BY `date` ASC
  6. LIMIT 0, 30


courses пишет:
Спойлер (Отобразить)

lessons пишет:
Спойлер (Отобразить)

teachers пишет:
Спойлер (Отобразить)
2. EuGen - 14 Июня, 2013 - 10:04:39 - перейти к сообщению
Разница в том, что первый пример даст обычный JOIN, а второй - LEFT JOIN. (Поясню - LEFT JOIN для несуществующих строк левой таблицы возьмёт из правой NULL-значения, в отличие от обычнго JOIN)
3. AlexAnder - 14 Июня, 2013 - 10:13:18 - перейти к сообщению
Спасибо, вроде разобрался Улыбка

Кстати, вот очень полезная картинка. Может кому-нибудь понадобиться.

Нажмите для увеличения

 

Powered by ExBB FM 1.0 RC1