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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/sql_ready
Download Telegram
🐱 Крутейшая статья вышла на Хабре: «Научил ИИ-агента помнить важное и забывать лишнее в SQLite»!

В этой статье:
• Разбирается, почему классический RAG плохо подходит для долгоживущих AI-агентов;
• Показана архитектура когнитивной памяти на SQLite: граф узлов и рёбер, сущности, гибридный поиск и механизм разрешения конфликтов знаний;
• Объясняется, как реализовать память агента с механизмом забывания и консолидацией фактов.


🔊 Продолжайте читать на Habr!


➡️ SQL Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7🔥6🤝3
Передавайте списки значений через массивы вместо длинных IN!

Когда из приложения нужно передать список id в SQL, многие пишут IN (... , ... , ...), что увеличивает текст SQL и усложняет работу с prepared statements:
WHERE id IN (1,2,3,4,5,6,7)


PostgreSQL умеет принимать массив и сравнивать его через ANY — это короче и позволяет избежать генерации динамического SQL:
WHERE id = ANY($1)


Приложение просто передаёт массив параметром, а текст запроса остаётся неизменным независимо от длины списка:
SELECT *
FROM users
WHERE email = ANY($1);


На практике полезно явно указывать тип массива ($1::bigint[]), а также помнить, что NULL внутри массива влияет на результат сравнения.

🔥 Этот паттерн особенно удобен для batch-запросов, API-фильтров и массовых выборок, где количество значений может сильно меняться.

➡️ SQL Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥1210
👍10🔥6🤝41👎1
Что же выведет консоль?
Anonymous Quiz
35%
A
31%
B
13%
C
21%
D
👍12🔥7🤝72👎2
VACUUM — чистим таблицу и ускоряем работу базы!

В большинстве СУБД удалённые или обновлённые строки не удаляются мгновенно, а остаются как «мертвые» записи. Со временем это замедляет запросы и увеличивает размер таблиц — нужна очистка.

Сначала удаляем устаревшие записи из таблицы:
DELETE FROM sessions WHERE expired = true;


Однако физически строки всё ещё занимают место.

Чтобы освободить пространство и обновить статистику, запускаем:
VACUUM ANALYZE sessions;


Для диагностики можно получить подробный отчёт о процессе очистки:
VACUUM VERBOSE sessions;


🔥 Регулярный VACUUM поддерживает производительность и точность планов запросов.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥159👍9
📂 Напоминалка по типам серверов!

Например, DNS Server помогает найти нужный IP по доменному имени, а Proxy Server может скрыть тебя от внешней сети.

На картинке — 6 типов серверов, которые стоит понимать каждому разработчику.

Сохрани, чтобы не забыть!

SQL Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥128🤝1
📂 Напоминалка по архитектуре PostgreSQL и MySQL!

PostgreSQL работает через процессы и shared memory, а системой управляет Postmaster и фоновые процессы. MySQL использует слоистую архитектуру: подключение, обработка SQL и storage engine (например InnoDB).

На картинке — основные компоненты и различия архитектуры двух популярных СУБД.

Сохрани, чтобы не забыть!

➡️ SQL Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1610👍8🤝2
Получение top-N строк с учётом равных значений!

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

Это полезно для топ-продаж, логов и аналитики.
FETCH FIRST 5 ROWS ONLY


Обычный LIMIT / FETCH возвращает ровно N строк и может «обрезать» записи с таким же значением сортировки.

WITH TIES возвращает все строки, у которых значение ORDER BY совпадает с последней строкой результата:
FETCH FIRST 5 ROWS WITH TIES


Это удобно для построения top-N выборок, где несколько строк могут делить одно и то же место:
ORDER BY score DESC
FETCH FIRST 10 ROWS WITH TIES


WITH TIES не заменяет RANK() / DENSE_RANK(), если нужен полноценный рейтинг с номером места. Также проверьте синтаксис в вашей СУБД (например, в SQL Server используется TOP ... WITH TIES).

🔥 Такой приём позволяет строить top-выборки без дополнительных подзапросов и оконных функций.

➡️ SQL Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍87🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
💡 SQL by Example — SQL-шпаргалка с примерами запросов!

Здесь разобраны реальные примеры запросов: выборки, фильтрация, JOIN-ы, подзапросы, агрегации и другие ключевые конструкции, которые чаще всего используются при работе с базами данных. Формат максимально простой: пример, объяснение, результат, поэтому можно быстро понять, как работает конкретный запрос и сразу применить его в своих задачах.

Оставляю ссылочку: GitHub 📱


➡️ SQL Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥8🤝8
PostgreSQL: CONCAT_WS, если нужно нормально собрать строку из колонок с NULL!

Частая мелочь в SQL — собрать одну строку из нескольких полей. Например, имя пользователя из first_name, middle_initial, last_name.

Таблица условно такая:
users(id, first_name, middle_initial, last_name)


Первое, что обычно пишут:
SELECT first_name || ' ' || middle_initial || ' ' || last_name
FROM users;


И тут важный момент: если хотя бы одно значение NULL, всё выражение тоже уйдёт в NULL.

То есть если middle_initial = NULL, то результат будет не Emily Johnson, а просто NULL.

В таких случаях удобнее использовать CONCAT_WS:
SELECT CONCAT_WS(' ', first_name, middle_initial, last_name)
FROM users;


CONCAT_WS склеивает значения через разделитель и просто пропускает NULL.

Если middle_initial = 'A': Emily A Johnson. Если middle_initial = NULL: Emily Johnson.

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

Важно: CONCAT_WS пропускает именно NULL. Пустая строка не игнорируется.

То же самое можно собрать и через COALESCE, например так:
SELECT
COALESCE(first_name || ' ', '') ||
COALESCE(middle_initial || ' ', '') ||
COALESCE(last_name, '')
FROM users;


Но это уже выглядит тяжелее, особенно когда полей больше двух-трёх.

🔥 Так что для таких кейсов CONCAT_WS обычно самый нормальный вариант: и короче, и читается лучше.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥10👍9
❤️ Полезную статью нашёл на Хабре: «Почему SUM() OVER (ORDER BY ...) иногда считает “неправильно”: разбираем оконные фреймы в SQL»!

В этой статье:
• Объясняется, как на самом деле работают оконные функции в SQL и почему результаты иногда отличаются от ожидаемых;
• Разбираются ключевые типы оконных фреймов — ROWS, RANGE и GROUPS, а также их влияние на вычисления;
• Показано, как правильно задавать границы окна (UNBOUNDED PRECEDING, CURRENT ROW, FOLLOWING) для накопительных итогов, скользящих средних и аналитических запросов.


🔊 Продолжайте читать на Habr!


➡️ SQL Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍128🔥8
🖥 Oracle SQL: основные строковые функции!

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

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14🤝87👍1
🖥 Быстрый ориентир по SQL-командам!

Когда нужно создать таблицу или изменить её структуру — берём DDL. Хотим изменить данные внутри — используем DML. А если нужно просто вытянуть информацию — поможет DQL с её незаменимым select.

Полезно держать под рукой, чтобы не забыть!

➡️ SQL Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍139🔥7🤝1
👍106🤝6
Что же выведет консоль?
Anonymous Quiz
37%
A
25%
B
16%
C
22%
D
🔥12👍10🤝9
DISTINCT — убираем дубликаты прямо в SQL!

Иногда таблица содержит повторы, а нам нужны только уникальные строки. DISTINCT позволяет легко отфильтровать дубликаты на уровне запроса — без дополнительной логики.

Выберем все уникальные города из таблицы клиентов:
SELECT DISTINCT city FROM customers;


Теперь получим только уникальные пары "страна + город":
SELECT DISTINCT country, city FROM customers;


А вот как посчитать количество разных городов:
SELECT COUNT(DISTINCT city) FROM customers;


В PostgreSQL можно выбирать первую уникальную строку по группе значений:
SELECT DISTINCT ON (user_id) *
FROM logins
ORDER BY user_id, login_time DESC;


🔥 DISTINCT полезен для отчётов, списков, фильтрации и аналитики. Но помните: он влияет на производительность — особенно при работе с большими таблицами.

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