7786
Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it
ALL и ANY в SQL — учимся использовать для сравнения с подзапросами!
Эти операторы предназначены для сравнения результатов одного SELECT с результатами второго SELECT из подзапроса, что может быть удобно в некоторых случаях: если подзапрос возвращает небольшое количество строк или когда нужно сравнить значение хотя бы с одним значением из подзапроса.
Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории Discount:
SELECT product, price
FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'Discount');
SELECT DISTINCT customer_id
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE price > 1000);
SELECT DISTINCT customer_id
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE category = 'Electronics');
ALL и ANY возможно только с подзапросами и может быть неэффективным, если подзапрос возвращает большое количество строк.
RETURNING: получение данных прямо из DML!
Во многих СУБД (например, PostgreSQL, Oracle и др.) оператор RETURNING позволяет вернуть значения вставленных, обновлённых или удалённых строк без дополнительного SELECT.
Вставляем строку и сразу получаем созданный ID:
INSERT INTO users (name, email)
VALUES ('Anna Ivanova', 'anna@example.com')
RETURNING id;
UPDATE accounts
SET balance = balance + 500
WHERE id = 10
RETURNING balance AS new_balance;
DELETE FROM orders
WHERE id = 42
RETURNING order_date, amount;
UPDATE products
SET price = price * 1.10
WHERE category = 'Books'
RETURNING id, price;
RETURNING упрощает логику: нет необходимости выполнять дополнительный запрос, чтобы получить новые данные — они доступны сразу в рамках одного DML.
🖥 Методы для работы с датой и временем в PostgreSQL!Эта шпаргалка охватывает наиболее используемые функции PostgreSQL для получения текущего времени, извлечения компонентов дат, расчета интервалов, округления временных меток и преобразования Unix-времени. Подходит для разработки систем, где критична точная и предсказуемая работа с временными значениями.
➡️ SQL Ready | #шпора
🖥 Selectivity — почему индекс может не сработать?
Селективность определяет, сколько строк проходит через фильтр, и именно по этому показателю оптимизатор выбирает план запроса.
Сегодня в гайде:
• Как селективность влияет на выбор плана;
• Почему один и тот же запрос может работать по-разному на разных данных;
• Как устаревшая статистика приводит к “не тем” решениям оптимизатора.
🖥 Как восстановить состояние LRU-кэша после серии обращений?
Возьмём последовательность обращений к ключам и с помощью SQL определим, какие из них “выжили” в памяти при ограниченном размере кэша.
Сегодня в задаче:
• Найдём последнее обращение к каждому ключу, определив его актуальность на момент завершения всех операций.
• Отсортируем элементы по “новизне” использования и применим ограничение capacity;
• Получим итоговое состояние LRU-кэша;
Хотите найти дубликаты по нескольким полям и оставить только самые свежие или правильные записи?
Используйте оконную функцию ROW_NUMBER() по ключам,
которые должны быть уникальны:
ROW_NUMBER() OVER (
PARTITION BY email, phone
ORDER BY updated_at DESC
)
(dup_rank = 1) - оригинал.SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY email, phone ORDER BY updated_at DESC
) AS dup_rank
FROM users
) t
WHERE dup_rank > 1;
👨👨👨👨👨👨👨👨👨👨
Каналы с Junior IT вакансиями
и стажировками
Подписывайся и забирай свой оффер 🤘
1. Стажировки и вакансии по России и миру
2. IT вакансии по СНГ
3. IT стажировки по СНГ
4. ИИ-ассистент для автооткликов
5. IT стажировки и волонтерства
6. IT стажировки в топовых компаниях мира
7. Удалённые IT вакансии и стажировки
8. Python вакансии и стажировки
9. БИГТЕХ вакансии и стажировки
10. Design вакансии и стажировки
11. QA вакансии и стажировки
12. Junior вакансии и стажировки
13. Frontend вакансии и вопросы собесов
14. Вакансии и стажировки для аналитиков
15. Вакансии в русских стартапах за границей
16. Вакансии и стажировки для DevOps
17. Вакансии, которых нет на ХХ.РУ
Миграция с MS SQL, Oracle и PostgreSQL проходит почти сама собой – возможно ли это? 🤔
📍Короткий ответ: Да.
Диасофт обновил свою СУБД Digital Q.DataBase, чтобы компании кардинально снижали сложность, сроки и стоимость импортозамещения в инфраструктуре баз данных 📉
Организации теперь могут проводить перенос данных и хранимой логики на российскую СУБД с сохранением существующих бизнес-процессов и с минимальными операционными рисками.
Это стало возможным благодаря обновлению "Полиглот" 🗣
Оно обеспечивает исполнение запросов, написанных на диалектах SQL ведущих зарубежных СУБД: Oracle, Microsoft SQL Server и PostgreSQL.
Подробно об этом расскажет спикер Диасофт на вебинаре 25 ноября.
🔗 Регистрируйтесь по ссылке!
Реклама. ООО "ДИАСОФТ ЭКОСИСТЕМА". ИНН 9715403607.
Удаляйте ChatGPT. Вы не умеете им пользоваться.
Большинство пользователей спамит в ИИ всякую чушь — просят рассказать анекдот, изливают душу и используют как Гугл.
Российский тимлид OpenAI Вадим Петрич рассказывает в «Доктор GPT» как извлекать из нейронок максимум пользы. Это очень интересно:
• ТОП №1 нейросеть, генерирующая видео без цензуры вообще
• Готовые промты на все случаи жизни
• Инсайды и разработки от китов индустрии
Подпишитесь, с Доктором GPT нейронки станут инструментом роста, а не безделушкой:
/channel/+5CgWzXmpgdhlMGEy
🖥 MVCC — что реально происходит при UPDATE!MVCC объясняет, почему строки в базе не перезаписываются, а накапливают версии и почему таблица может расти, даже если количество записей не изменилось.
Сегодня в гайде:
• Как возникают версии строк при UPDATE;
• Почему длинные транзакции удерживают старые данные;
• Откуда появляется bloat и как он влияет на индексы.
VACUUM под нагрузкой.
Нужно сделать очередь задач, чтобы несколько воркеров могли брать задания параллельно?FOR UPDATE SKIP LOCKED — флаг, который позволяет захватить строку, а занятые другими процессами — пропустить, не ожидая их.
SELECT id
FROM jobs
WHERE taken_at IS NULL
ORDER BY created_at
FOR UPDATE SKIP LOCKED
LIMIT 1;
UPDATE jobs
SET taken_at = now()
WHERE id = ( ... тот самый SELECT ... )
RETURNING *;
SELECT просто пропустит её.WHERE taken_at IS NULL
OR taken_at < now() - interval '5 minutes'
🔄 Миграция на российскую СУБД без переписывания кода
25 ноября в 14:00 (МСК) — вебинар о переходе с MS SQL или Oracle на Digital Q.DataBase с минимальными издержками.
💡 На вебинаре узнаете:
1️⃣ Как Digital Q.DataBase объединила три диалекта — T-SQL, PL/SQL и PL/pgSQL.
2️⃣ Как мигрировать ПО с любой СУБД без переписывания кода.
3️⃣ Что входит в поставку (включая то, что другие вендоры лицензируют отдельно).
4️⃣ Как получить бесплатную версию Digital Q.DataBase.
🏆 Digital Q.DataBase:
— Сертификация ФСТЭК 4-го уровня
— 1 место в рейтинге CNews Market «Конвергентные СУБД»
👥 Для кого:
Разработчики, администраторы БД, CIO, CDTO, руководители проектов импортозамещения.
🎤 Спикер: Андрей Жуйков, руководитель направления
📅 25 ноября | 🕐 14:00 (МСК) | 💻 Онлайн, бесплатно
👉 Регистрация
#реклама
О рекламодателе
🖥 Генерация данных прямо в базе!GENERATE_SERIES превращает PostgreSQL в гибкий источник диапазонов: дат, чисел, временных интервалов без таблиц и вспомогательных скриптов.
В сегодняшнем гайде:
• Строим календарь напрямую в запросе;
• Закрываем пропуски в отчётах и логах;
• Генерируем тестовые данные и последовательности для расчётов;
• Создаём временные ряды и интервалы.
Производительные или и выгодные базы данных в облаке
Безопасные, масштабируемые и отказоустойчивые базы данных — одна из ключевых потребностей любого проекта. Именно такие предлагает Selectel. СУБД под разные запросы: от универсальной PostgreSQL до поисковой и аналитической БД Opensearch
Новые клиенты сейчас могут получить до 30 000 бонусов на использование облачных баз данных Selectel. Провайдер гарантирует:
🔹Высокую производительность. Выбирайте оптимальную конфигурацию кластера на базе мощного железа и локальных NVMe-дисков.
🔹Надежность. Автоматические бесплатные бэкапы с восстановлением вплоть до секунды — на стороне Selectel. А создать отказоустойчивый кластер можно всего от двух нод и сэкономить до 33%.
🔹Гибкое масштабирование. При росте нагрузки можно поменять конфигурацию облачного сервера и количество реплик без простоя.
Успейте зарегистрироваться и оставить заявку на участие в акции, чтобы протестировать сервис бесплатно: https://slc.tl/qt6tv
Реклама. АО "Селектел". erid:2W5zFHAWMma
UNNEST + WITH ORDINALITY — управляемая распаковка массивов в PostgreSQL!
Обычный UNNEST() не сохраняет позицию элемента, что критично, когда важен порядок: восстановление списков, сортировка, работа с JSON-массивами.
В PostgreSQL есть решение — WITH ORDINALITY. Оно добавляет индекс элемента прямо при распаковке.
Пример: распакуем массив ингредиентов с сохранением порядка:
SELECT recipe_id, ingredient, ord
FROM recipes,
UNNEST(ingredients) WITH ORDINALITY AS t(ingredient, ord);
UNNEST(), здесь мы сразу получаем порядковый номер — без оконных функций и без дополнительных JOIN.SELECT recipe_id,
STRING_AGG(ingredient, ', ' ORDER BY ord) AS ordered_list
FROM (
SELECT recipe_id, ingredient, ord
FROM recipes,
UNNEST(ingredients) WITH ORDINALITY t(ingredient, ord)
) q
GROUP BY recipe_id;
SELECT order_id,
item ->> 'name' AS name,
item ->> 'price' AS price,
ord
FROM orders,
jsonb_array_elements(items) WITH ORDINALITY AS t(item, ord);
WITH ORDINALITY в PostgreSQL, когда критична позиция элемента в массиве или JSON-списке.
🖥 Какие API-маршруты действительно тормозят систему?
В производительных системах реальный UX определяется не средним временем ответа, а редкими хвостовыми задержками, из-за которых важны именно p95 и p99.
Сегодня в задаче:
• Посчитаем ключевые перцентильные метрики (p50/p95/p99) по каждому маршруту;
• Определим, какие запросы регулярно превышают собственный p99;
• Увидим, какие эндпоинты “убивают” отклик сервиса под нагрузкой;
API и контролировать качество работы системы.
☕️ CodeAbbey — тренажёр алгоритмического мышления!
Сайт с огромной коллекцией задач по программированию, от самых простых до тех, что реально заставят подумать.
Учиться можно на абсолютно любом языке. Отличный способ подтянуть логику, научиться писать аккуратный код и подготовиться к собесам.
📌 Оставляю ссылочку: codeabbey.com
➡️ SQL Ready | #ресурс
QUALIFY: фильтрация после оконных функций!
Иногда нужно фильтровать строки после вычисления оконных функций. В большинстве диалектов SQL для этого нужен подзапрос, но в ряде СУБД (Snowflake, BigQuery, Teradata, Oracle 23c) есть конструкция QUALIFY, позволяющая делать это напрямую.
Отбираем строки только с первым местом внутри категории:
SELECT id, category, score,
RANK() OVER (
PARTITION BY category
ORDER BY score DESC
) AS rnk
FROM results
QUALIFY rnk = 1;
SELECT id, value,
value - LAG(value) OVER (
ORDER BY id
) AS diff_prev
FROM metrics
QUALIFY diff_prev > 50;
SELECT customer_id, order_id, amount,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY amount DESC
) AS rn
FROM orders
QUALIFY rn <= 3;
QUALIFY помогает писать чище и короче, избавляя от лишних подзапросов. Особенно полезен в аналитических задачах с большим числом оконных функций.
Как увидеть фрагментацию таблиц?
Часто производительность падает из-за накопления устаревших (dead) кортежей, которые остаются после UPDATE/DELETE до следующего VACUUM.
Посмотреть их реальный объём можно напрямую из системной статистики:
SELECT relname,
n_dead_tup,
n_live_tup
FROM pg_stat_all_tables
WHERE relname = 'orders';
n_dead_tup — количество устаревших кортежей, n_live_tup — актуальные строки.SELECT relname, n_dead_tup
FROM pg_stat_all_tables
ORDER BY n_dead_tup DESC
LIMIT 10;
SELECT relname,
n_dead_tup,
n_live_tup,
round(100.0 * n_dead_tup / (n_live_tup + 1), 2) AS dead_ratio
FROM pg_stat_all_tables;
🖥 Функции для работы с JSON в MySQL!В этой шпаргалке собраны ключевые функции и операторы MySQL для чтения, обновления, проверки и формирования JSON-структур. Материал охватывает извлечение значений, модификацию полей, работу с объектами и массивами, а также проверку вложенных данных. Подходит для хранения метаданных, гибких профилей и других полуструктурированных данных.
➡️ SQL Ready | #шпора
🖥 Симуляция очереди: кто получит ресурс первым!
Смоделируем работу очереди, где задачи приходят в разное время и имеют разные уровни приоритета, нужно определить, кто будет обслужен раньше.
В этом посте:
• Разберём, как упорядочить поток задач так, чтобы высокий приоритет перехватывал очередь;
• Построим механизм, который при равных приоритетах будет соблюдать FIFO и не нарушать логику поступления задач;
• Получим итоговый порядок обработки.
SAVEPOINT: частичный откат без пересборки всей транзакции!
При работе с многошаговыми транзакциями важно уметь откатывать только часть выполненных действий. SAVEPOINT даёт такой контроль в большинстве СУБД. Пример ниже оформлен для Oracle, но принцип похож и в других диалектах.
Создаём таблицу:
CREATE TABLE operations (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
description VARCHAR2(200),
amount NUMBER(10,2) CHECK (amount > 0)
);
INSERT INTO operations (description, amount)
VALUES ('Initial payment', 150.00);
SAVEPOINT sp_step1;
INSERT INTO operations (description, amount)
VALUES ('Wrong amount', 1000.00);
ROLLBACK TO sp_step1;
INSERT INTO operations (description, amount)
VALUES ('Corrected entry', 75.00);
COMMIT;
SELECT * FROM operations;
🖥 Индексы — ключ к быстрому SQL. Особенно полезны при большом объёме данных и частых фильтрациях!Правильно выбранный тип и структура индекса значительно ускоряют SELECT-запросы, но могут замедлять INSERT и UPDATE. Всегда проверяй эффективность через EXPLAIN ANALYZE.
➡ SQL Ready | #шпора
📂 Напоминалка для работы с индексами в базах данных!
Например, clustered index определяет физический порядок строк в таблице, а secondary index позволяет эффективно искать по неуникальным полям.
На картинке — основные типы индексов, которые должен знать каждый разработчик, чтобы уверенно работать с производительностью запросов.
Сохрани, чтобы не забыть!
➡ SQL Ready | #ресурс
Привет. Вот тебе самые топовые каналы по IT!
⚙️ Free Znanija (IT) — Самая огромная коллекция платных курсов, которые можно скачать бесплатно;
👩💻 IT Books — Самая огромная библиотека книг;
💻 Hacking & InfoSec Base — Крутой блог белого хакера;
🛡 CyberGuard — Всё про ИБ;
🤔 ИБ Вакансии— Всё, чтобы найти работу в ИБ;
👩💻 linux administration — Всё про Линукс;
👩💻 Программистика — Python, python и ещё раз python;
👩💻 GameDev Base — Всё про GameDev;
😆 //code — Самые топовые мемы по IT:
Подпишись, чтобы не потерять!
🖥 Функции для работы с временными интервалами и диапазонами в MySQL!В этой шпаргалке собраны функции MySQL для сложения, вычитания и преобразования временных интервалов, а также для вычисления разницы между моментами времени. Эти операции применяются при расчёте длительностей, сроков истечения, аналитике пользовательских сессий, построении временных окон и обработке событийных данных.
➡️ SQL Ready | #шпора
👩💻 Знал ли ты, что можно открывать проекты прямо на сервере через VS Code?
Remote – SSH даёт возможность с лёгкостью получать доступ, редактировать и передавать файлы на удалённый сервер, при этом оставаясь в знакомом интерфейсе VS Code.
➡️ SQL Ready | #vscode
Айтишники, это вам — в телеграм есть комьюнити по каждому направлению в IT
Там есть буквально всё: чаты для общения, тонны материала(книги, курсы, ресурсы и гайды), свежие новости и конечно же мемы
Выбирайте своё направление:
💩 Frontend 🐍 Python
🐧 Linux 👩💻 С/С++
👩💻 C# 🤔 Хакинг & ИБ
📱 GitHub 🖥 SQL
👩💻 Сисадмин 🤟 DevOps
⚙️ Backend 🖥 Data Science
🧑💻 Java 🐞 Тестирование
🖥 PM / PdM 👩💻 GameDev
🧑💻 Golang 🤵♂️ IT-Митапы
🧑💻 PHP 💻 WebDev
🖥 Моб. Dev 🖥Анали.(SA&BA)
👩💻 Дизайн 🖥 Нейросети
💛 1C 🤓 Книги IT
➡️ Сохраняйте в закладки
💅 SQLTutorial — шпаргалка, которая реально пригодиться!
Хочешь быстро вспомнить команды для запросов, объединений таблиц или операций с данными? На этом сайте найдёшь множество готовых подсказок. Отлично подойдёт, если учишь SQL, готовишься к собесу или просто не хочешь каждый раз гуглить синтаксис.
📌 Оставляю ссылочку: sqltutorial.org
➡️ SQL Ready | #ресурс
🖥 Функции для работы с датой и временем в MySQL!В этой шпаргалке собраны функции MySQL, применяемые для получения отдельных компонентов даты и времени: года, месяца, дня, часов, минут, секунд, номера недели и дня недели. Эти операции используются в большинстве рабочих запросов — от фильтрации и группировки данных до подготовки отчётов и временной аналитики.
➡️ SQL Ready | #шпора