Что спрашивают на собеседовании sql
Перейти к содержимому

Что спрашивают на собеседовании sql

  • автор:

Вопросы по SQL на собеседовании

Вы готовитесь к собеседованию с разработчиком SQL? Тогда вы пришли в нужное место. Это руководство поможет вам освежить свои навыки SQL, восстановить уверенность и быть готовым к работе!

Здесь вы найдете коллекцию реальных вопросов для собеседования, которые задают в таких компаниях, как Google, Oracle, Amazon, Microsoft и т. д. Каждый вопрос сопровождается идеально написанным ответом, что экономит ваше время на подготовку к собеседованию.

Вопросы для интервью по SQL

1. Что такое база данных?
База данных — это организованный набор данных, которые хранятся и извлекаются в цифровом виде из удаленной или локальной компьютерной системы. Базы данных могут быть большими и сложными, и такие базы данных разрабатываются с использованием фиксированных подходов к проектированию и моделированию.

2. Что такое СУБД?
СУБД означает систему управления базами данных. СУБД — это системное программное обеспечение, отвечающее за создание, поиск, обновление и управление базой данных. Это гарантирует, что наши данные непротиворечивы, организованы и легко доступны, выступая в качестве интерфейса между базой данных и ее конечными пользователями или прикладным программным обеспечением.

3. Что такое СУБД? Чем она отличается от СУБД?
RDBMS означает систему управления реляционными базами данных. Ключевое отличие здесь , по сравнению с СУБД, заключается в том, что РСУБД хранит данные в виде набора таблиц, и между общими полями этих таблиц могут быть определены отношения. Большинство современных систем управления базами данных, таких как MySQL, Microsoft SQL Server, Oracle, IBM DB2 и Amazon Redshift, основаны на СУБД.

4. Что такое SQL?
SQL расшифровывается как язык структурированных запросов. Это стандартный язык для систем управления реляционными базами данных. Это особенно полезно при обработке организованных данных, состоящих из сущностей (переменных) и отношений между различными сущностями данных.

5. В чем разница между SQL и MySQL?
SQL — это стандартный язык для извлечения данных из структурированных баз данных и управления ими. Напротив, MySQL — это система управления реляционными базами данных, такая как SQL Server, Oracle или IBM DB2, которая используется для управления базами данных SQL.

6. Что такое таблицы и поля?
Таблица — это организованный набор данных, хранящихся в виде строк и столбцов. Столбцы можно разделить на вертикальные, а строки на горизонтальные. Столбцы в таблице называются полями, а строки — записями.

7. Что такое ограничения в SQL?
Ограничения используются для указания правил, касающихся данных в таблице. Его можно применить к одному или нескольким полям в таблице SQL во время создания таблицы или после создания с помощью команды ALTER TABLE. Ограничения:

  • NOT NULL — запрещает вставку значения NULL в столбец.
  • CHECK — проверяет, что все значения в поле удовлетворяют условию.
  • ПО УМОЛЧАНИЮ — автоматически присваивает значение по умолчанию, если для поля не было указано значение.
  • UNIQUE — обеспечивает вставку уникальных значений в поле.
  • ИНДЕКС — индексирует поле, обеспечивая более быстрый поиск записей.
  • ПЕРВИЧНЫЙ КЛЮЧ — Уникально идентифицирует каждую запись в таблице.
  • FOREIGN KEY — обеспечивает ссылочную целостность записи в другой таблице.

9. Что такое ограничение UNIQUE?
Ограничение UNIQUE гарантирует, что все значения в столбце различны. Это обеспечивает уникальность столбцов и помогает уникально идентифицировать каждую строку. В отличие от первичного ключа, для каждой таблицы может быть определено несколько уникальных ограничений. Синтаксис кода для UNIQUE очень похож на синтаксис PRIMARY KEY и может использоваться взаимозаменяемо.

10. Что такое внешний ключ?
ВНЕШНИЙ КЛЮЧ состоит из одного поля или набора полей в таблице, которые по существу ссылаются на ПЕРВИЧНЫЙ КЛЮЧ в другой таблице. Ограничение внешнего ключа обеспечивает ссылочную целостность в отношениях между двумя таблицами.
Таблица с ограничением внешнего ключа помечается как дочерняя таблица, а таблица, содержащая ключ-кандидат, помечается как ссылочная или родительская таблица.

11. Что такое объединение? Перечислите его различные виды.

Предложение SQL Join используется для объединения записей (строк) из двух или более таблиц в базе данных SQL на основе связанного столбца между ними.

  • (ВНУТРЕННЕЕ) СОЕДИНЕНИЕ: извлекает записи, имеющие совпадающие значения в обеих таблицах, участвующих в объединении. Это широко используемое соединение для запросов.
  • ЛЕВОЕ (ВНЕШНЕЕ) СОЕДИНЕНИЕ: извлекает все записи/строки из левой и соответствующие записи/строки из правой таблицы.
  • ПРАВОЕ (ВНЕШНЕЕ) СОЕДИНЕНИЕ: извлекает все записи/строки из правой и соответствующие записи/строки из левой таблицы.
  • ПОЛНОЕ (ВНЕШНЕЕ) СОЕДИНЕНИЕ: извлекает все записи, в которых есть совпадения, в левой или правой таблице.

13. Что такое перекрестное соединение?
Перекрестное соединение можно определить как декартово произведение двух таблиц, включенных в соединение. Таблица после объединения содержит то же количество строк, что и в перекрестном произведении количества строк в двух таблицах. Если в перекрестном соединении используется предложение WHERE, запрос будет работать как ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

14. Что такое индекс? Расскажите о его различных видах.
Индекс базы данных — это структура данных, обеспечивающая быстрый поиск данных в столбце или столбцах таблицы. Это повышает скорость операций доступа к данным из таблицы базы данных за счет дополнительных операций записи и памяти для поддержания структуры данных индекса.

  • Уникальный и неуникальный индекс:
  • Кластеризованный и некластеризованный индекс:

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

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

15. В чем разница между кластеризованным и некластеризованным индексом?
Как объяснялось выше, различия можно разбить на три небольших фактора:

  • Кластерный индекс изменяет способ хранения записей в базе данных на основе индексированного столбца. Некластеризованный индекс создает в таблице отдельный объект, который ссылается на исходную таблицу.
  • Кластерный индекс используется для простого и быстрого извлечения данных из базы данных, в то время как выборка записей из некластеризованного индекса происходит относительно медленнее.
  • В SQL таблица может иметь один кластеризованный индекс, тогда как она может иметь несколько некластеризованных индексов.

17. Что такое запрос?
Запрос — это запрос данных или информации из таблицы базы данных или комбинации таблиц. Запрос к базе данных может быть либо запросом выбора, либо запросом действия.

18. Что такое подзапрос? Каковы его виды?
Подзапрос — это запрос внутри другого запроса, также известный как вложенный запрос или внутренний запрос . Он используется для ограничения или расширения данных, запрашиваемых основным запросом, таким образом ограничивая или улучшая вывод основного запроса соответственно. Например, здесь мы получаем контактную информацию для студентов, записавшихся на математический предмет:

  • Коррелированный подзапрос не может рассматриваться как независимый запрос, но он может ссылаться на столбец в таблице , указанный в FROM основного запроса.
  • Некоррелированный подзапрос можно рассматривать как независимый запрос , а вывод подзапроса подставляется в основной запрос.

20. Какие общие предложения используются с запросом SELECT в SQL?
Вот некоторые общие предложения SQL, используемые в сочетании с запросом SELECT:

  • Предложение WHERE в SQL используется для фильтрации необходимых записей на основе определенных условий.
  • Предложение ORDER BY в SQL используется для сортировки записей по некоторым полям в порядке возрастания ( ASC ) или убывания ( DESC) .
  • Предложение GROUP BY в SQL используется для группировки записей с идентичными данными и может использоваться в сочетании с некоторыми функциями агрегирования для получения сводных результатов из базы данных.
  • Предложение HAVING в SQL используется для фильтрации записей в сочетании с предложением GROUP BY. Он отличается от WHERE тем, что предложение WHERE не может фильтровать агрегированные записи.
  • Каждый оператор SELECT в предложении должен иметь одинаковое количество столбцов.
  • Столбцы также должны иметь похожие типы данных.
  • Столбцы в каждом операторе SELECT обязательно должны иметь одинаковый порядок.
  1. DECLARE курсор после объявления любой переменной. Объявление курсора всегда должно быть связано с оператором SELECT.
  2. Откройте курсор, чтобы инициализировать результирующий набор. Оператор OPEN должен вызываться перед выборкой строк из результирующего набора.
  3. Оператор FETCH для извлечения и перехода к следующей строке в результирующем наборе.
  4. Вызовите оператор CLOSE , чтобы деактивировать курсор.
  5. Наконец, используйте оператор DEALLOCATE , чтобы удалить определение курсора и освободить связанные ресурсы.
  • Один к одному . Это можно определить как связь между двумя таблицами, где каждая запись в одной таблице связана с максимум одной записью в другой таблице.
  • «Один ко многим» и «Многие к одному» — это наиболее часто используемая связь, когда запись в таблице связана с несколькими записями в другой таблице.
  • «Многие ко многим » — используется в случаях, когда для определения отношения необходимо несколько экземпляров с обеих сторон.
  • Самореферентные отношения — используется, когда таблице необходимо определить отношения с самой собой.

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

26. Что такое представление?
Представление в SQL — это виртуальная таблица, основанная на наборе результатов оператора SQL. Представление содержит строки и столбцы, как настоящая таблица. Поля в представлении — это поля из одной или нескольких реальных таблиц в базе данных.

27. Что такое нормализация?
Нормализация представляет собой способ эффективной организации структурированных данных в базе данных. Он включает в себя создание таблиц, установление отношений между ними и определение правил для этих отношений. На основе этих правил можно контролировать несогласованность и избыточность, что повышает гибкость базы данных.

28. Что такое денормализация?
Денормализация — это процесс, обратный нормализации, при котором нормализованная схема преобразуется в схему с избыточной информацией. Производительность повышается за счет использования избыточности и обеспечения согласованности избыточных данных. Причиной выполнения денормализации являются накладные расходы, возникающие в процессоре запросов сверхнормализованной структурой.

Наше ИТ кадровое агентство предлагает вам найти разработчиков менее чем за 2 недели. Свяжитесь с нами сегодня, чтобы узнать больше о том, как мы можем помочь масштабировать ваш следующий проект до новых высот. Мы гарантируем поиск самого сильного, а не самого дорого кандидата. За 10 лет в подборе it специалистов, мы закрыли 5500+ вакансий и собрали 25+ команд с нуля. Убедитесь сами и ознакомьтесь с отзывами клиентов о нашем рекрутинговом агентстве! Нужно больше референсов? Напишите нам в телеграмм.

HR Блог для IT рекрутера в Телеграм

Хочешь всегда получать новые статьи, бесплатные материалы и полезные HR лайфхаки! Подписывайся на нас в Telegram! С нами подбор ит персонала становится проще 😉

Топ-65 вопросов по SQL с собеседований, к которым вы должны подготовиться в 2019 году. Часть I

Реляционные базы данных являются одними из наиболее часто используемых баз данных по сей день, и поэтому навыки работы с SQL для большинства должностей являются обязательными. В этой статье с вопросами по SQL с собеседований я познакомлю вас с наиболее часто задаваемыми вопросами по SQL (Structured Query Language — язык структурированных запросов). Эта статья является идеальным руководством для изучения всех концепций, связанных с SQL, Oracle, MS SQL Server и базой данных MySQL.

Наша статья с вопросами по SQL — универсальный ресурс, с помощью которого вы можете ускорить подготовку к собеседованию. Она состоит из набора из 65 самых распространенных вопросов, которые интервьюер может задать во время собеседования. Оно обычно начинается с базовых вопросов по SQL, а затем переходит к более сложным на основе обсуждения и ваших ответов. Эти вопросы по SQL с собеседований помогут вам извлечь максимальную выгоду на различных уровнях понимания.
Давайте начнем!

Вопросы по SQL с собеседований

Вопрос 1. В чем разница между операторами DELETE и TRUNCATE?
DELETE TRUNCATE
Используется для удаления строки в таблице Используется для удаления всех строк из таблицы
Вы можете восстановить данные после удаления Вы не можете восстановить данные (прим. перевод.: операции логируются по разному, но в SQL Server есть возможность сделать откат) транзакции)
DML-команда DDL-команда
Медленнее, чем оператор TRUNCATE Быстрее
№ Вопрос 2. Из каких подмножеств состоит SQL?
  • DDL (Data Definition Language, язык описания данных) — позволяет выполнять различные операции с базой данных, такие как CREATE (создание), ALTER (изменение) и DROP (удаление объектов).
  • DML (Data Manipulation Language, язык управления данными) — позволяет получать доступ к данным и манипулировать ими, например, вставлять, обновлять, удалять и извлекать данные из базы данных.
  • DCL (Data Control Language, язык контролирования данных) — позволяет контролировать доступ к базе данных. Пример — GRANT (предоставить права), REVOKE (отозвать права).
Вопрос 3. Что подразумевается под СУБД? Какие существуют типы СУБД?

База данных — структурированная коллекция данных. Система управления базами данных (СУБД) — программное обеспечение, которое взаимодействует с пользователем, приложениями и самой базой данных для сбора и анализа данных. СУБД позволяет пользователю взаимодействовать с базой данных. Данные, хранящиеся в базе данных, могут быть изменены, извлечены и удалены. Они могут быть любых типов, таких как строки, числа, изображения и т. д.

Существует два типа СУБД:

  • Реляционная система управления базами данных: данные хранятся в отношениях (таблицах). Пример — MySQL.
  • Нереляционная система управления базами данных: не существует понятия отношений, кортежей и атрибутов. Пример — Mongo.
Вопрос 4. Что подразумевается под таблицей и полем в SQL?

Таблица — организованный набор данных в виде строк и столбцов. Поле — это столбцы в таблице. Например:
Таблица: Student_Information
Поле: Stu_Id, Stu_Name, Stu_Marks

Вопрос 5. Что такое соединения в SQL?

Для соединения строк из двух или более таблиц на основе связанного между ними столбца используется оператор JOIN. Он используется для объединения двух таблиц или получения данных оттуда. В SQL есть 4 типа соединения, а именно:

  • Inner Join (Внутреннее соединение)
  • Right Join (Правое соединение)
  • Left Join (Левое соединение)
  • Full Join (Полное соединение)
Вопрос 6. В чем разница между типом данных CHAR и VARCHAR в SQL?

И Char, и Varchar служат символьными типами данных, но varchar используется для строк символов переменной длины, тогда как Char используется для строк фиксированной длины. Например, char(10) может хранить только 10 символов и не сможет хранить строку любой другой длины, тогда как varchar(10) может хранить строку любой длины до 10, т.е. например 6, 8 или 2.

Вопрос 7. Что такое первичный ключ (Primary key)?

  • Первичный ключ — столбец или набор столбцов, которые однозначно идентифицируют каждую строку в таблице.
  • Однозначно идентифицирует одну строку в таблице
  • Нулевые (Null) значения не допускаются

_Пример: в таблице Student StuID является первичным ключом.

Вопрос 8. Что такое ограничения (Constraints)?

Ограничения (constraints) используются для указания ограничения на тип данных таблицы. Они могут быть указаны при создании или изменении таблицы. Пример ограничений:

Вопрос 9. В чем разница между SQL и MySQL?

SQL — стандартный язык структурированных запросов (Structured Query Language) на основе английского языка, тогда как MySQL — система управления базами данных. SQL — язык реляционной базы данных, который используется для доступа и управления данными, MySQL — реляционная СУБД (система управления базами данных), также как и SQL Server, Informix и т. д.

Вопрос 10. Что такое уникальный ключ (Unique key)?
  • Однозначно идентифицирует одну строку в таблице.
  • Допустимо множество уникальных ключей в одной таблице.
  • Допустимы NULL-значения (прим. перевод.: зависит от СУБД, в SQL Server значение NULL может быть добавлено только один раз в поле с UNIQUE KEY).
Вопрос 11. Что такое внешний ключ (Foreign key)?
  • Внешний ключ поддерживает ссылочную целостность, обеспечивая связь между данными в двух таблицах.
  • Внешний ключ в дочерней таблице ссылается на первичный ключ в родительской таблице.
  • Ограничение внешнего ключа предотвращает действия, которые разрушают связи между дочерней и родительской таблицами.
Вопрос 12. Что подразумевается под целостностью данных?

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

Вопрос 13. В чем разница между кластеризованным и некластеризованным индексами в SQL?
  1. Различия между кластеризованным и некластеризованным индексами в SQL:
    Кластерный индекс используется для простого и быстрого извлечения данных из базы данных, тогда как чтение из некластеризованного индекса происходит относительно медленнее.
  2. Кластеризованный индекс изменяет способ хранения записей в базе данных — он сортирует строки по столбцу, который установлен как кластеризованный индекс, тогда как в некластеризованном индексе он не меняет способ хранения, но создает отдельный объект внутри таблицы, который указывает на исходные строки таблицы при поиске.
  3. Одна таблица может иметь только один кластеризованный индекс, тогда как некластеризованных у нее может быть много.
Вопрос 14. Напишите SQL-запрос для отображения текущей даты.

В SQL есть встроенная функция GetDate (), которая помогает возвращать текущий timestamp/дату.

Вопрос 15. Перечислите типы соединений

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

Inner join (Внутреннее соединение): в MySQL является наиболее распространенным типом. Оно используется для возврата всех строк из нескольких таблиц, для которых выполняется условие соединения.

Left Join (Левое соединение): в MySQL используется для возврата всех строк из левой (первой) таблицы и только совпадающих строк из правой (второй) таблицы, для которых выполняется условие соединения.

Right Join (Правое соединение): в MySQL используется для возврата всех строк из правой (второй) таблицы и только совпадающих строк из левой (первой) таблицы, для которых выполняется условие соединения.

Full Join (Полное соединение): возвращает все записи, для которых есть совпадение в любой из таблиц. Следовательно, он возвращает все строки из левой таблицы и все строки из правой таблицы.

Вопрос 16. Что вы подразумеваете под денормализацией?

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

Вопрос 17. Что такое сущности и отношения?

Сущности: человек, место или объект в реальном мире, данные о которых могут храниться в базе данных. В таблицах хранятся данные, которые представляют один тип сущности. Например — база данных банка имеет таблицу клиентов для хранения информации о клиентах. Таблица клиентов хранит эту информацию в виде набора атрибутов (столбцы в таблице) для каждого клиента.

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

Вопрос 18. Что такое индекс?

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

Вопрос 19. Опишите различные типы индексов.

Есть три типа индексов, а именно:

  1. Уникальный индекс (Unique Index): этот индекс не позволяет полю иметь повторяющиеся значения, если столбец индексируется уникально. Если первичный ключ определен, уникальный индекс может быть применен автоматически.
  2. Кластеризованный индекс (Clustered Index): этот индекс меняет физический порядок таблицы и выполняет поиск на основе значений ключа. Каждая таблица может иметь только один кластеризованный индекс.
  3. Некластеризованный индекс (Non-Clustered Index): не изменяет физический порядок таблицы и поддерживает логический порядок данных. Каждая таблица может иметь много некластеризованных индексов.
Вопрос 20. Что такое нормализация и каковы ее преимущества?

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

  • Лучшая организация базы данных
  • Больше таблиц с небольшими строками
  • Эффективный доступ к данным
  • Большая гибкость для запросов
  • Быстрый поиск информации
  • Проще реализовать безопасность данных
  • Позволяет легко модифицировать
  • Сокращение избыточных и дублирующихся данных
  • Более компактная база данных
  • Обеспечивает согласованность данных после внесения изменений
Вопрос 21. В чем разница между командами DROP и TRUNCATE?

Команда DROP удаляет саму таблицу, и нельзя сделать Rollback команды, тогда как команда TRUNCATE удаляет все строки из таблицы (прим. перевод.: в SQL Server Rollback нормально отработает и откатит DROP).

Вопрос 22. Объясните различные типы нормализации.

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

  • Первая нормальная форма (1NF) — нет повторяющихся групп в строках
  • Вторая нормальная форма (2NF) — каждое неключевое (поддерживающее) значение столбца зависит от всего первичного ключа
  • Третья нормальная форма (3NF) — каждое неключевое значение зависит только от первичного ключа и не имеет зависимости от другого неключевого значения столбца
Вопрос 23. Что такое свойство ACID в базе данных?

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

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

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

Изолированность. Основной целью изолированности является контроль механизма параллельного изменения данных.

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

Вопрос 24. Что вы подразумеваете под «триггером» в SQL?

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

Вопрос 25. Какие операторы доступны в SQL?

В SQL доступно три типа оператора, а именно:

  1. Арифметические Операторы
  2. Логические Операторы
  3. Операторы сравнения
Вопрос 26. Совпадают ли значения NULL со значениями нуля или пробела?

Значение NULL вовсе не равно нулю или пробелу. Значение NULL представляет значение, которое недоступно, неизвестно, присвоено или неприменимо, тогда как ноль — это число, а пробел — символ.

Вопрос 27. В чем разница между перекрестным (cross join) и естественным (natural join) соединением?

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

Вопрос 28. Что такое подзапрос в SQL?

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

Вопрос 29. Какие бывают типы подзапросов?

Существует два типа подзапросов, а именно: коррелированные и некоррелированные.

  • Коррелированный подзапрос: это запрос, который выбирает данные из таблицы со ссылкой на внешний запрос. Он не считается независимым запросом, поскольку ссылается на другую таблицу или столбец в таблице.
  • Некоррелированный подзапрос: этот запрос является независимым запросом, в котором выходные данные подзапроса подставляются в основной запрос.
Вопрос 30. Перечислите способы получить количество записей в таблице?

Для подсчета количества записей в таблице вы можете использовать следующие команды:
SELECT * FROM table1
SELECT COUNT(*) FROM table1
SELECT rows FROM sysindexes WHERE AND indid < 2

Ещё 35 вопросов с ответами опубликуем в следующей части… Следите за новостями!

22 вопроса и ответы на собеседовании по SQL: от базового до продвинутого

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

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

Ну, вы пришли в нужное место!

Независимо от того, хотите ли вы получить должность администратора базы данных, QA-тестировщика, инженера-программиста или бизнес-аналитика, ниже вы найдете самые важные вопросы для собеседования по SQL.

Основные вопросы по SQL на собеседовании

Что такое соединения в SQL?

Соединение — это операция, которая используется для объединения данных из нескольких таблиц в новую таблицу. Различные типы объединений определяют, как данные между таблицами сопоставляются с новой таблицей. Когда вам нужно получить данные из нескольких таблиц в одном запросе, есть большая вероятность, что вы будете использовать операцию соединения.

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

Пример: мы хотели бы хранить таблицу клиентов (с их именем, адресом, компанией, которую они представляют и т. д.) отдельно от таблицы транзакций (с купленными товарами, когда была совершена транзакция, сколько стоили товары, кто совершил покупка и др.).

Когда мы сохраняем информацию о том, кто совершил покупку, мы не хотели бы дублировать всю информацию о покупателе в каждой строке таблицы транзакций, и мы хотели бы сохранить только идентификатор клиента. Чтобы ответить на такой вопрос, как «сколько покупок было совершено клиентами, проживающими в определенном почтовом индексе?», нам нужно соединить две таблицы, чтобы получить такой ответ:

SELECT COUNT(*) FROM customers c JOIN transactions t ON t.customer_id = c.id WHERE c.zipcode = 94107; 

В чем разница между DELETE и TRUNCATE заявления?

Это один из тех вопросов на собеседовании по SQL, которые призваны оценить ваше понимание того, как строки базы данных хранятся и управляются внутри. Хотя DELETE и TRUNCATE оба могут использоваться для удаления всех данных из таблицы, база данных обрабатывает эти запросы по-разному. DELETE операции могут фильтровать целевые строки, поскольку они поддерживают предложение WHERE , тогда как TRUNCATE операция удаляет всю таблицу.

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

Как правило, вы должны использовать эту DELETE операцию из-за таких преимуществ, как история в журнале транзакций. В ситуациях, когда DELETE операция над всей таблицей занимает слишком много времени, вы можете рассмотреть возможность использования этой TRUNCATE операции. Интервьюеру было бы интересно услышать о компромиссах между двумя операциями.

В чем разница между первичным ключом и уникальным ключом?

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

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

Какова цель внешнего ключа в SQL?

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

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

Какие существуют способы оптимизации запроса?

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

Например, добавление к запросу в PostgreSQL символа EXPLAIN покажет план запроса для команды. Это покажет сканирование таблицы, которое будет задействовано в запросе.

Итак, если мы хотим проверить поведение запроса: SELECT * FROM table_1;, we can run the query EXPLAIN SELECT * FROM table_1;. Оттуда план запроса разбивает различные шаги, которые будут предприняты для выполнения запроса. Это распространенный способ выявления ненужных полных сканирований таблицы, который можно облегчить, настроив правильные индексы.

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

Какими способами можно определить, как можно оптимизировать запрос?

Запросы можно оптимизировать разными способами. Вот несколько распространенных примеров:

  • Уменьшите объем данных для запроса с помощью WHERE предложений.
  • Ограничьте количество полезных строк, которые база данных должна запрашивать с помощью LIMIT предложения.
  • Добавьте индекс для часто запрашиваемых столбцов.

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

Что такое нормализация и в чем ее преимущества?

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

Например, таблица с именем orders может иметь столбец с именем user_id . Вместо того, чтобы хранить копию пользовательских данных в таблице заказов, мы можем просто ссылаться на эти данные из другой таблицы с помощью соединения.

Его часто просят оценить понимание кандидатом дизайна таблицы. Нормализация данных является ключевым компонентом проектирования схем таблиц в реляционных базах данных.

Что такое сущности и отношения?

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

Например, предположим, что у нас есть две таблицы с именами orders и users. Наши orders и users являются нашими сущностями. Мы можем представить, что у одного пользователя может быть много заказов. Таким образом, пользователи могут иметь отношения «один ко многим» с заказами.

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

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

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

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

Дополнительные вопросы и ответы на собеседовании по SQL

Объясните некоторые различные типы индексов в SQL.

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

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

Каков сценарий, когда вы решите использовать ноль или пробел над NULL значением в строке?

Использование нуля или пробела над NULL значением является конструктивным решением. NULL может означать отсутствие данных.

Пример можно привести с отчеством: если пользователь не указал отчество, то его отчество будет NULL. Если пользователь указал, что у него нет отчества, то его отчество будет пустой строкой.

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

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

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

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

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

Естественное соединение создаст таблицу, которая объединяет столбцы с одинаковыми именами и типами. Любой общий столбец между таблицами будет рассматриваться для объединения. Это отличается от обычно используемого внутреннего соединения, где соединения явно выполняются для указанных столбцов. Важно отметить, что если естественное соединение не находит совпадающих столбцов, оно по существу дает тот же результат, что и перекрестное соединение.

Что такое UNION, MINUSи INTERSECT команды?

Эти три команды известны как операции над множествами. Интервьюеры зададут вам этот вопрос, чтобы оценить ваше знакомство с анализом данных и обработкой данных с использованием SQL. Если вы широко использовали SQL, но не сталкивались с этими командами, интервьюер может узнать, что вы можете использовать команды SQL для выполнения операций CRUD вместо анализа данных.

  • UNION создаст таблицу, в которой данные содержатся в двух таблицах.
  • MINUS создаст таблицу, в которой есть данные из первой таблицы за вычетом данных из второй таблицы.
  • INTERSECT создаст таблицу с общими данными между двумя таблицами.

Если мы представим диаграмму Венна с двумя пересекающимися окружностями и тремя отдельными частями, UNION представляющими все три части, MINUS представляющими левую часть и INTERSECT представляющую среднюю часть.

Напишите SQL-запрос, чтобы получить третью по величине зарплату сотрудника из employee_table.

SELECT salary FROM employee_table ORDER BY salary DESC LIMIT 1 OFFSET 2;

  • SELECT salary указывает, что мы хотим вернуть только зарплату и не включать другие столбцы.
  • ORDER BY salary DESC возвращает все результаты, упорядоченные от наибольшей до наименьшей зарплаты.
  • LIMIT 1 указывает, что мы хотим получить только одну строку. Поскольку результаты уже упорядочены фильтром ORDER BY , это вернет наибольшую зарплату.
  • OFFSET 2 указывает, что мы хотим пропустить первые 2 строки.

Этот вопрос состоит из общих команд в SQL. Вы должны быть знакомы со всеми этими командами, чтобы эффективно писать SQL-запросы.

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

Зачем нужны групповые функции в SQL?

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

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

Например, предположим, что у нас есть таблица users , в которой есть строка с именем country , указывающая страну, из которой находится пользователь. Используя GROUP BY, мы можем определить количество пользователей для каждой страны в нашей таблице.

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

Для чего используются функции SQL?

Функции SQL предоставляют способы выполнения вычислений в базе данных. Они могут включать агрегации, которые часто используются для аналитики. Примером функции агрегирования может быть AVG функция, которая возвращает средние цены, уплаченные за покупку: SELECT AVG(price) AS average_price FROM purchases.

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

В чем разница между HAVING оговоркой и WHERE оговоркой?

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

Пример . Учитывая таблицу заказов, верните число customer id и количество заказов, сделанных среди клиентов, совершивших не менее 10 покупок. Единственный способ узнать, сколько заказов сделал клиент, — это сначала подсчитать (объединить) все его заказы перед фильтрацией. Мы могли бы написать этот запрос как SELECT customer_id FROM (SELECT COUNT(*) AS count, customer_id from orders GROUP BY 2) WHERE COUNT >= 10, или мы можем упростить его с помощью HAVING предложения: SELECT COUNT(*) AS count, customer_id from orders GROUP BY 2 HAVING count >= 10

Интервьюер может не спрашивать вас явно о разнице между этими двумя пунктами, но представить вопрос в более широком контексте. Они могут попросить вас написать запрос, в котором для возврата правильного результата необходимы оба предложения WHERE и .HAVING

Как вы можете получить альтернативные записи из таблицы?

Есть несколько способов получить чередующиеся записи. Цель интервьюера — оценить ваше знакомство и удобство при написании SQL-запросов и использовании функций.

Обычно таблицы имеют автоматически увеличивающиеся первичные ключи. Мы можем использовать оператор модуля % для получения чередующихся строк. Это работает, потому что число, деленное на 2, всегда возвращает либо 0, либо 1.

SELECT * FROM WHERE % 2 = 0; SELECT * FROM WHERE % 2 = 1;

Назовите оператор, который используется в запросе на сопоставление с образцом.

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

Если у нас есть таблица products с именем столбца с именем name, мы можем искать в каждой строке продукты с именами, содержащими слово toy : SELECT * FROM products WHERE name LIKE ‘%toy%.

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

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

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

Это означает, что материализованные представления имеют лучшую производительность чтения, поскольку данные сохраняются. Когда производительности достаточно, иногда рекомендуется использовать представление, чтобы уменьшить объем данных, которые будут храниться с материализованным представлением.

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

Перечислите некоторые преимущества и недостатки хранимой процедуры.

Хранимые процедуры полезны для многократно используемых SQL-запросов. На практике мы можем создать хранимую процедуру вместо хранения списка многократно используемых SQL-запросов. Это уменьшает возможность ошибки и стандартизирует набор операций для воспроизводимости.

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

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

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

В чем разница между базами данных OLTP (например, MySQL) и OLAP (например, хранилище данных)?

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

Базы данных OLTP предназначены для быстрых запросов с надежной целостностью данных. Как правило, они оптимизированы для выполнения повседневных бизнес-операций, связанных с чтением и записью в реальном времени.

Базы данных OLAP оптимизированы для автономной аналитики и обычно включают сложные агрегаты. По сравнению с базами данных OLTP они часто имеют меньшие объемы запросов, содержат больше исторических данных и требуют значительно меньшего количества правок.

Если мы проиллюстрируем это на веб-приложении, база данных OLTP, вероятно, обрабатывает метаданные для веб-приложения. Действия пользователя и данные сохраняются и извлекаются для базы данных OLTP. Базы данных OLAP, вероятно, будут хранить данные того же типа, но будут использоваться для понимания ключевых показателей, таких как удержание пользователей и их поведение.

Ваш ответ на этот вопрос SQL будет гораздо более эффективным, если вы предоставите примеры различных баз данных OLTP и баз данных OLAP, которые вы, возможно, использовали.

Подведение итогов

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

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

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

Наше агентство по подбору ИТ-персонала предлагает вам найти квалифицированных разработчиков за срок менее 2 недель. Свяжитесь с нами прямо сейчас, чтобы узнать подробнее о возможностях расширения вашего будущего проекта. Мы обеспечиваем подбор лучших кандидатов по разумной цене. За 10 лет работы в этой сфере мы успешно заполнили свыше 5500 вакансий и сформировали 25+ команд с нуля. Проверьте отзывы от наших клиентов об агентстве и убедитесь в нашей компетентности! Если требуются дополнительные рекомендации, пишите нам в Telegram.

Вопросы по SQL, которые часто задают на собеседовании. Часть 1

SQL (Structured Query Language) – это язык программирования, используемый для управления реляционными базами данных. В этой статье я собрал вопросы по SQL, с которыми вы можете столкнуться на собеседовании. Их часто задают для проверки общих знаний и навыков.

1. Что такое первичный ключ в SQL и почему он важен?

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

Например, у вас есть таблица сотрудников, и вы хотите, чтобы у каждого сотрудника был уникальный идентификатор. Вы можете создать поле первичного ключа под названием “employee_id”. Это поле будет целым числом, которое увеличивается на единицу для каждого нового сотрудника, добавленного в таблицу. При создании первичного ключа вы также установите ограничение, которое гарантирует, что поле “employee_id” не будет содержать нулевых значений или дубликатов.

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

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

2. Что такое внешний ключ и как он используется для установления связей между таблицами?

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

Добавление внешнего ключа в таблицу создает связь между данными в этой таблице и данными в другой таблице. Эта связь гарантирует, что данные в двух таблицах всегда будут соответствовать друг другу.

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

Чтобы проиллюстрировать это, рассмотрим пример ниже.

У нас есть две таблицы: одна для сотрудников, другая для отделов. В таблице сотрудников (“employees”) есть столбец внешнего ключа, который ссылается на столбец ID отдела в таблице отделов (“departments”):

CREATE TABLE departments( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) NOT NULL ); CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50) NOT NULL, dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id));

В данном примере таблица “departments” содержит информацию о различных отделах компании, а таблица “employees” – информацию о сотрудниках компании. Внешний ключ в таблице “employees” гарантирует, что каждый сотрудник связан с отделом, который существует в таблице “departments”.

Обеспечивая ссылочную целостность между двумя таблицами, внешний ключ предотвращает несогласованность данных и обеспечивает их точность. Например, если мы попытаемся удалить из таблицы “departments” отдел, с которым связаны сотрудники в таблице “employees”, база данных не позволит нам этого сделать, поскольку это нарушит ссылочную целостность, установленную внешним ключом.

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

3. В чем разница между базой данных и схемой?

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

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

Например, представьте себе базу данных для розничного магазина. В ней может быть несколько схем для различных отделов, таких как отдел продаж, отдел инвентаризации и отдел кадров. Каждая схема будет содержать таблицы и другие объекты, относящиеся к данному отделу. Это облегчит управление базой данных и обеспечит доступ только к соответствующим данным для каждого отдела.

В общем, база данных – это хранилище для всех данных и объектов, а схема – это контейнер для подмножества этих объектов, обеспечивающий организацию и разделение задач.

4. Что такое выражение GROUP BY и как оно используется?

Выражение GROUP BY – это оператор SQL, используемый для группировки строк с одинаковыми значениями в одном или нескольких столбцах в итоговые строки, например, “найти общий объем продаж для каждого продукта”.

Оператор GROUP BY используется вместе с оператором SELECT и требует, чтобы в операторе SELECT использовалась хотя бы одна агрегатная функция, например SUM, COUNT, AVG, MAX или MIN. За оператором GROUP BY обычно следует имя (имена) столбца (столбцов), по которым необходимо сгруппировать данные.

Например, если у вас есть таблица “Sales” (“Продажи”) со столбцами “Product” (“Продукт”), “Date” (“Дата”) и “Sales Amount” (“Сумма продаж”), и вы хотите найти общую сумму продаж для каждого продукта, вы можете использовать следующий SQL-запрос:

SELECT Product, SUM([Sales Amount]) as TotalSales FROM Sales GROUP BY Product;

В результате будет получена таблица с двумя столбцами: “Product” и “TotalSales”, где каждая строка представляет собой уникальный продукт и его общий объем продаж.

Оператор GROUP BY также можно использовать с несколькими столбцами, что позволит сгруппировать данные по каждой уникальной комбинации столбцов. Например:

SELECT Product, Date, SUM([Sales Amount]) as TotalSales FROM Sales GROUP BY Product, Date;

В результате будет получена таблица с тремя столбцами: “Product”, “Date” и “TotalSales”, где каждая строка представляет собой уникальную комбинацию продукта и даты, а также общее количество продаж.

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

5. Что такое self-join и когда используется?

Self-join в SQL – это тип операции соединения, при которой таблица объединяется сама с собой. Это полезно, когда у вас есть таблица со связанными данными в разных строках, которые вы хотите объединить на основе общего поля.

Например, рассмотрим таблицу “employees” (“Сотрудники”) со столбцами для ID и имени сотрудника, а также ID менеджера. Столбец ID менеджера содержит ID менеджера сотрудника. Чтобы получить список всех сотрудников с именем их менеджера, можно использовать self-join.

Вот пример запроса:

SELECT e.name AS employee_name, m.name AS manager_name FROM employees e JOIN employees m ON e.manager_id = m.employee_id;

В этом запросе мы соединяем таблицу “employees” с самой собой, используя столбец “manager_id”, чтобы сопоставить каждого сотрудника с его руководителем. В результирующей таблице будут столбцы с именем сотрудника и именем его менеджера.

Self-join также можно использовать для поиска связей между данными в одной таблице. Например, если у вас есть таблица продуктов со столбцами для ID продукта, названия и ID “родительского” продукта, соединение внутри таблицы может быть использовано для поиска всех “дочерних” продуктов данного “родительского” продукта.

6. В чем разница между внутренним и внешним соединением?

Cоединения (joins, джоины) используются для комбинации данных из нескольких таблиц на основе общего столбца или их взаимоотношений. Два наиболее распространенных типа соединений – это внутреннее (inner join) и внешнее (outer join) соединения.

Внутреннее соединение возвращает только совпадающие строки из обеих таблиц на основе условия соединения. Например, если у нас есть две таблицы A и B, и мы выполняем внутреннее объединение с использованием общего столбца C, будут возвращены только те строки, в которых C совпадает в обеих таблицах.

Вот пример запроса для внутреннего соединения:

SELECT A.column1, B.column2 FROM A INNER JOIN B ON A.C = B.C;

С другой стороны, внешнее соединение возвращает все строки из одной таблицы и совпадающие строки из другой таблицы. Если во второй таблице нет совпадающих строк, результат будет содержать NULL-значения для всех столбцов этой таблицы. Внешние соединения также делятся на левое внешнее (left outer join), правое внешнее (right outer join) и полное внешнее соединение (full outer join).

Вот пример запроса для левого внешнего соединения:

SELECT A.column1, B.column2 FROM A LEFT OUTER JOIN B ON A.C = B.C;

Этот запрос вернет все строки из таблицы A и совпадающие строки из таблицы B на основе столбца C. Если в таблице B нет совпадающих строк, результат будет содержать NULL-значения для column2.

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

7. В чем разница между коррелированным и некоррелированным подзапросом?

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

Некоррелированный подзапрос может быть оценен независимо от внешнего запроса. Он не ссылается ни на один столбец внешнего запроса и может быть выполнен самостоятельно. Рассмотрим следующий пример, в котором используется некоррелированный подзапрос для получения данных о средней зарплате сотрудников (AVG(salary)):

SELECT first_name, last_name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);

Подзапрос (SELECT AVG(salary) FROM employees) является некоррелированным подзапросом, поскольку может выполняться независимо от внешнего запроса. Он извлекает среднюю зарплату всех сотрудников, а результат используется в операторе WHERE внешнего запроса, чтобы отфильтровать сотрудников, чья зарплата больше средней.

С другой стороны, коррелированный подзапрос ссылается на один или несколько столбцов из внешнего запроса, используя значения из него. Рассмотрим пример, в котором используется коррелированный подзапрос для получения общего объема продаж для каждого сотрудника:

SELECT first_name, last_name, (SELECT SUM(amount) FROM sales WHERE sales.employee_id = employees.employee_id) AS total_sales FROM employees;

Подзапрос (SELECT SUM(amount) FROM sales WHERE sales.employee_id = employees.employee_id) является коррелированным, поскольку ссылается на столбец employee_id из внешнего запроса. Он оценивается для каждого сотрудника во внешнем запросе, и результат используется для расчета общего объема продаж для каждого сотрудника.

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

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

Обобщенное табличное выражение (CTE) – это временно сохраненный в памяти результат табличных выражений, к которому можно обратиться повторно. Оно позволяет пользователю определить подзапрос, на который можно ссылаться несколько раз в рамках более крупного запроса.

CTE определяются с помощью ключевого слова WITH, за которым следует имя CTE и подзапрос, определяющий его. Синтаксис CTE выглядит следующим образом:

WITH cte_name AS ( SELECT column1, column2, . FROM table_name WHERE condition ) SELECT * FROM cte_name

После определения CTE можно использовать в последующих запросах, как если бы это была таблица. Это может быть полезно в ситуациях, когда на подзапрос нужно ссылаться несколько раз в большом запросе, так как это упрощает синтаксис и улучшает читабельность.

CTE также могут быть рекурсивными, что позволяет более эффективно запрашивать иерархические данные. Рекурсивный CTE включает в себя якорную часть и рекурсивную часть и может использоваться для перехода по иерархии до тех пор, пока не будет выполнено определенное условие.

В целом, CTE – это мощная функция SQL, которая позволяет упростить сложные запросы и повысить производительность.

9. В чем разница между операторами DELETE и TRUNCATE?

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

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

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

Еще одно различие между DELETE и TRUNCATE заключается в том, что DELETE можно откатить с помощью журнала транзакций, а TRUNCATE – нет. После выполнения оператора TRUNCATE данные удаляются из таблицы навсегда.

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

10. Что такое временная таблица и как она используется?

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

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

Временные таблицы можно создать с помощью оператора CREATE TEMPORARY TABLE. Они могут быть созданы в памяти или на диске, в зависимости от системы базы данных и конфигурации.

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

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

11. В чем разница между предложениями HAVING и WHERE?

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

Предложение WHERE используется для фильтрации данных перед их группировкой или агрегированием и применяется в операторах SELECT, UPDATE и DELETE. Оно фильтрует данные на основе условий, которые применяются к отдельным строкам.

Например, если вы хотите получить данные обо всех сотрудниках, чья зарплата превышает 50 000 долларов, вы можете использовать предложение WHERE в операторе SELECT:

SELECT * FROM employees WHERE salary > 50000;

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

Допустим, вы хотите получить среднюю зарплату сотрудников в каждом отделе и показать только те отделы, где средняя зарплата превышает 50 000 долларов. Вы можете использовать предложение HAVING в операторе SELECT:

SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 50000;

В этом примере предложение GROUP BY группирует данные по отделам, а функция AVG вычисляет среднюю зарплату для каждого отдела. Предложение HAVING фильтрует результаты, показывая только те отделы, в которых средняя зарплата превышает 50 000 долларов.

В общем, предложение WHERE используется для фильтрации отдельных строк перед группировкой или агрегированием, а предложение HAVING – для фильтрации групп строк после группировки или агрегирования.

12. Что такое оконная функция и как она используется?

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

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

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

SELECT date, region, product, sales_amount, AVG(sales_amount) OVER ( PARTITION BY region, product ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ) as rolling_avg_sales FROM sales_data

В этом запросе функция AVG() используется в качестве оконной функции для расчета скользящего среднего значения продаж. Предложение PARTITION BY делит данные на разделы или группы по регионам и продуктам, а предложение ORDER BY сортирует данные по дате внутри каждого раздела. Предложение ROWS BETWEEN задает диапазон строк, которые должны быть включены в оконную рамку, в данном случае текущая строка и две предыдущие.

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

13. В чем разница между транзакцией и batch?

В SQL транзакция – это единая логическая единица работы, включающая один или несколько операторов SQL. Транзакция выполняется атомарно. Это значит, что все операторы внутри транзакции должны быть либо зафиксированы, либо отменены как единое целое.

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

С другой стороны, batch (пакет) – это набор операторов SQL, которые передаются в базу данных для выполнения в виде группы. В отличие от транзакций, пакеты не обеспечивают такого же уровня атомарности или гарантии согласованности. Каждый оператор в пакете выполняется отдельно, и любые ошибки или исключения обрабатываются независимо. Пакеты обычно используются для таких задач, как загрузка данных в базу данных, запуск отчетов или выполнение рутинных задач обслуживания.

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

14. В чем разница между скалярной и табличной функцией?

В SQL функция – это набор инструкций, которые могут быть использованы для выполнения определенной задачи. Существует два типа функций: скалярные и табличные.

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

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

Одно из ключевых различий между скалярными и табличными функциями заключается в том, что скалярные функции можно вызывать внутри запроса, то есть использовать их как часть предложений SELECT, WHERE или ORDER BY. Табличные функции должны вызываться как часть предложения FROM, поскольку они возвращают таблицу.

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

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

15. Что такое нормализация и почему она важна?

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

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

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

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

Нормализация обычно выполняется с помощью серии шагов, известных как нормальные формы. Наиболее часто используемые нормальные формы – это первая нормальная форма (1НФ), вторая нормальная форма (2НФ) и третья нормальная форма (3НФ). Каждая нормальная форма строится на основе предыдущей, с каждым шагом добавляя все больше правил и ограничений для обеспечения целостности и непротиворечивости данных.

  • sql
  • собеседование
  • собеседование вопросы
  • собеседование в it

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *