{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

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 (Сотрудники)

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

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

Ответ:

Содержание скрыто
Показать
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:

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

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

Ответ:

Содержание скрыто
Показать

5

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

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

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

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

Ответ:

Содержание скрыто
Показать
SELECT date, cash_flow, SUM(cash_flow) OVER (ORDER BY date ASC) AS cumulative_cf FROM transactions;

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

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

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

Ответ:

Содержание скрыто
Показать

4

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

EMPLOYEES:

TASK:

Таблица 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

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

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

0
22 комментария
Написать комментарий...
Ирина Евгеньевна

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

Ответить
Развернуть ветку
Nocto Dolfus

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

Ответить
Развернуть ветку
Аккаунт удален

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

Ответить
Развернуть ветку
Vladimir Alekseev

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

Ответить
Развернуть ветку
Vladimir Alekseev

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

Ответить
Развернуть ветку
Analyst
Автор

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

Ответить
Развернуть ветку
Анжелика Побочная

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

Ответить
Развернуть ветку
Analyst
Автор

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

Ответить
Развернуть ветку
Lemon Juice

1 задача где нужно написать SQL ответ неверен.

В том виде, в котором составлены таблицы, запрос из ответа к задаче должен будет вывести:

id | name | pos_title
1 | Владимир | Дизайнер
2 | Татьяна | Программист

А если нужно чтобы в ответе получилась таблица как из условия задачи, то нужно либо поменять значения в ряде записей, либо переписать запрос с более хитрой логикой.

Ответить
Развернуть ветку
Алексей

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

SELECT, JOIN, FROM"

Явно же некорректный ответ.

По диагонали некоторые ответы в задачах тоже не корректны, по меньшей мере в некоторых реализациях СУБД

Ответить
Развернуть ветку
Analyst
Автор

Как бы вы ответили на этот вопрос?

Ответить
Развернуть ветку
Oleg Gorodecki

Как минимум неточность атом, что JOIN не обязательный параметр.
Он конечно желателен, но можно и без него

Ответить
Развернуть ветку
Алексей

Я бы его не задал)
Я обычно простую задачку даю. Да и то обычно не решает её никто почему то) Выучить теоретический ответ дело неплохое, но мне интереснее как человек применять будет.
Не знаю на кого рассчитаны эти вопросы, но подавляющее большинство мидл тестеров современных не ответит по меньшей мере на половину вопросов и задач этих точно

Ответить
Развернуть ветку
Ирина Евгеньевна

Почему?

Ответить
Развернуть ветку
Александр

Потому, думать надо.

Ответить
Развернуть ветку
Analyst
Автор

Алексей, спасибо за комментарий.

Я бы тоже ответила по другому на данный вопрос.
Но тут стоит отметить, что ответы на все вопросы предоставлены работодателями.

Ответить
Развернуть ветку

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

Развернуть ветку
Аккаунт удален

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

Ответить
Развернуть ветку
Илья Попов

В 9 вопросе указан ответ 6, но дано только 5 вариантов ответов. Что подразумевается под ответом "6"?

Ответить
Развернуть ветку
Analyst
Автор

Выше в комментариях уже про него писали, исправить уже не могу - vc не дает отредактировать.

Ответить
Развернуть ветку
No Name

9 вопрос убил.
1. Не видно полностью картинку.
2. Ответов всего 5, а верный ответ 6

Ответить
Развернуть ветку
Analyst
Автор

Выше в комментариях уже про это писали, исправить не могу - vc не дает отредактировать.

Ответить
Развернуть ветку
Slava Rozhnev

Сайт с практическими задачами по SQL https://sqltest.online/ru проверьте свой уровень

Ответить
Развернуть ветку
19 комментариев
Раскрывать всегда