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 я публикую еще больше тестовых с собеседований.

1616
22 комментария

Девушка,спасибо Вам огромное за такую замечательную статью❤️

5
Ответить

Спасибо за эту веселую и поучительную (я понял какой результат у оконной функции) статью. Особенно повеселил девятый вопрос, в котором из пяти возможных правильным оказался шестой ответ. :-)

5
Ответить

спасибо за замечание, увидела это ранее, но отредактировать не могу. у статьи прошел срок давности.

Ответить

Как же мало нужно знать аналитику...

3
Ответить

Комментарий недоступен

Ответить

Испорченный телефон какой-то получился: вместо
INNER, JOIN LEFT, JOIN RIGHT, JOIN FULL, JOIN CROSS
должно быть
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
Как будто текст не проверил тот, кто знает SQL.

3
Ответить

С 9 примером беда ))

2
Ответить