Встречается на 26% собеседований по PHP

Что знаешь про выборку, джойны

Выборка данных и операции соединения (джойны) — это базовые механизмы SQL, которые позволяют извлекать и объединять данные из одной или нескольких таблиц реляционной базы данных. Выборка выполняется оператором SELECT, а джойны — через JOIN, связывая таблицы по общим ключам, например по первичному и внешнему ключам. Понимание этих операций необходимо для написания эффективных запросов, построения отчетов и анализа данных.

Как работает выборка

Оператор SELECT определяет, какие колонки и строки будут возвращены. Можно выбрать все колонки с помощью * или перечислить конкретные поля. Для фильтрации строк используется WHERE, для группировки — GROUP BY, для сортировки — ORDER BY, а для фильтрации агрегированных данных — HAVING. Эти конструкции позволяют точно управлять результатом.

Пример простой выборки:

sql
SELECT имя, возраст FROM пользователи WHERE возраст > 18 ORDER BY имя;

Этот запрос вернет имена и возраст пользователей старше 18 лет, отсортированные по имени. Важно помнить, что WHERE фильтрует строки до группировки, а HAVING — после, поэтому они используются в разных ситуациях.

Типы джойнов

Джойны объединяют строки из двух таблиц на основе условия, обычно равенства ключей. Основные типы:

  • INNER JOIN — возвращает только те строки, где есть совпадение в обеих таблицах. Это самый распространенный тип, так как он исключает несоответствующие данные.
  • LEFT JOIN — возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, поля правой таблицы заполняются NULL.
  • RIGHT JOIN — аналогичен LEFT JOIN, но возвращает все строки из правой таблицы, а недостающие данные левой заполняются NULL.
  • FULL JOIN — возвращает все строки из обеих таблиц, заполняя NULL там, где нет совпадений. В MySQL FULL JOIN напрямую не поддерживается, но его можно эмулировать через UNION.

Пример INNER JOIN:

sql
SELECT заказы.номер_заказа, клиенты.имя
FROM заказы
INNER JOIN клиенты ON заказы.клиент_id = клиенты.id;

Здесь выбираются номера заказов и имена клиентов для тех заказов, где клиент_id совпадает с id в таблице клиентов.

Подводные камни и производительность

При использовании джойнов важно правильно индексировать колонки, участвующие в соединении, иначе запросы могут быть медленными. Также следует избегать SELECT * в больших таблицах — лучше перечислять только нужные поля. Не забывайте про NULL: в LEFT JOIN условия в WHERE могут отфильтровать строки с NULL, что изменит ожидаемый результат. Например, WHERE клиенты.имя IS NOT NULL исключит записи без совпадений.

Когда использовать

Выборка с JOIN применяется практически в любом приложении, где данные нормализованы и разнесены по таблицам. Например, для получения заказов с информацией о клиентах, товарах и категориях. LEFT JOIN удобен, когда нужно показать все записи из основной таблицы, даже если связанных данных нет (например, список всех пользователей с их заказами, включая тех, кто ничего не заказывал). INNER JOIN подходит, когда нужны только полные совпадения, например, для формирования отчетов по фактическим продажам.

Коротко

  • SELECT — основа выборки, поддерживает WHERE, GROUP BY, ORDER BY, HAVING.
  • INNER JOIN — только совпадающие строки; LEFT JOIN — все строки слева; RIGHT JOIN — все строки справа; FULL JOIN — все строки из обеих таблиц.
  • Джойны объединяют таблицы по ключам, обычно по первичному и внешнему ключам.
  • Для производительности используйте индексы на колонках соединения и избегайте SELECT *.
  • Помните о NULL в LEFT/RIGHT/FULL JOIN — они могут влиять на фильтрацию в WHERE.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы