Основные функции и приёмы работы с календарными значениями в Oracle: получение текущих даты и времени на стороне БД, вычисление интервалов, смещение по месяцам, усечение до нужной гранулярности, извлечение компонентов даты, а также корректное преобразование строк в DATE и TIMESTAMP. Полезно для отчётов, аналитики, планирования, ETL-процессов и любой логики, связанной с датами и временем.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍10🤝7❤2
В этой статье:
• Показано, как реализовать полноценную игру, от хранения состояния до рендеринга 3D-сцены — средствами одной лишь базы данных;
• Разобрана архитектура, игровой цикл на транзакциях и многопользовательская синхронизация через SQL;
• На реальном проекте демонстрируются неожиданные возможности СУБД далеко за пределами типичных CRUD-задач.🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥10🤝8
🔥13❤9👍7🤝3
Например, когда отправляешь
SELECT, UPDATE или другой SQL, СУБД сначала обрабатывает его внутренне, а уже потом выполняет.На схеме — путь запроса: приём — разбор (парсер) — оптимизация — выполнение — доступ к данным — буферы, транзакции и блокировки — чтение/запись (память или диск).
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥9👍8
Анти-JOIN — как корректно выбирать строки без связанных записей!
Частая задача в SQL — найти строки, для которых отсутствуют связанные записи в другой таблице. Это классический anti-join. Например, нужно получить клиентов, которые ни разу не сделали заказ.
Таблицы:
Проверять нужно гарантированно
Запрос напрямую выражает отсутствие строк. В простом случае он эквивалентен
Почему не
Если подзапрос возвращает хотя бы один
Нюанс с условиями в
Этот запрос ищет клиентов без заказов после указанной даты.
Если требуется найти клиентов вообще без заказов, добавлять условия в
🔥 Минимально необходим индекс
➡️ SQL Ready | #практика
Частая задача в SQL — найти строки, для которых отсутствуют связанные записи в другой таблице. Это классический anti-join. Например, нужно получить клиентов, которые ни разу не сделали заказ.
Таблицы:
customers(id, name)
orders(id, customer_id, created_at)
LEFT JOIN + IS NULL:SELECT c.id, c.name
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id
WHERE o.id IS NULL;
LEFT JOIN возвращает всех клиентов. Если совпадений нет, поля из orders становятся NULL, и фильтр оставляет только клиентов без заказов.Проверять нужно гарантированно
NOT NULL колонку правой таблицы (обычно PK, например o.id), иначе возможны логические ошибки.NOT EXISTS (предпочтительно):SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.id
);
Запрос напрямую выражает отсутствие строк. В простом случае он эквивалентен
LEFT JOIN, но лучше отражает намерение, устойчив к NULL в подзапросе и часто даёт более предсказуемый план при усложнении условий. Почему не
NOT IN:SELECT c.id, c.name
FROM customers c
WHERE c.id NOT IN (
SELECT customer_id
FROM orders
);
Если подзапрос возвращает хотя бы один
NULL, результат может стать пустым из-за трёхзначной логики SQL. Использовать этот вариант безопасно только при гарантированном NOT NULL в orders.customer_id.Нюанс с условиями в
JOIN:SELECT c.id
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id
AND o.created_at >= DATE '2026-01-01'
WHERE o.id IS NULL;
Этот запрос ищет клиентов без заказов после указанной даты.
Если требуется найти клиентов вообще без заказов, добавлять условия в
JOIN нельзя — это меняет бизнес-смысл. В таком случае корректнее использовать NOT EXISTS.orders(customer_id). При частой фильтрации по дате логичен составной индекс (customer_id, created_at).Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍10🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
Этот репозиторий содержит структурированные задания, схемы баз данных и примеры SQL-запросов из курса на Stepik. Материалы охватывают работу с таблицами, фильтрацию, JOIN, группировки, агрегаты и другие ключевые темы языка, с акцентом на практику. Отличный ресурс для тех, кто хочет закрепить теорию через задачи.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤12👍10
Почему OFFSET может ломать производительность пагинации?
Даже если вы не видите эти строки, СУБД всё равно читает их из индекса или таблицы, поэтому время выполнения растёт вместе с
Эффективнее использовать
Такой запрос использует индекс напрямую (если id индексирован, обычно это PK), поэтому работает одинаково быстро на первой и на миллионной странице.
Если сортировка не уникальная (например
🔥 Такой подход широко используется в больших системах: API, лентах событий, лог-системах и бесконечных скроллах.
➡️ SQL Ready | #совет
OFFSET выглядит удобно для страниц, но база всё равно должна просканировать и пропустить все предыдущие строки. Поэтому чем дальше страница, тем медленнее запрос:OFFSET 100000
Даже если вы не видите эти строки, СУБД всё равно читает их из индекса или таблицы, поэтому время выполнения растёт вместе с
OFFSET:SELECT *
FROM orders
WHERE id > :last_seen_id
ORDER BY id
LIMIT 10;
Эффективнее использовать
keyset-pagination — продолжать выборку от последнего значения ключа, а не пропускать строки:WHERE id > :last_seen_id
:last_seen_id — это id последней строки предыдущей страницы.Такой запрос использует индекс напрямую (если id индексирован, обычно это PK), поэтому работает одинаково быстро на первой и на миллионной странице.
Если сортировка не уникальная (например
created_at), добавляйте tie-breaker:ORDER BY created_at, id
WHERE (created_at, id) > (:last_seen_created_at, :last_seen_id)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤15🔥8
В этой статье:
• Разобрано, зачем в высоконагруженной системе может понадобиться сразу несколько СУБД и как между ними строится абстрактный слой доступа к данным;
• Показан опыт интеграции распределённой базы данных YDB в существующую архитектуру;
• Разбираются технические нюансы: батч-операции, строгая типизация запросов, особенности драйверов и результаты нагрузочного тестирования.🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍8🔥8
Агрегирование по группам с оконными функциями!
Когда нужно посчитать агрегаты по группе и при этом сохранить исходные строки, многие делают подзапрос с
Оконная функция считает агрегат по группе, но не схлопывает строки, поэтому не нужен ни
Можно получить любые метрики по той же группе в одном проходе по данным:
Особенно полезно для аналитики, отчётов, флагов “у пользователя больше N заказов” и подобных задач без лишних подзапросов.
🔥 Один из самых эффективных способов упростить сложные запросы.
➡️ SQL Ready | #совет
Когда нужно посчитать агрегаты по группе и при этом сохранить исходные строки, многие делают подзапрос с
GROUP BY и потом джойнят его обратно:SUM(o.total) OVER (PARTITION BY o.user_id)
Оконная функция считает агрегат по группе, но не схлопывает строки, поэтому не нужен ни
GROUP BY, ни повторное соединение:AVG(o.total) OVER (PARTITION BY o.user_id)
Можно получить любые метрики по той же группе в одном проходе по данным:
COUNT(*) OVER (PARTITION BY o.user_id)
Особенно полезно для аналитики, отчётов, флагов “у пользователя больше N заказов” и подобных задач без лишних подзапросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥9🤝8
This media is not supported in your browser
VIEW IN TELEGRAM
Сервис для работы с данными в формате таблиц (аналог Excel / Google Sheets) с интегрированными AI-инструментами. Позволяет анализировать данные, создавать формулы по описанию и подтягивать информацию из интернета и API. Подходит для аналитики, автоматизации и обработки больших массивов данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤8🔥8🤝1
В этой задаче напишем SQL-запрос, который поможет вычислить среднее время сессии для пользователей на разных устройствах за последние 30 дней.
Что делаем:
• Фильтруем сессии по времени и устройствам.
• Считаем длительность каждой сессии.
• Группируем и находим среднее время по типам устройств.
Такой анализ помогает понять, в каких моментах сфокусироваться на улучшении UX и маркетинговых кампаниях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍10❤8🤝1
Например,
LEFT JOIN позволяет получить все строки из левой таблицы, даже если соответствующих записей в правой таблице нет, а FULL OUTER JOIN возвращает все строки из обеих таблиц, заполняя отсутствующие значения NULL.На изображении показаны 4 основных типа SQL JOIN, которые чаще всего используются при объединении данных из нескольких таблиц.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥10🤝8❤3