20 вопросов и задач по SQL на собеседовании с ответами

От автора Telegram-канала Аналитика и Growth mind-set (там публикую еще больше вопросов и тестовых задач с собеседований).

В данной статье вопросы и тестовые задания на SQL с собеседований на аналитика.

У некоторых HR есть практика задавать вопросы прямо при телефонном звонке. Сидишь дома, а тут неожиданно звонит HR и задает тебе вопрос по SQL. Некоторые спрашивают про SQL в тестовом задании, а некоторые на техническом интервью.

Стоит отметить, что ответы предоставлены работодателями. Если вы не согласны с каким-то из ответов - пишите в комментариях свой вариант.

Сначала вопросы с ответами:

Назовите типы джойнов в SQL

Ответ:

INNER, JOIN LEFT, JOIN RIGHT, JOIN FULL, JOIN CROSS

Чем NULL отличается от 0

Ответ:

0 - это число.

NULL - это не число, а также NULL не является значением пустой строки. NULL используется для указания того, что данные отсутствуют, неизвестны, неприменимы. NULL не равен ничему, даже другому NULL.

Какие параметры используются в конструкции order by?

Ответ:

ASC и DESC

Какой оператор имеет больший приоритет AND или OR (если они используются совместно)?

Ответ:

AND имеет больший приоритет, нежели OR

Какие операторы обязательны при выборке данных с соединением таблиц (не учитывая cartesian product)?

Ответ:

SELECT, JOIN, FROM

Какие из операторов SQL могут быть использованы для выполнения CRUD (Create, Read, Update, Delete) операций над данными?

Ответ:

INSERT, DELETE, SELECT, UPDATE

С помощью какого запроса можно удалить все записи из таблицы?

Ответ:

DELETE FROM

Для чего нужен оператор UNION?

Ответ:

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

Какой оператор используется для изменения объектов базы данных?

Ответ:

ALTER

Что такое оконная функция? И в чем отличие от функции агрегации с группировкой?

Ответ:

Оконная функция в SQL - функция, которая работает с выделенным набором строк (окном, партицией) и выполняет вычисление для этого набора строк в отдельном столбце.

При использовании агрегирующих функций предложение GROUP BY сокращает количество строк в запросе с помощью их группировки. При использовании оконных функций количество строк в запросе не уменьшается по сравнению с исходной таблицей.

Задачи с ответами:

1) Написать запрос SQL.

Есть 2 таблицы

Persons (Сотрудники)

20 вопросов и задач по SQL на собеседовании с ответами

Positions (должности)

20 вопросов и задач по SQL на собеседовании с ответами

Написать запрос, чтобы получилась таблица вида:

20 вопросов и задач по SQL на собеседовании с ответами

Ответ:

SELECT persons.id, name, title AS pos_title FROM persons INNER JOIN positions ON persons.pos_id=positions.id;

2) Дана пустая таблица publisher с колонками id и name. На id стоит автоинкремент, а Синтаксис name имеет тип varchar(40). Какие из следующих запросов корректно отработают:

  1. INSERT INTO publisher (name) VALUES ('OREILLY');
  2. INSERT INTO publisher (name) VALUES ('О Reilly');
  3. INSERT INTO publisher (name) VALUES ('O'Reilly');
  4. INSERT INTO publisher (name) VALUES ('O-Reilly');

Ответ:

1, 2, 4

3) Результат объединения запросов выведет все значения из таблицы tab?

SELECT * FROM tab WHERE b = 'a' UNION SELECT * FROMtabWHEREb <> 'a'
  1. Да
  2. Нет

Ответ:

2

4) С помощью какого update-запроса можно обновить значения более чем одной колонки?

  1. UPDATE table_name SET col1_name = 'col1val', col2_name = 'col2val';
  2. UPDATE table_name SET col1_name = 'col1val' AND SET col2_name = 'col2val';
  3. UPDATE table_name SET col1_name = 'col1val' SET col2_name = 'col2val';
  4. Одним запросом можно обновить не более одной колонки

Ответ:

1

5) Дана таблица PERSONS:

20 вопросов и задач по SQL на собеседовании с ответами

Каков будет результат выполнения следующего запроса:

SELECT AVG(Age) FROM Persons
  1. 150
  2. 75
  3. UNKNOWN, поскольку присутствует NULL
  4. Запрос не выполнится (завершится ошибкой), поскольку присутствует NULL
  5. 100

Ответ:

5

6) Нарастающий итог

Есть таблица transactions в таком виде:

20 вопросов и задач по SQL на собеседовании с ответами

Где cash_flow — это выручка минус затраты за каждый день.

Нужно написать запрос, чтобы получить нарастающий итог для денежного потока каждый день таким образом, чтобы в конечном итоге получилась таблица в такой форме:

20 вопросов и задач по SQL на собеседовании с ответами

Ответ:

SELECT date, cash_flow, SUM(cash_flow) OVER (ORDER BY date ASC) AS cumulative_cf FROM transactions;

7) Дана таблица CARS:

20 вопросов и задач по SQL на собеседовании с ответами

Каким будет результат следующего запроса:

SELECT COUNT (DISTINCT color) FROM cars
  1. red blue null
  2. 3
  3. 2 1 1
  4. 2

Ответ:

4

8) Даны две таблицы:

EMPLOYEES:

20 вопросов и задач по SQL на собеседовании с ответами

TASK:

20 вопросов и задач по SQL на собеседовании с ответами

Таблица EMPLOYEES имеет поле CURRENT_TASK_ID, которое является внешним ключом и ссылается на поле TASK_ID таблицы TASKS. Вывести список, состоящий из имен всех имеющихся сотрудников и их текущих занятий.

  1. SELECT NAME, COMMENT FROM EMPLOYEES LEFT JOIN TASKS ON CURRENT_TASK_ID = TASK_ID
  2. SELECT NAME, COMMENT FROM EMPLOYEES, TASKS WHERE CURRENT_TASK_ID = TASK_ID
  3. SELECT NAME, COMMENT FROM EMPLOYEES, TASKS WHERE JOB_ID = TASK_ID
  4. SELECT NAME, COMMENT FROM EMPLOYEES RIGHT JOIN TASKS ON CURRENT_TASK_ID = TASK_ID

Ответ:

1

9) Имеется таблица WOMEN

20 вопросов и задач по SQL на собеседовании с ответами

Сколько строк вернет запрос

SELECT * FROM Women WHERE Score >= ALL (SELECT Score FROM Women WHERE FirstName='Eva');
  1. Запрос содержит ошибку и не выполнится
  2. 2
  3. 1
  4. 3
  5. 4

Ответ:

6

10) Какая ошибка в этом запросе?

UPDATE books SET sales_1999 > (SELECT SUM(qty * price) FROM sales WHERE sales.book_id = books.id AND sales.date BETWEEN '01/01/1999' AND '12/31/1999')
  1. Вы не можете использовать арифметические операторы для функции SUM() (например SUM(qty * price))
  2. Следует использовать знак (=) для подзапроса
  3. Вы не можете использовать подзапрос для SET внутри оператора UPDATE
  4. Ключевое слово BETWEEN нельзя использовать для символов или дат

Ответ:

2

Удачи на собеседованиях!

В своем канале Аналитика и Growth mind-set я публикую еще больше тестовых с собеседований.

17
20 комментариев