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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/sql_ready
Download Telegram
🖥 UPSERT — вставка и обновление в одном запросе!

insert ... on conflict позволяет вставить данные и одновременно обработать дубликаты без дополнительных проверок. Если запись уже существует, то выполняется обновление, если нет - добавляется новая.

Сегодня в посте:
Как работает on conflict и псевдотаблица excluded;

Как обновлять только изменившиеся поля;

Как писать лаконичные и надёжные операции без лишних запросов.


Всё происходит атомарно, в одном шаге и без лишней логики на стороне приложения.

➡️ SQL Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1311🔥9👎1
7🔥6👍5🤝1
Что же выведет консоль?
Anonymous Quiz
40%
A
17%
B
18%
C
24%
D
🔥136👍6🤝1
🖥 Создание и изменение структуры (DDL)

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

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍186🔥6
Индекс по выражению — ускоряй запросы без изменения схемы!

Часто запросы не используют индекс, хотя поле индексировано.

Причиной может быть функция в условии:
SELECT * FROM users WHERE lower(email) = 'admin@example.com';


Даже если email проиндексирован, lower(email) ломает возможность использовать индекс.

Вариант решения - индекс по выражению (expression index):
CREATE INDEX users_lower_email_idx
ON users ((lower(email)));


Проверить можно через план запроса:
EXPLAIN ANALYZE
SELECT * FROM users WHERE lower(email) = 'admin@example.com';


🔥 Теперь в плане Index Scan, а не Full Table Scan.

➡️ SQL Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍147🔥7👎1
🖥 SQL-генерация таблицы умножения без циклов!

В SQL нет привычных циклов, но есть полезные инструменты, которые позволяют строить повторяющиеся структуры (например, таблицу умножения 10×10).

Сегодня в посте:
Генерируем числа от 1 до 10 с помощью GENERATE_SERIES();

Объединяем их в пары через CROSS JOIN;

Считаем произведения и форматируем результат в матрицу.


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

➡️ SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥107
🔥208👍7
В ПОГОНЕ ЗА ИНФОРМАЦИЕЙ - ТЫ МОЖЕШЬ СТАТЬ НОВОЙ ИНФОРМАЦИЕЙ🇷🇺

Список несогласных ниже:

hck wrr – расскажут, почему ты сам себя продаешь властям, если кормишь сайт печеньем.

scr snk – новостной кибер-без. Ты просто в курсе интернет-угоз и событий индустрии.

insc lrd – скачиваемый оффлайн википедик от всех кибер-тараканов.

Дальше ты сам!
Please open Telegram to view this post
VIEW IN TELEGRAM
👎41🔥1
DELETE + RETURNING: удаление с получением результата!

При очистке данных важно понимать, какие строки были реально удалены. Оператор RETURNING в PostgreSQL позволяет вернуть данные удалённых строк без дополнительного запроса.

Создадим таблицу:
CREATE TABLE sessions (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
user_id BIGINT NOT NULL,
last_active TIMESTAMPTZ NOT NULL
);


Удалим неактивные сессии и сразу получим нужные поля:
DELETE FROM sessions
WHERE last_active < NOW() - INTERVAL '30 days'
RETURNING id, user_id;


Результат:
 id | user_id
----+---------
12 | 3
18 | 7
25 | 3


🔥 Такой приём повышает прозрачность операций и упрощает аудит. Работает также с INSERT и UPDATE, что делает SQL-операции атомарными.

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