Дополнительные возможности JOIN

ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ СИНТАКСИСА JOIN

Далее будут представлены возможности использования JOIN, которые достаточно логичны, но не всегда очевидны, когда мы первый раз изучаем SQL.

1. В запросе мы можем соединять сколько угодно таблиц друг с другом:

select
    t1.*,
    t2.*,
    t3.*
from 
    table_1 as t1
join
    table_2 as t2 on t1.column1 = t2.column
left join
    table_3 as t3 on t3.column1 = t2.column

В этот момент соединения всех предыдущие таблицы образуют некую большую таблицу (table1 и table2), которая, в свою очередь, соединяется с последующей таблицей (table3).

2. Можно присоединить таблицу к самой себе, только нужно задать ей другое имя:

select
    t1.*,
    t2.*,
from 
    table_1 as t1
join
    table_1 as t2 on t1.column1 = t2.column

Соединять таблицы также можно по нескольким ключам через AND:

select
    t1.*,
    t2.*,
from 
    table_1 as t1
join
    table_1 as t2 
    on t1.column1 = t2.colum1 and t1.column2 = t2.column2

А еще таблицы можно соединять не только по равным ключам, но и через какое-то условие. Допустим, мы хотим соединить две таблицы table_1 и table_2 с помощью ключа  t1.column1 = t2.colum1, но при условии что t1.column2 > t2.column2:

select
    t1.*,
    t2.*,
from 
    table_1 as t1
join
    table_1 as t2 
    on t1.column1 = t2.colum1 and t1.column2 > t2.column2

Тут может быть сравнение колонок или сравнение колонки с каким-то фиксированным значением.

Условие можно написать и через WHERE, использование его в JOIN отфильрует значения до создания “большой таблицы” и значительно ускорит выполнения SQL-запроса. Если у вас возникли трудности с пониманием этого пункта, прочитайте еще раз тему “Выполнение SQL-запроса”.