Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
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) * количество_строк_на_странице.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
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
полезен для фильтрации данных по частичному совпадению, например, при поиске по текстовым полям. Регистрозависимость зависит от настройки базы данных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
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
. Подзапросы могут быть использованы для вставки как одного, так и множества строк.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
JOIN
используется для упрощения синтаксиса, когда столбцы, по которым происходит соединение таблиц, имеют одинаковые имена. Указывается только имя столбца, без префиксов таблиц.
SELECT *
FROM employees
JOIN departments USING (department_id);
В этом примере таблицы
employees
и departments
соединяются по столбцу department_id
. USING
автоматически учитывает, что столбец существует в обеих таблицах, и исключает дублирование в результате. Это удобно для сокращения кода и улучшения читаемости.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Нормализация данных — это процесс организации данных в базе для минимизации избыточности и аномалий. Достигается путем разделения данных на таблицы и установления связей между ними. Основные нормальные формы (1NF, 2NF, 3NF и т.д.) определяют правила структурирования.
Пример:
Денормализация — это намеренное добавление избыточности для повышения производительности, например, дублирование данных в таблицах для уменьшения количества JOIN-запросов.
Нормализация улучшает целостность данных, а денормализация ускоряет выполнение запросов.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ SQL собеседования
Пример:
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-запросов.
Нормализация улучшает целостность данных, а денормализация ускоряет выполнение запросов.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4
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);
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
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 — для включения всех данных, даже без совпадений.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
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
определяет, по какому полю происходит связывание таблиц.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
CASE
или COALESCE
, чтобы предусмотреть возможные исключительные ситуации, такие как отсутствие данных или деление на ноль. Также важно проверять корректность данных перед выполнением подзапроса.
SELECT name,
(SELECT COALESCE(SUM(amount), 0)
FROM orders
WHERE orders.user_id = users.id) AS total_amount
FROM users;
COALESCE
возвращает первое не NULL
значение, что помогает избежать ошибок при отсутствии данных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
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
— когда важна производительность.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Первичный ключ — это уникальный идентификатор записи в таблице. Он гарантирует, что каждая строка уникальна, и не может содержать 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
, создавая связь между ними.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
JOIN
с несколькими условиями позволяет гибко связывать таблицы, учитывая дополнительные критерии. Условия добавляются через AND
или OR
в предложении ON
. Пример:
SELECT
Users.UserName,
Orders.OrderID
FROM
Users
JOIN
Orders
ON
Users.UserID = Orders.UserID
AND Orders.Amount > 100; -- Дополнительное условие
Здесь таблицы
Users
и Orders
соединяются по UserID
, но также учитывается условие, что сумма заказа (Amount) должна быть больше 100. Можно использовать несколько условий для уточнения связи между таблицами, что делает запросы более точными и гибкими.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3
Медиана — это значение, которое делит набор данных на две равные части. В SQL медиану можно найти с помощью оконных функций и агрегации. Для нечетного количества строк медиана — это значение в середине, для четного — среднее двух центральных значений.
Запрос сортирует данные, нумерует строки и находит центральные значения. Если количество строк четное, вычисляется среднее между двумя центральными значениями. Этот подход работает в большинстве SQL-систем.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ SQL собеседования
WITH OrderedData AS (
SELECT value,
ROW_NUMBER() OVER (ORDER BY value) AS row_num,
COUNT(*) OVER () AS total_count
FROM dataset
)
SELECT AVG(value) AS median
FROM OrderedData
WHERE row_num IN (
(total_count + 1) / 2,
(total_count + 2) / 2
);
Запрос сортирует данные, нумерует строки и находит центральные значения. Если количество строк четное, вычисляется среднее между двумя центральными значениями. Этот подход работает в большинстве SQL-систем.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤔1
ьзую
т CASE или
PIVOT (в поддерживаемых СУБД). Пример с CASE (универсальный способ):
SELECT
product_category,
SUM(CASE WHEN year = 2022 THEN revenue ELSE 0 END) AS revenue_2022,
SUM(CASE WHEN year = 2023 THEN revenue ELSE 0 END) AS revenue_2023
FROM sales
GROUP BY product_category;
Группирует выручку по категориям товаров с разбивкой по годам.
Пример с PIVOT (SQL Server, Oracle):
SELECT *
FROM (
SELECT product_category, year, revenue
FROM sales
) AS source
PIVOT (
SUM(revenue) FOR year IN ([2022], [2023])
) AS pivot_table;
Аналогичный результат, но с использованием встроенного оператора.
Для динамического свода (когда столбцы заранее неизвестны) потребуется динамический SQL.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11