Ответ
INNER JOIN — это операция соединения таблиц в SQL, которая возвращает только те строки, для которых условие соединения (ON) выполняется в обеих таблицах. Строки без соответствия исключаются из результирующего набора.
Пример:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
В этом запросе в результат попадут только заказы, для которых существует соответствующий клиент в таблице Customers. Заказы без клиента или клиенты без заказов будут отфильтрованы.
Ключевые особенности и best practices:
- Производительность: Обычно выполняется быстрее, чем
OUTER JOIN, так как результирующий набор меньше. Для оптимизации важно иметь индексы на полях, используемых в условииON. - Явное указание типа JOIN: Всегда используйте ключевое слово
INNERдля ясности, хотяJOINпо умолчанию во многих СУБД является внутренним. - Соединение нескольких таблиц: Можно последовательно соединять множество таблиц.
- Альтернативный синтаксис: Эквивалентом является перечисление таблиц в
FROMс условием вWHERE(старый синтаксис):SELECT Orders.OrderID, Customers.CustomerName FROM Orders, Customers WHERE Orders.CustomerID = Customers.CustomerID;Однако современный синтаксис с
INNER JOINсчитается более читаемым и явным.
Ответ 18+ 🔞
Давай разберем этот ваш INNER JOIN, а то некоторые думают, что это какая-то высшая математика. На самом деле всё просто, как три копейки, если не проще.
Представь, что у тебя есть две таблицы. Одна — список заказов, другая — список клиентов. И тебе надо вытащить заказы, но так, чтобы рядом было имя клиента, который этот заказ сделал. Вот тут-то он и пригождается, наш INNER JOIN.
Как это работает, на пальцах:
Он берет строку из первой таблицы (заказы), смотрит на поле для связи (например, CustomerID) и идет искать ТОЧНО ТАКОЙ ЖЕ CustomerID во второй таблице (клиенты). Нашел — отлично, строка попадает в результат. Не нашел — ну, извини, братан, прощай. Никаких тебе компромиссов. Нет пары — нет строки в выдаче. Жестко, но честно.
Вот смотри на код, тут всё наглядно:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Перевод на человеческий: «Дай мне номера заказов и имена клиентов, но только для тех случаев, где айдишник клиента в заказе совпадает с айдишником клиента в справочнике клиентов». Всё. Клиенты без заказов нахуй не нужны, заказы с битым айди клиента — тоже в топку. Только строгое соответствие.
На что смотреть, чтобы не облажаться:
- Скорость: Обычно он шустрый, потому что результат-то меньше. Но если таблицы — как шкафы в «Икее», а индексов на полях для связи нет, то жди. Он будет тупо каждую строку из одной таблицы со всеми строками из другой сравнивать. Это пиздец как долго. Индексы — твои лучшие друзья тут.
- Читаемость: Пиши
INNER JOINвсегда. Да, можно по-старинке вFROMчерез запятую таблицы перечислить, а условие вWHEREзасунуть, но это выглядит как говнокод образца 90-х. Современный синтаксис сJOINиON— это красиво и понятно, как день. - Много таблиц: А если надо три таблицы соединить? Да хуй с ним, не проблема! Цепляй второй
JOIN, потом третий. Главное, чтобы логика связей была ясна, а то можно такое наворотить, что сам потом не разберёшься.
Короче, INNER JOIN — это базовый, но охуенно важный инструмент. Понимаешь его — уже полдела сделано. Не понимаешь — ну, что ж, придется разбираться, иначе далеко не уедешь.
Видео-ответы
▶
▶
▶
▶
▶