Взломайте код: Ответы на 70 вопросов для интервью по SQL

Автор: Дмитрий Иванов [Команда P9X]

~8 минут чтения

SQL обозначает язык структурированных запросов. Это язык программирования для взаимодействия с системами управления реляционными базами данных (RDBMS) и управления ими. Навыки работы с SQL высоко ценятся и требуются, поскольку этот язык используется многими организациями в различных программных приложениях.

Q1. Что такое SQL и его значение в базах данных?

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

Q2. В чём разница между SQL и MySQL?

Ответ. SQL — это язык для управления реляционными базами данных и манипулирования ими, он служит основой для MySQL — системы управления реляционными базами данных (RDBMS).

Q3. Объясните базовую структуру SQL-запроса.

Ответ. Базовая структура SQL-запроса состоит из предложения SELECT (указание столбцов), предложения FROM (указание таблиц) и необязательных предложений, таких как WHERE (указание условий) и ORDER BY (сортировка результатов).

Q4. Что такое нормализация и какие её виды существуют?

Ответ. Нормализация — это организация данных в базе данных для уменьшения избыточности и зависимости. Основные цели нормализации — устранение аномалий данных, обеспечение целостности данных и минимизация вероятности избыточности данных.

Существует несколько нормальных форм (NF), представляющих разные уровни нормализации, и каждая нормальная форма имеет определённые правила для достижения желаемой структуры базы данных. Наиболее распространённые нормальные формы:

  1. Первая нормальная форма (1NF): каждый столбец в таблице должен содержать атомарные (неделимые) значения, и каждая строка должна быть уникальной.
  2. Вторая нормальная форма (2NF): таблица должна быть в 1NF, и все неключевые атрибуты должны быть полностью функционально зависимы от первичного ключа.
  3. Третья нормальная форма (3NF): таблица должна быть в 2NF, и не должно быть транзитивных зависимостей.
  4. Нормальная форма Бойса-Кодда (BCNF): таблица должна быть в 3NF, если для каждой нетривиальной функциональной зависимости определитель является суперключом.
  5. Четвёртая нормальная форма (4NF): устраняет многозначные зависимости.
  6. Пятая нормальная форма (5NF): рассматривает случаи, когда в таблице есть перекрывающиеся многозначные зависимости.

Нормализация — это итеративный процесс, и не все базы данных должны быть нормализованы до одинаковой степени. Уровень нормализации зависит от конкретных требований приложения и компромиссов между избыточностью данных и сложностью операций с базой данных. На практике многие базы данных нормализованы до третьей нормальной формы (3NF) для достижения баланса между простотой и целостностью данных.

Q5. Что такое денормализация?

Ответ. Денормализация — это процесс намеренного введения избыточности в базу данных путём добавления избыточных данных в одну или несколько таблиц. Это делается для повышения производительности запросов и упрощения извлечения данных за счёт увеличения объёма памяти и потенциальных проблем с целостностью данных.

Q6. Что такое первичный ключ? Чем он отличается от внешнего ключа?

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

Q7. Что такое индекс и зачем он используется в базах данных?

Ответ. Индекс — это структура данных, которая ускоряет операции извлечения данных в таблице базы данных. Он используется для быстрого поиска и доступа к строкам, соответствующим определённому значению столбца.

Q8. Опишите разницу между INNER JOIN и LEFT JOIN.

Ответ. INNER JOIN возвращает только строки с совпадением в обеих таблицах, в то время как LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы.

Q9. Как добавить новую запись в таблицу?

Ответ. INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);.

Q10. Какие существуют подмножества SQL?

Ответ. SQL можно разделить на несколько подмножеств в зависимости от типов операций или задач, которые они решают. Вот некоторые распространённые подмножества SQL:

  1. DDL (Data Definition Language): включает команды SQL, которые определяют и управляют структурой базы данных.
  2. DML (Data Manipulation Language): включает команды SQL, которые взаимодействуют с данными, хранящимися в базе данных.
  3. DCL (Data Control Language): включает команды, связанные с разрешениями и контролем доступа к базе данных.
  4. TCL (Transaction Control Language): включает команды, связанные с транзакциями в базе данных.
  5. Data Query Language (DQL): подмножество SQL, специально ориентированное на запросы и извлечение данных.
  6. Процедурные расширения (PL/SQL, T-SQL): некоторые системы баз данных расширяют SQL процедурными конструкциями.
  7. OLAP (Online Analytical Processing): SQL-расширения для работы с многомерными данными и выполнения сложных аналитических запросов.
  8. OLTP (Online Transaction Processing): команды SQL, оптимизированные для транзакционной обработки, обычно включающие простые операции CRUD (Create, Read, Update, Delete).

Q11. Объясните тестирование баз данных «белое поле» и «чёрное поле».

Ответ. Тестирование «белое поле» и «чёрное поле» — это две разные методологии тестирования, используемые в контексте баз данных, включая SQL-базы данных. Эти методологии фокусируются на разных аспектах тестирования и применимы к различным уровням жизненного цикла разработки программного обеспечения.

Тестирование «белое поле»Тестирование «чёрное поле»
Тестирование «белое поле», также известное как структурное или стеклянное тестирование, — это метод тестирования, который исследует внутреннюю логику и структуру системы базы данных. Тестеры знают о внутренней работе, коде и деталях реализации базы данных. Цель — убедиться, что все пути и ветви кода выполнены и база данных функционирует правильно на уровне кода.Тестирование «чёрное поле», также известное как функциональное или поведенческое тестирование, — это метод тестирования, при котором тестеры не знают о внутренней работе базы данных. Тестеры фокусируются на проверке внешнего поведения и функциональности базы данных без изучения кода или внутренних деталей реализации. Цель — оценить, соответствует ли база данных указанным требованиям и ведёт себя ожидаемо.

Q12. Как можно создать пустые таблицы с той же структурой, что и у другой таблицы?

Ответ. В SQL можно создать пустую таблицу с той же структурой, что и у другой таблицы, используя оператор CREATE TABLE вместе с предложением AS. Вот базовый синтаксис:

CREATE TABLE new_table AS SELECT * FROM existing_table WHERE 1 = 0;

Этот синтаксис включает создание новой таблицы (new_table) на основе SELECT-запроса, который не выбирает никаких строк из существующей таблицы (existing_table). Предложение WHERE 1 = 0 гарантирует, что никакие строки не будут выбраны из существующей таблицы, создавая пустую таблицу с той же структурой.

Q13. В чём разница между командами DROP и TRUNCATE?

Ответ. В SQL DROP используется для постоянного удаления таблицы и её структуры, освобождая занятое пространство. TRUNCATE удаляет все данные из таблицы, сохраняя структуру, но не освобождая пространство. DROP — необратимая команда, в то время как TRUNCATE быстрее и безопаснее для удаления данных, особенно в производственной среде.

Q14. Каковы преимущества SQL-базы данных перед NoSQL-базой данных?

Ответ. SQL-базы данных предлагают структурированное управление данными с предопределёнными схемами, обеспечивая согласованность и целостность данных через свойства ACID. Они отлично подходят для сложных запросов, поддерживают соединения и обеспечивают строгую согласованность. SQL-базы данных масштабируются вертикально путём добавления ресурсов на один сервер, что делает их подходящими для приложений со сложными отношениями между сущностями. Зрелая экосистема SQL предлагает широкий спектр инструментов и поддержки. В отличие от этого, NoSQL-базы данных отдают приоритет гибкости схемы, горизонтальному масштабированию и согласованности в конечном итоге для распределённых систем. Они хорошо подходят для неструктурированных или полуструктурированных данных и высоких нагрузок на запись. Выбор между SQL и NoSQL зависит от конкретных требований приложения, структур данных и потребностей в масштабируемости. SQL-базы данных превосходны в сценариях, требующих целостности данных, сложных запросов и поддержки транзакций.

Q15. Что такое первичный ключ?

Ответ. В SQL первичный ключ — это поле или комбинация полей в таблице, которая однозначно идентифицирует каждую запись в этой таблице. Первичный ключ имеет две основные характеристики:

  1. Уникальность: каждое значение в столбце первичного ключа (или столбцах) должно быть уникальным для всех записей в таблице.
  2. Непустота: столбец первичного ключа (или столбцы) не может содержать NULL-значений.

Q16. Что подразумевается под таблицей и полем в SQL?

Ответ. В SQL таблица — это структурированное представление данных, организованное в строки и столбцы. Это фундаментальная единица хранения в реляционной базе данных для хранения и организации связанных данных. Каждая таблица состоит из столбцов (также известных как поля) и строк.

ТаблицаПоле
Таблица — это коллекция связанных записей данных, организованных в строки и столбцы. Каждая строка в таблице представляет запись, а каждый столбец — определённый атрибут или поле этой записи.Поле, также называемое столбцом, — это конкретный атрибут или свойство данных, хранящихся в таблице. Каждый столбец имеет тип данных, который определяет вид данных, которые он может хранить (например, INT для целых чисел, VARCHAR для переменных строк символов). Поля содержат фактические значения данных для каждой записи в таблице.

Q17. Что такое ограничение и зачем их использовать?

Ответ. В SQL ограничение — это правило, применяемое к столбцу таблицы для обеспечения целостности данных и соблюдения определённых условий. Типы ограничений включают первичный ключ (обеспечивает уникальность), внешний ключ (устанавливает отношения), уникальный (обеспечивает уникальность), проверка (проверка достоверности) и NOT NULL (избегает NULL-значений). Ограничения играют важную роль в поддержании точности данных, отношений и соблюдения бизнес-правил, обеспечивая надёжную основу для управления базами данных.

Q18. Что такое подзапрос?

Ответ. В SQL подзапрос — это вложенный запрос, заключённый в круглые скобки, который используется для извлечения данных на основе результатов другого запроса. Он может быть использован в различных SQL-операторах, таких как SELECT, INSERT, UPDATE и DELETE. Подзапросы повышают гибкость запросов, позволяя выполнять операции и принимать решения на основе результатов другого запроса.

Q19. Что такое SQL-оператор?

Ответ. В SQL операторы — это символы или ключевые слова, используемые для различных операций. Типы включают арифметические (например, +, -, *), сравнения (например, =, <, >), логические (например, AND, OR, NOT), конкатенации (например, ||), IN, LIKE, IS NULL и BETWEEN. Операторы необходимы для построения запросов для выполнения вычислений, сравнений и строковых манипуляций в реляционной базе данных.

Q20. Что такое псевдоним?

Ответ. В SQL псевдоним — это временное имя, назначенное таблице или столбцу в запросе. Он улучшает читаемость и предоставляет более короткое обозначение. Например, псевдонимы таблиц (например, «e» для «employees») и псевдонимы столбцов (например, «increased_salary» для вычисляемого столбца) используются часто. Псевдонимы задаются с помощью ключевого слова AS, но часто необязательны для столбцов.

Q21. Какова цель предложения GROUP BY в SQL?

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

Q22. Объясните концепцию подзапроса и приведите пример.

Ответ. Подзапрос — это запрос, встроенный в другой запрос. Пример: SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

Q23. Как можно предотвратить SQL-инъекцию в ваших запросах?

Ответ. Используйте параметризованные запросы или подготовленные операторы, которые позволяют базе данных различать код и данные, предотвращая злонамеренные SQL-инъекции.

Q24. Что такое хранимые процедуры и чем они отличаются от функций?

Ответ. Хранимые процедуры — это предварительно скомпилированные SQL-запросы, хранящиеся в базе данных. Функции возвращают значение и могут использоваться в SQL-операторах как выражения, в то время как процедуры не возвращают значения напрямую.

Q25. Опишите свойства ACID в контексте транзакций базы данных.

Ответ. ACID обозначает Atomicity, Consistency, Isolation и Durability. Эти свойства обеспечивают надёжность транзакций базы данных, поддерживая целостность и согласованность данных.

Q26. Объясните использование предложения HAVING в SQL.

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

Q27. В чём разница между UNION и UNION ALL?

Ответ. UNION объединяет и возвращает уникальные строки из двух или более SELECT-запросов, в то время как UNION ALL возвращает все строки, включая дубликаты.

Q28. Какова цель функции COALESCE?

Ответ. Функция COALESCE возвращает первое ненулевое выражение в списке. Она часто заменяет NULL-значения значением по умолчанию или альтернативным значением.

Q29. Как выполнить самосоединение в SQL?

Ответ. Самосоединение выполняется путём соединения таблицы с самой собой. Пример: SELECT e1.name, e2.name FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.employee_id;

Q30. Объясните концепцию транзакций базы данных.

Ответ. Транзакция — это последовательность одного или нескольких SQL-запросов, выполняемых как единое целое. Она обеспечивает согласованность и целостность базы данных, либо фиксируя изменения, либо откатываясь к предыдущему состоянию.

Q31. Какова цель оконных функций в SQL?

Ответ. Оконные функции выполняют вычисления по набору строк, связанных с текущей строкой. Примеры включают ROW_NUMBER(), RANK() и LEAD().

Q32. Объясните разницу между кластеризованными и некластеризованными индексами.

Ответ. Кластеризованный индекс определяет физический порядок данных в таблице, в то время как некластеризованный индекс не влияет на физический порядок, но предоставляет отдельную структуру для улучшения производительности запросов.

Q33. Как работает оптимизатор SQL Server?

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

Q34. Что такое общие табличные выражения (CTE) и когда их следует использовать?

Ответ. CTE — это именованные временные наборы результатов, определённые в пределах SELECT, INSERT, UPDATE или DELETE-операторов. Они используются для упрощения сложных запросов и улучшения читаемости.

Q35. Обсудите концепцию материализованных представлений в базах данных.

Ответ. Материализованные представления — это предварительно вычисленные и сохранённые наборы результатов, обновляемые периодически на основе базовых данных. Они улучшают производительность запросов, уменьшая необходимость пересчитывать результаты.

Q36. Как можно оптимизировать производительность запроса в SQL?

Ответ. Производительность запроса можно оптимизировать, используя индексы, избегая SELECT *, оптимизируя соединения и обеспечивая актуальность статистики.

Q37. Объясните цель OLAP и OLTP-систем баз данных.

Ответ. OLAP (Online Analytical Processing) — системы баз данных, предназначенные для сложных запросов и отчётности, в то время как OLTP (Online Transaction Processing) — системы, ориентированные на быструю транзакционную обработку данных.

Q38. В чём разница между представлением и таблицей?

Ответ. Таблица — это физическая структура хранения, в то время как представление — это виртуальная таблица, созданная SELECT-запросом. Представления предоставляют способ упростить сложные запросы и контролировать доступ к данным.

Q39. Опишите процесс шардирования базы данных.

Ответ. Шардирование базы данных включает разбиение обширной базы данных на более мелкие, более управляемые части, называемые шардами. Каждый шард хранится на отдельном сервере, улучшая масштабируемость и производительность.

Q40. Объясните использование оператора APPLY в SQL.

Ответ. Оператор APPLY вызывает таблично-значную функцию для каждой строки, возвращённой внешним табличным выражением. Он удобен для соединения с функциями, которые принимают параметры.

Q41. Как обновить таблицу?

Ответ. Для обновления таблицы используется следующий синтаксис:

UPDATE table_name SET col_1 = value_1, column_2 = value_2 WHERE condition;

Q42. Как отсортировать записи в таблице?

Ответ. Для сортировки записей в таблице в SQL используется предложение ORDER BY в SELECT-запросе. Предложение ORDER BY позволяет указать один или несколько столбцов, по которым следует сортировать результат. Сортировка может быть выполнена в порядке возрастания (ASC) или убывания (DESC).

Q43. Что такое оператор DISTINCT и как его использовать?

Ответ. Оператор DISTINCT в SQL используется для устранения дубликатов строк из результата SELECT-запроса. Он возвращает только уникальные значения для указанных столбцов.

Q44. Что такое сущности? Приведите примеры.

Ответ. В контексте SQL и баз данных сущность обычно относится к таблице или объекту, который можно однозначно идентифицировать и использовать для хранения и представления данных.

Q45. Какие скалярные функции вы знаете?

Ответ. Скалярные функции в SQL — это функции, которые работают с одним значением и возвращают одно значение. Они могут быть использованы в SQL-запросах для выполнения операций над отдельными столбцами или литералами.

Q46. Как предотвратить дубликаты записей при выполнении запроса?

Ответ. Чтобы предотвратить дубликаты записей при выполнении запроса в SQL, можно использовать оператор DISTINCT в SELECT-запросе.

Q47. Как добавить запись в таблицу?

Ответ. В SQL для добавления новой записи в таблицу используется оператор INSERT.

Q48. Что такое SQL-операторы?

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

Q49. Что вы понимаете под целостностью данных?

Ответ. Целостность данных в SQL относится к точности, согласованности и надёжности данных, хранящихся в реляционной базе данных. Она обеспечивает, что данные остаются валидными и надёжными на протяжении всего их жизненного цикла.

Q50. Для чего используется функция FLOOR в SQL Server?

Ответ. Функция FLOOR в SQL Server используется для округления числового значения вниз до ближайшего целого числа, которое меньше или равно исходному значению.

Q51. Напишите запрос для извлечения имени пользователя (символы до символа @) из столбца Email_ID.

Ответ. SELECT SUBSTR(Email_ID, 1, INSTR(Email_ID, '@') - 1) FROM STUDENT;

Q52. Напишите запрос для извлечения доменного имени (.com, .in, .au и т. д.) из столбца Email_ID.

Ответ. SELECT SUBSTR(Email_ID, INSTR(Email_ID, '.')) FROM STUDENT;

Q53. Напишите запрос для извлечения имён поставщиков услуг электронной почты (например, google, yahoo, outlook и т. д.) из столбца Email_ID.

Ответ. SELECT SUBSTR(Email_ID, INSTR(Email_ID, '@') + 1, INSTR(Email_ID, '.') - INSTR(Email_ID, '@') - 1) FROM STUDENT;

Q54. Каков(ы) вывод следующего запроса?

SELECT CEIL(-12.43), FLOOR(-11.92) FROM DUAL;

Ответ: b. -12, -12

Q55. Каков(ы) вывод следующего запроса?

SELECT TRANSLATE('Narendra', 'xaeiou', 'x') FROM DUAL;

Ответ. SELECT TRANSLATE('Narendra', 'xaeiou', 'x') FROM DUAL; Сначала извлекаются согласные из имени, затем они конкатенируются с символом ‘a’ в аргументе from_string для удаления согласных путём не указания соответствующих символов в аргументе to_string.

Q56. Каков(ы) вывод следующего запроса?

SELECT TRANSLATE('Narendra', 'a' || TRANSLATE('Narendra', 'xaeiou', 'x'), 'a') FROM DUAL;

Ответ. SELECT TRANSLATE('Narendra', 'a' || TRANSLATE('Narendra', 'xaeiou', 'x'), 'a') FROM DUAL; Сначала извлекаются согласные из имени, затем они конкатенируются с символом ‘a’ в аргументе from_string для удаления согласных путём не указания соответствующих символов в аргументе to_string.

Q57. Каков(ы) вывод следующего запроса?

SELECT TO_CHAR(HIREDATE, 'YY') = 81 FROM EMP WHERE TO_CHAR(HIREDATE, 'YY') = 81;

Ответ. SELECT TO_CHAR(HIREDATE, 'YY') = 81 FROM EMP WHERE TO_CHAR(HIREDATE, 'YY') = 81; Используйте TO_CHAR() для извлечения части года из столбца hiredate и выберите всех сотрудников, которые были наняты в 1981 году, используя предложение WHERE.

Q58. Напишите запрос для нахождения увеличенной зарплаты для каждого сотрудника после добавления комиссии.

Ответ. SELECT EMPNO, ENAME, NVL2(COMM, SAL + COMM, SAL) AS HIKEDSAL FROM EMP;

Q59. Напишите запрос для выяснения сотрудников, получающих более высокую зарплату, чем их менеджеры.

Ответ. SELECT E.EMPNO, E.ENAME, E.SAL, M.EMPNO, M.ENAME, M.SAL FROM EMP E, EMP M WHERE E.MGR = M.EMPNO AND E.SAL > M.SAL;

Q60. Напишите запрос для выяснения подчинённых (отчётных сотрудников), которые присоединились к организации до своих менеджеров.

Ответ. SELECT E.EMPNO, E.ENAME, E.HIREDATE, M.EMPNO, M.ENAME, M.HIREDATE FROM EMP E, EMP M WHERE E.MGR = M.EMPNO AND E.HIREDATE < M.HIREDATE;

Q61. Напишите запрос для выяснения сотрудников, у которых нет подчинённых (отчётных сотрудников), то есть сотрудников, которые не являются менеджерами.

Ответ. SELECT * FROM EMP WHERE EMPNO NOT IN (SELECT DISTINCT NVL(MGR, 0) FROM EMP);

Q62. Напишите запрос для выяснения 2-го по старшинству сотрудника, то есть того, кто присоединился к организации вторым по дате приёма на работу.

Ответ. SELECT * FROM EMP E WHERE 2 = (SELECT COUNT(DISTINCT M.HIREDATE) FROM EMP M WHERE E.HIREDATE >= M.HIREDATE);

Q63. Напишите запрос для выяснения 5-й максимальной зарплаты.

Ответ. SELECT * FROM EMP E WHERE 5 = (SELECT COUNT(DISTINCT M.SAL) FROM EMP M WHERE E.SAL <= M.SAL);

Q64. Напишите запрос для выяснения отклонения от средней зарплаты для сотрудников, получающих больше средней зарплаты.

Ответ. SELECT ENAME, SAL, ROUND((SELECT AVG(SAL) FROM EMP), 2) AS AVG, ROUND(SAL - (SELECT AVG(SAL) FROM EMP), 2) AS DIFF FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);

Q65. Напишите запрос для выяснения сотрудников, получающих максимальную зарплату в своих отделах.

Ответ. SELECT * FROM EMP WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO);

Q66. Напишите запрос для выяснения минимальной, максимальной, общей и средней зарплаты по отделам.

Ответ. SELECT D.DEPTNO, MIN(SAL), MAX(SAL), SUM(SAL), AVG(SAL) FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO GROUP BY D.DEPTNO;

Q67. Выберите правильное утверждение(я), которое приведёт к желаемой таблице.

Ответ: b, d, e

Q68. Выберите валидные операторы UPDATE.

Ответ: d

Q69. Каков(ы) вывод следующего SQL-оператора?

SELECT TRANSLATE('AWESOME', 'WOE', 'VU') FROM DUAL;

Ответ: c. AVSUM

Q70. Как получить следующий вывод?

Ответ: c, d

Правый join возвращает все записи из правой таблицы вместе с соответствующими записями из левой таблицы. Поскольку все записи таблицы emp (левая) присутствуют в таблице insurance (правая), полный внешний join также вернёт тот же вывод.