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
Ограничение — это правило, применяемое к данным в таблице для обеспечения их целостности и точности. Основные виды ограничений включают PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL и CHECK.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
🔴 Транзакции позволяют группировать несколько операций в одну логическую единицу работы. Они обеспечивают атомарность: либо все операции выполняются, либо ни одна. Транзакции начинаются с BEGIN TRANSACTION и завершаются COMMIT или ROLLBACK.


BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

COMMIT;


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

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

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
➡️ Оптимизация подзапросов важна для повышения производительности запросов. Один из подходов — замена подзапросов на JOIN. Например:


SELECT * FROM orders
WHERE customer_id IN (SELECT id FROM customers WHERE active = 1);


Можно переписать с использованием JOIN:


SELECT orders.* FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.active = 1;


Также стоит избегать коррелированных подзапросов, так как они выполняются для каждой строки основного запроса. Вместо этого лучше использовать временные таблицы или CTE (Common Table Expressions). Индексация полей, участвующих в подзапросах, также значительно ускоряет выполнение.

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

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

Для обработки NULL в подзапросах можно использовать функции, такие как COALESCE или IS NULL.

Пример с COALESCE:

SELECT name
FROM users
WHERE age = (SELECT COALESCE(age, 0) FROM profiles WHERE user_id = 1);


COALESCE возвращает первое ненулевое значение из списка. В данном случае, если age в подзапросе NULL, будет использовано значение 0.

Пример с IS NULL:

SELECT name
FROM users
WHERE (SELECT age FROM profiles WHERE user_id = 1) IS NULL;


Этот запрос вернет имена пользователей, если возраст в подзапросе равен NULL.

Также можно использовать IFNULL или NULLIF в зависимости от задачи. Важно учитывать, что сравнение с NULL через = или != всегда возвращает NULL, поэтому для проверки на NULL используется IS NULL или IS NOT NULL.

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

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4
Уровни изоляции транзакций определяют степень защиты данных от влияния параллельных транзакций, обеспечивая баланс между целостностью данных и производительностью. В SQL стандарте выделяют четыре уровня: Read Uncommitted, Read Committed, Repeatable Read и Serializable, каждый из которых предлагает разную степень изоляции и защиты от аномалий.

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
📝 SQL и NoSQL — это два основных типа баз данных, которые отличаются структурой, способом хранения данных и подходами к работе с ними.

SQL (реляционные базы данных) используют таблицы для хранения данных. Данные организованы в строках и столбцах, где каждая строка представляет запись, а каждый столбец — атрибут. SQL-базы строго следуют схеме, которая определяет структуру данных. Примеры: MySQL, PostgreSQL.


SELECT * FROM users WHERE age > 30;


Этот запрос извлекает всех пользователей старше 30 лет из таблицы users.

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


{
"name": "Alex",
"age": 35,
"city": "Moscow"
}


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

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

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

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

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

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

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

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
👉 Команда SELECT используется для извлечения данных из таблицы в SQL. Основной синтаксис выглядит так:


SELECT column1, column2, ...
FROM table_name;


- column1, column2, ... — столбцы, которые нужно извлечь. Если нужно выбрать все столбцы, используется символ *.
- table_name — имя таблицы, из которой извлекаются данные.

Пример:


SELECT first_name, last_name
FROM employees;


Этот запрос извлекает данные из столбцов first_name и last_name таблицы employees.

Для фильтрации данных используется ключевое слово WHERE:


SELECT first_name, last_name
FROM employees
WHERE department = 'Sales';


Этот запрос вернет только тех сотрудников, которые работают в отделе продаж.

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

✈️ SQL собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
Агрегатные функции используются для выполнения вычислений на наборе строк и возврата одного результата. Примеры включают 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