Рад снова видеть Вас, уважаемый читатель!
Сегодня мы попробуем разобраться в специфических командах SQL Joins.
Что это такое?
JOIN — оператор языка SQL, который осуществляет операции соединения реляционной алгебры.
Возьмем 2 таблицы. Таблица А слева и таблица В справа.
id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pirate 3 Ninja 3 Darth Vader 4 Spaghetti 4 Ninja
Давайте поработаем с этими таблицами (по полю name) несколькими различными способами.
INNER JOIN — пересечение
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 3 Ninja 4 Ninja
INNER JOIN объединит две таблицы и вернет лишь те записи, которые есть в обеих таблицах.
FULL OUTER JOIN — объединение
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null null null 1 Rutabaga null null 3 Darth Vader
Full outer join дополнит таблицы А и В, строками из каждой таблицы. Если строки из какой-либо таблицы нет, то значение будет null в соответствующей части.
LEFT OUTER JOIN — дополнение
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null
Left outer join дополняет таблицу А пересеченными элементами из таблицы В. Если пересечения нет, то в правую часть попадет null.
LEFT OUTER JOIN и ON — вычитание
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null id name id name -- ---- -- ---- 2 Monkey null null 4 Spaghetti null null
С помощью Left outer join и on мы получим в результате все записи из таблицы А, которых нет в таблице В.
Получение непересекающихся значений
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null id name id name -- ---- -- ---- 2 Monkey null null 4 Spaghetti null null null null 1 Rutabaga null null 3 Darth Vader
В данном случае мы получим все записи, которые не состоят одновременно в обеих таблицах. Недостающие значения заполняются null.
CROSS JOIN — полное объединение
SELECT * FROM TableA CROSS JOIN TableB
В данном случае мы получим таблицы из 4 x 4 = 16 строк, в которой будет объединение всех строк из таблицы А со всеми строками из таблицы В. Из результата видно, что использовать данную операцию нежелательно, особенно, если у вас большие таблицы.
Заключение
Команды языка SQL JOINS дают большие возможности для работы с таблицами. С помощью данного оператора можно заметно упростить выбор данных из таблиц. Пользуетесь на здоровье!
Что-то осталось неясным? Задавайте вопросы в комментариях!
Спасибо за внимание! Подписываемся на рассылку 😉