простые примеры JOIN

sql join примерыКроме обычных простых запросов  с простыми условиями язык SQL позволяет составлять довольно сложные выражения, на вил которых порой страшно смотреть, такими непонятными они выглядят. Однако такие запросы встречаются не очень часто, и следующий уровень сложности после обычного SELECT на мой взгляд идет команда JOIN. Давайте разберемся как с ней работать.

Для начала давайте посмотрим простейшие часто употребимые запросы.

SELECT COUNT(*) FROM table; //подсчет кол-ва записей

SELECT * FROM table LIMIT 5,10; //начиная с 5-ой записи выберет 10 строк. чаще всего используется для постраничной навигации

SELECT * FROM table ORDER BY num; //отсортирует все записи из таблицы по полю num

SELECT * FROM table WHERE year='1990'; //выбрать запись/записи где значение year равно 1990

SELECT * FROM table WHERE name LIKE '%ova%'; //поиск в таблице имени в котором есть последовательность 'ova'

SELECT DISTINCT name FROM table; //если есть повторяющиеся поля то они будут учтены только один раз

SELECT * FROM name WHERE age IN (12,15,18); // выведет имена которым соответствуют поля с возрастом 12,15,18

SELECT MAX(age) FROM table; //MAX/MIN - выберет запись с максимальным или минимальным значением age

Теперь перейдем непосредственно к примерам JOIN:

Очень популярная задача где используется команда JOIN это объединение нескольких таблиц имеющий какой то общий признак. Рассмотрим пример. Допустим у нас есть две таблицы. В первой хранятся данные об имени и адресе юзера и также есть колонка user_id. Во второй колонке у нас также есть колонка user_id и колонка с домашним индексом юзера.

SELECT name, addres FROM table1 LEFT JOIN table2 ON table1.user_id=table2.user_id;

Чтобы было еще понятнее, то этот запрос можно переписать классическим образом:

SELECT table1.name, table1.addres, table2.index FROM table1, table2 WHERE table1.user_id = table2.user_id;

Таким образом можно получить данные из нескольких таблиц, а если есть дополнительное условие то допишем и его:

SELECT name, addres FROM table1 LEFT JOIN table2 ON table1.user_id=table2.user_id WHERE name = 'Вася';

Если окунуться в теорию, то добавим что есть следующие варианты JOIN:

Тут будет уместно нарисовать знаменитые кружочки:

INNER JOIN

возвращает пересечение двух множеств

join примеры

SELECT t1.name, t2.city FROM Table1 t1 INNER JOIN Table2 t2 ON t1.key2 = t2.key2;

Отражением INNER JOIN является OUTER JOIN. Нам предоставлено три типа OUTER JOIN – FULL, LEFT и RIGHT. Слово OUTER писать не обязательно.

FULL JOIN

Объединяет два множества

join примеры

FULL JOIN вернет ВСЕ записи из таблиц table и table2, без повторяющихся данных. Где данных нет, будет подставленно NULL.

LEFT JOIN

Возвращает данные из левой таблицы, а также данные из правой, которые пересекаются с левой.

join примеры

Если данных из правой таблицы будет не хватать, то подставится NULL значение.

RIGHT JOIN – как вы наверное поняли, вернет все значения из правой таблицы и пересекающиеся данные из левой.

Исключения

Если нам понадобятся данные из первой таблицы для которых нет данных в правой, то нам просто надо добавить условие WHERE

join примеры простые

SELECT t1.name, t2.city FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.key2 = t2.key2 WHERE t2.key2 IS NULL;

Множественные JOIN

С помощью JOIN можно соединить не только 2 таблицы, а сколько надо. Если вам надо соединить 2 таблицы, то потребуется 2 команды JOIN. Но не стоит впадать в крайность и объединять кучу таблиц, все это ощутимо скажется на производительности, поэтому иногда лучше выполнить несколько подзапросов. Пример соединения трех таблиц:

SELECT t1.Name,
       t2.City,
       t3.Profession
FROM Table1 t1
    INNER JOIN Table2 t2 ON t1.key2 = t2.key2
    INNER JOIN Table3 t3 ON t1.key3 = t3.key3;

Что же, надеюсь перечисленные простые примеры JOIN помогли вам разобраться с этим оператором.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*

*