SQL cобеседования
782 subscribers
97 photos
181 links
Подготовка к собеседованиям в IT

Еще больше разобранных вопросов для подготовки на сайте https://frontview-it.ru

Backend - @frontview_backend
Frontend - @frontview_it
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Агрегатные функции используются для выполнения вычислений на наборе строк и возврата одного результата. Примеры включают COUNT для подсчета строк, SUM для суммы значений, AVG для среднего значения, MIN и MAX для минимального и максимального значений.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Создание индекса в таблице ускоряет поиск данных, особенно при работе с большими объемами информации. Индекс создается на один или несколько столбцов, что позволяет быстрее находить строки по значениям этих столбцов.

Для создания индекса используется команда CREATE INDEX. Например, чтобы создать индекс на столбец email в таблице users, можно использовать следующий запрос:


CREATE INDEX idx_email ON users(email);


Если нужно создать составной индекс на несколько столбцов, например, на first_name и last_name, запрос будет выглядеть так:


CREATE INDEX idx_name ON users(first_name, last_name);


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Self join — это операция соединения таблицы с самой собой. Она используется, когда нужно сравнить строки одной таблицы между собой, например, для поиска связанных данных в рамках одного набора записей.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3
✔️ Чтобы рассчитать процент от общего значения с использованием GROUP BY, можно использовать оконные функции. Например, нужно посчитать долю продаж каждого товара от общего объема продаж.


SELECT
product_id,
SUM(sales) AS total_sales,
SUM(sales) * 100.0 / SUM(SUM(sales)) OVER () AS sales_percentage
FROM
sales
GROUP BY
product_id;


В этом запросе:
- SUM(sales) считает общие продажи для каждого товара.
- SUM(SUM(sales)) OVER () вычисляет общий объем продаж по всем товарам.
- Деление на общий объем и умножение на 100 дает процент от общего.

Этот подход позволяет легко рассчитать доли для каждой группы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Агрегатные функции в подзапросах применяются для вычисления сумм, средних значений, максимумов, минимумов или количества записей в наборе данных. Результат такого подзапроса может использоваться в основном запросе для фильтрации, сравнения или других операций.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
🔥 Для реализации постраничного просмотра данных в SQL используются ключевые слова LIMIT и OFFSET. LIMIT задает количество строк, которые будут возвращены, а OFFSET указывает, с какой строки начинать выборку.

Пример запроса для получения первой страницы с 10 записями:

SELECT * FROM table_name
LIMIT 10 OFFSET 0;


Этот запрос вернет первые 10 строк из таблицы table_name.

Для второй страницы:

SELECT * FROM table_name
LIMIT 10 OFFSET 10;


Здесь OFFSET 10 пропускает первые 10 строк и возвращает следующие 10.

Таким образом, для каждой страницы OFFSET рассчитывается как (номер_страницы - 1) * количество_строк_на_странице.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Триггеры удаляются с помощью команды DROP TRIGGER, где указывается имя триггера и схема, если это необходимо. Перед удалением важно убедиться, что триггер больше не требуется, так как это действие необратимо.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Команда LIKE используется для поиска строк, соответствующих определённому шаблону. Шаблон может включать символы % (любое количество символов) и _ (ровно один символ).


SELECT * FROM users WHERE name LIKE 'J%'; -- Находит имена, начинающиеся на "J"
SELECT * FROM users WHERE name LIKE '%son'; -- Находит имена, заканчивающиеся на "son"
SELECT * FROM users WHERE name LIKE '_ohn'; -- Находит имена из 4 символов, где второй символ "o"


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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Ограничения при создании таблицы добавляются с помощью ключевых слов, таких как PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL и CHECK. Они обеспечивают целостность данных, ограничивая допустимые значения в столбцах.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Подзапросы в операторе INSERT позволяют вставлять данные, полученные из другого запроса. Это полезно, когда нужно скопировать данные из одной таблицы в другую или вставить результат вычислений.

Пример: вставка данных из таблицы employees в таблицу archive_employees для сотрудников, ушедших из компании.


INSERT INTO archive_employees (id, name, position)
SELECT id, name, position
FROM employees
WHERE status = 'inactive';


В этом примере подзапрос SELECT выбирает данные из таблицы employees, где статус равен 'inactive', и вставляет их в таблицу archive_employees. Подзапросы могут быть использованы для вставки как одного, так и множества строк.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121
Выбор типа индекса зависит от характера запросов и структуры данных. Для уникальных значений подходит уникальный индекс, для ускорения поиска по диапазону — B-дерево, а для полнотекстового поиска — полнотекстовый индекс.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
USING в JOIN используется для упрощения синтаксиса, когда столбцы, по которым происходит соединение таблиц, имеют одинаковые имена. Указывается только имя столбца, без префиксов таблиц.


SELECT *
FROM employees
JOIN departments USING (department_id);


В этом примере таблицы employees и departments соединяются по столбцу department_id. USING автоматически учитывает, что столбец существует в обеих таблицах, и исключает дублирование в результате. Это удобно для сокращения кода и улучшения читаемости.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Для фильтрации агрегированных данных используется ключевое слово HAVING. Оно применяется после GROUP BY и позволяет задавать условия для результатов агрегации, в отличие от WHERE, который фильтрует строки до группировки.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Нормализация данных — это процесс организации данных в базе для минимизации избыточности и аномалий. Достигается путем разделения данных на таблицы и установления связей между ними. Основные нормальные формы (1NF, 2NF, 3NF и т.д.) определяют правила структурирования.

Пример:

CREATE TABLE Users (
UserID INT PRIMARY KEY,
UserName VARCHAR(50)
);

CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
UserID INT,
FOREIGN KEY (UserID) REFERENCES Users(UserID)
);


Денормализация — это намеренное добавление избыточности для повышения производительности, например, дублирование данных в таблицах для уменьшения количества JOIN-запросов.

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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64
Оптимизация запросов с индексами включает создание индексов на часто используемых столбцах в условиях WHERE, JOIN и ORDER BY. Важно избегать избыточных индексов и учитывать их влияние на производительность при вставке и обновлении данных.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Индексы используются для ускорения поиска данных в таблице. Создание индекса позволяет быстрее находить строки по определенным столбцам.

Для создания индекса используется команда CREATE INDEX. Синтаксис:


CREATE INDEX index_name
ON table_name (column1, column2, ...);


- index_name — имя индекса.
- table_name — имя таблицы, для которой создается индекс.
- column1, column2, ... — столбцы, по которым будет построен индекс.

Пример создания индекса по столбцу email в таблице users:


CREATE INDEX idx_email
ON users (email);


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
🟢Основное отличие между INNER JOIN и OUTER JOIN заключается в том, как они обрабатывают строки, которые не имеют совпадений в соединяемых таблицах.

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


SELECT A.id, B.name
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;


В этом запросе вернутся только строки, где id совпадает в обеих таблицах.

OUTER JOIN бывает трех типов: LEFT, RIGHT и FULL. Он возвращает все строки из одной или обеих таблиц, даже если нет совпадений. Например, LEFT OUTER JOIN вернет все строки из левой таблицы и соответствующие строки из правой. Если совпадений нет, в правой таблице будут значения NULL:


SELECT A.id, B.name
FROM TableA A
LEFT JOIN TableB B ON A.id = B.id;


Здесь вернутся все строки из TableA, даже если в TableB нет совпадений.

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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
😎Для объединения таблиц используется оператор JOIN, который позволяет связывать данные из разных таблиц по условию. Основные типы JOIN: INNER JOIN (возвращает только совпадающие строки), LEFT JOIN (все строки из левой таблицы и совпадающие из правой), RIGHT JOIN (все строки из правой таблицы и совпадающие из левой) и FULL JOIN (все строки из обеих таблиц).


SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;


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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
🔹Для обработки ошибок в подзапросах можно использовать конструкции CASE или COALESCE, чтобы предусмотреть возможные исключительные ситуации, такие как отсутствие данных или деление на ноль. Также важно проверять корректность данных перед выполнением подзапроса.


SELECT name,
(SELECT COALESCE(SUM(amount), 0)
FROM orders
WHERE orders.user_id = users.id) AS total_amount
FROM users;


COALESCE возвращает первое не NULL значение, что помогает избежать ошибок при отсутствии данных.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
UNION объединяет результаты двух или более запросов, удаляя дубликаты строк, а UNION ALL делает то же самое, но сохраняет все строки, включая дубликаты. Оба оператора требуют, чтобы количество и типы столбцов в объединяемых запросах совпадали.


SELECT name FROM employees
UNION
SELECT name FROM contractors; -- Удалит дубликаты

SELECT name FROM employees
UNION ALL
SELECT name FROM contractors; -- Сохранит все строки


UNION полезен, когда нужно исключить повторяющиеся данные, а UNION ALL — когда важна производительность.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
➡️ Первичный ключ (Primary Key) и внешний ключ (Foreign Key) — важные понятия в реляционных базах данных.

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

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

Пример:


CREATE TABLE Users (
UserID INT PRIMARY KEY, -- UserID — первичный ключ
UserName VARCHAR(50)
);

CREATE TABLE Orders (
OrderID INT PRIMARY KEY, -- OrderID — первичный ключ
UserID INT FOREIGN KEY REFERENCES Users(UserID) -- UserID — внешний ключ
);


В этом примере UserID в таблице Orders ссылается на UserID в таблице Users, создавая связь между ними.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6