Эффективное использование SQL-выражений для фильтрации, со... | Вопросы для собеседования | Skilio
Эффективное использование SQL-выражений для фильтрации, сортировки и пагинации данных
Вопрос:

Напишите запрос SQL для извлечения всех столбцов из таблицы под названием "employees", где "department" равно "Sales", отсортированных по "hire_date" в порядке убывания.

Подсказки:

  • Убедитесь, что в запросе используются предложения SELECT, FROM, WHERE и ORDER BY.
  • Помните, что сортировка в порядке убывания достигается с помощью DESC.
  • Подумайте, что произойдет, если у двух сотрудников одинаковая дата найма.

Выше ожиданий:

  • Знает как добавить пейджинг в ваш запрос, используя LIMIT и OFFSET.
  • Знает концепцию индексов и то, как они могут улучшить производительность запросов, включающих сортировку и фильтрацию.
  • Понимает как изменился бы запрос, если бы вам потребовались только определенные столбцы из таблицы.
Ответ:
  1. Используйте оператор SELECT, чтобы указать, что вы хотите получить все столбцы используйте (*).
  2. Используйте FROM, чтобы указать таблицу, из которой нужно извлечь данные, в данном случае "employees".
  3. Используйте WHERE, чтобы отфильтровать результаты, включив только строки, где "department" равен "Sales".
  4. Используйте ORDER BY, чтобы отсортировать результаты по "hire_date". Чтобы отсортировать в порядке убывания, используйте ключевое слово DESC.

SQL-запрос будет выглядеть следующим образом:

SELECT *
FROM employees
WHERE department = 'Sales'
ORDER BY hire_date DESC;

Дополнительная обработка при сортировке

Если у двух сотрудников одинаковая дата приема на работу, вы можете добавить дополнительный критерий сортировки, чтобы улучшить результат. Например, вы можете отсортировать по "last_name" в порядке возрастания как дополнительный критерий:

SELECT *
FROM employees
WHERE department = 'Sales'
ORDER BY hire_date DESC, last_name ASC;

Пагинация с LIMIT и OFFSET

Для реализации пагинации используйте LIMIT и OFFSET. LIMIT указывает максимальное количество строк для возврата, а OFFSET указывает количество строк, которое нужно пропустить, прежде чем начать возвращать строки. Например, чтобы получить строки с 11 по 20:

SELECT *
FROM employees
WHERE department = 'Sales'
ORDER BY hire_date DESC
LIMIT 10 OFFSET 10;

Индексирование для повышения производительности

Создание индекса на столбцах, используемых в предложениях WHERE или ORDER BY, может значительно повысить производительность запроса. В этом случае рассмотрите возможность индексирования столбцов "department" и "hire_date":

CREATE INDEX idx_department_hire_date ON employees(department, hire_date);

Получение определенных столбцов

Если вам нужны только определенные столбцы, замените звездочку (*) именами столбцов. Например, чтобы получить только "first_name", "last_name" и "hire_date":

SELECT first_name, last_name, hire_date
FROM employees
WHERE department = 'Sales'
ORDER BY hire_date DESC;
0
SQL Новичок Опубликовано
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.