Пусть имеются две таблицы
Заметим, что для Олега и Коли нет соответствующих городов. Так же нет людей живущих
в Гондурасе.
Результат для inner join (inner join тоже что и просто join):
Результат для left join (аналогично для left outer join):
Аналогично для right join (right outer join):
Результат для full outer join
Отдельный момент с cross join.
Результат запроса cross join:
Customers City Id FirstName CityId | Id Name - - - | - - 1 Вася 1 | 1 Москва 2 Петя 2 | 2 Воронеж 3 Коля 3 | 4 Париж 4 Дима 4 | 6 Лондон 5 Олег 5 | 7 Гондурас 6 Лена 6 |
Заметим, что для Олега и Коли нет соответствующих городов. Так же нет людей живущих
в Гондурасе.
Результат для inner join (inner join тоже что и просто join):
select p.FirstName, c.Name from Customers as p join City as c on c.Id = p.CityId
Вася Москва Петя Воронеж Дима Париж Лена Лондонв результате присутствуют строки, которые соответствуют условию on. Коле и Олегу не были найдены соответствующие города, как и не включен в результат город Гондурас.
Результат для left join (аналогично для left outer join):
select p.FirstName, c.Name from Customers as p left join City as c on c.Id = p.CityId
Вася Москва Петя Воронеж Коля NULL Дима Париж Олег NULL Лена ЛондонВыводятся все строки из левой таблицы (Customers), и соответствующие условию on строки из правой таблицы (City). Хоть для Коли и Олега, нет подходящих городов, в результат они все равно включаются, ибо указан left join.
Аналогично для right join (right outer join):
select p.FirstName, c.Name from Customers as p right join City as c on c.Id = p.CityId
Вася Москва Петя Воронеж Дима Париж Лена Лондон NULL ГондурасЗдесь Коли и Олега нет, так как города им не нашлось, зато есть Гондурас, которой в right таблице, следовательно условие ему по барабану.
Результат для full outer join
select p.FirstName, c.Name from Customers as p full outer join City as c on c.Id = p.CityId
Вася Москва Петя Воронеж Коля NULL Дима Париж Олег NULL Лена Лондон NULL ГондурасFull outer join - как бы объединение запросов right и left. Т.е если есть соответствующая строка, то ок, если нет - выводим null.
Отдельный момент с cross join.
select c.FirstName, tmp.lastname from Customers as c cross join (select 'Пупкин' as lastname union select 'Иванов') as tmpПри таком запросе, каждой записи в таблице стоящей перед cross (Customers) будет сопоставлена запись из таблицы указанной в cross join.Т.е. декартово произведение.
Результат запроса cross join:
Вася Иванов Петя Иванов Коля Иванов Дима Иванов Олег Иванов Лена Иванов Вася Пупкин Петя Пупкин Коля Пупкин Дима Пупкин Олег Пупкин Лена Пупкин


Комментариев нет:
Отправить комментарий