Главная SQL Right Join
E-mail Печать PDF

RIGHT JOIN - возвращает строки из правой таблицы(table_name2), даже если их нет левой таблице (table_name1).

Синтаксис SQL RIGHT JOIN

1
2
3
4
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

Note - Замечание: В некоторых базах данных RIGHT JOIN имеет имя RIGHT OUTER JOIN.

Пример SQL RIGHT JOIN

Есть таблица "Persons":

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Есть таблица "Orders":

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15

Теперь мы хотим получить список всех лиц и их заказов из таблицы выше.

Для этого используем такой запрос:

1
2
3
4
5
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

Результат запроса:

LastName FirstName OrderNo
Hansen Ola 22456
Hansen Ola 24562
Pettersen Kari 77895
Pettersen Kari 44678
34764

Комментарии

 
0 #1 McKinseyBA 2010-06-11 11:55 Наверное, имеет смысл привести более наглядные примеры, так как результат использования Right Join и Left Join в имеющихся одинаков, что не способствует усвоению отличий (если не вчитываться в шапку)

А вообще, ресурс - прекрасен, автор - молодец!
Цитировать
 
 
0 #2 Валерий 2010-06-13 10:34 Да согласен с предидущем челом.. Я так и не понял чем RIGHT от LEFT отличается.. Что то там про вывод результата даже если его нет в одной из таблиц Цитировать
 
 
+3 #3 Артем 2010-06-16 09:18 Ну а я все понял ))
автор спасибо за примеры
было бы их еще побольше тогда вобще класс!
Цитировать
 
 
0 #4 StitchUA 2010-06-18 10:20 Ну если что не ясно, то посмотрите здесь: ru.wikipedia.org/.../Join_(SQL) Цитировать
 
 
+3 #5 Alex 2010-07-13 12:47 Не тупите, все что можно здесь описано
Разве-что можно было бы ещё исключения описать…
Цитировать
 
 
+2 #6 Misha 2010-11-14 02:09 Что-то я не очень понимаю как выведенные таблицы вяжутся с условием "Теперь мы хотим получить список всех лиц и их заказов из таблицы выше." Ведь мы получаем список всех заказов и лиц, которые сделали этот заказ, а например для заказа 34764 никакого лица не присутствует. Лицо по фамилии Svendson вообще не присутствует в результирующей таблице, следовательно мы никак не получаем список всех лиц. Цитировать
 
 
+2 #7 dd 2011-03-04 13:54 Цитирую Misha:
Что-то я не очень понимаю как выведенные таблицы вяжутся с условием "Теперь мы хотим получить список всех лиц и их заказов из таблицы выше." Ведь мы получаем список всех заказов и лиц, которые сделали этот заказ, а например для заказа 34764 никакого лица не присутствует. Лицо по фамилии Svendson вообще не присутствует в результирующей таблице, следовательно мы никак не получаем список всех лиц.

просто автор попутал LEFT JOIN и RIGHT JOIN
Цитировать
 
 
0 #8 Kirill 2012-04-02 18:52 Это вопрос русского языка :)

Я бы и для LEFT JOIN и для RIGHT JOIN задачу сформулировал одинаково:
Получить таблицу соответствия Закачиков (Persons) и Заказов, используя правое объединение и левое объединение.

В первом случае получаем результат:
Перечень всех заказчиков - вне зависимости есть у них заказы в таблице Заказы или нет.
В случае нескольких заказов у одного заказчика - именно столько будет строк с фамилией заказчика в результирующей таблице.
В случае, если для заказчика из таблицы Заказчиков (Persons) нет ни одного заказа - столбец с номером заказа - пустой, но сама фамилия и имя выводятся.
Заказчик без заказа - Потенциальный заказчик :) - Надо доработать сэйлзам

Во втором случае:
Перечень всех заказов - вне зависимости знаем ли мы (присутствует ли в таблице Persons) имена Заказчиков.
В связи с тем, что для некоторых заказов мы не знаем имени Заказчика, то хотя номер заказа и выводится - столбец имени заказчика остается пустым.
Заказ без Закачика - "Фиг знает кто заказал" :)
Цитировать
 
 
0 #9 Kirill 2012-04-02 18:55 P.S. Естественно, что правое и левое перепутано, но исправить пост нельзя - поэтому пишу в догонку :) :) :)

Цитирую Kirill:
Это вопрос русского языка :)

Я бы и для LEFT JOIN и для RIGHT JOIN задачу сформулировал одинаково:
Получить таблицу соответствия Закачиков (Persons) и Заказов, используя правое объединение и левое объединение.

В первом случае получаем результат:
Перечень всех заказчиков - вне зависимости есть у них заказы в таблице Заказы или нет.
В случае нескольких заказов у одного заказчика - именно столько будет строк с фамилией заказчика в результирующей таблице.
В случае, если для заказчика из таблицы Заказчиков (Persons) нет ни одного заказа - столбец с номером заказа - пустой, но сама фамилия и имя выводятся.
Заказчик без заказа - Потенциальный заказчик :) - Надо доработать сэйлзам

Во втором случае:
Перечень всех заказов - вне зависимости знаем ли мы (присутствует ли в таблице Persons) имена Заказчиков.
В связи с тем, что для некоторых заказов мы не знаем имени Заказчика, то хотя номер заказа и выводится - столбец имени заказчика остается пустым.
Заказ без Закачика - "Фиг знает кто заказал" :)
Цитировать
 

Авторизация

Nice Ajax Poll

Какое из моих расширений самое лучшее?

Статистика



Реклама