SQL Ready | Базы Данных
15.4K subscribers
1.2K photos
66 videos
2 files
578 links
Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3QREBc

Реклама на бирже: https://telega.in/c/sql_ready
Download Telegram
🖥 Аналитические (оконные) функции Oracle!

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

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥137🤝6
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ CodeAbbey — тренажёр алгоритмического мышления!

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

📌 Оставляю ссылочку: codeabbey.com

➡️ SQL Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7🤝62
USING — способ объединять таблицы в SQL!

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

Объединим заказы и клиентов по общему полю:
SELECT *
FROM orders
JOIN customers USING (customer_id);


То же самое через ON выглядело бы чуть длиннее и менее лаконично:
SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;


С USING SQL сам убирает дубликаты полей, оставляя одно customer_id в результирующем наборе.

Можно соединять и по нескольким ключам:
SELECT *
FROM orders
JOIN shipments USING (order_id, customer_id);


Пример из аналитики: посчитаем сумму заказов по каждому клиенту:
SELECT customer_id,
c.customer_name,
SUM(o.amount) AS total_amount
FROM customers c
JOIN orders o USING (customer_id)
GROUP BY customer_id, c.customer_name
HAVING SUM(o.amount) > 1000
ORDER BY total_amount DESC;


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

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥189👍9
Транзакция — не просто “begin и commit”, а ещё и способ управлять атомарностью и блокировками!

Начинаешь с BEGIN — всё, что дальше, идёт как единое целое:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;


Если что-то падает, делай rollback, и база возвращается к исходному состоянию.

Не забывай: каждая открытая транзакция держит блокировки. Чем дольше она живёт, тем выше шанс конфликтов.

Контролируй уровень изоляции - баланс между скоростью и безопасностью:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


🔥 Производительность БД начинается с правильного управления транзакциями и блокировками.

➡️ SQL Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍8🤝63
🖥 Пишем мини-чат-бота!

Сегодня создаём простого бота, который “понимает” текст запроса и отвечает на сообщения пользователя.

В этом посте:
• Храним шаблоны фраз и ответы в таблице responses;

• Используем ILIKE, чтобы находить ключевые слова в сообщении;

• Возвращаем лучший ответ по приоритету совпадений.


Приём показывает, что SQL способен работать не только с числами, но и с текстом, превращаясь в мини-экспертную систему.

➡️ SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥279👍7🤝1
🖥 Временные таблицы и переменные в SQL Server!

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

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍119
WITHIN GROUP — агрегаты с управляемым порядком!

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

Пример: соберём список продуктов по категории в порядке убывания продаж:
SELECT
category_id,
LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY total_sales DESC) AS top_products
FROM product_sales
GROUP BY category_id;


В отличие от ARRAY_AGG(product_name ORDER BY ...), синтаксис WITHIN GROUP используется для ordered-set функций, а не для любых агрегатов.

Пример вычисления порогового значения 90% по сумме заказов по регионам:
SELECT
region_id,
PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY total_amount) AS p90_sales
FROM orders
GROUP BY region_id;


PERCENTILE_CONT() и PERCENTILE_DISC() позволяют вычислять медиану или любое процентное значение без оконных функций.

Медиана чека по каждому магазину:
SELECT
store_id,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total_amount) AS median_check
FROM orders
GROUP BY store_id;


Такой подход может быть проще и эффективнее, чем использование NTILE() или RANK() в оконных выражениях.

🔥 Используйте WITHIN GROUP, когда важен порядок в агрегатах.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍87