SQL Portal | Базы Данных
14.3K subscribers
888 photos
121 videos
49 files
689 links
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Изучайте SQL быстрее

Этот сайт объясняет ключевые понятия с помощью аналогий

- SQL, JavaScript, CSS, Git и многое другое

С интерактивными учебниками

http://codeanalogies.com

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Одна из N причин, почему шардинг — отличный способ масштабировать базу данных:

Скорость резервного копирования.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Известная компания Postgres Professional выпустила свой обновлённый базовый курс DBA-1 по администрированию свободно распространяемой СУБД PostgreSQL.

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

Основные изменения:

- Добавлена информация про версии PostgreSQL 14, 15 и 16.
- Заменены четыре темы раздела «Управление доступом», по которым в дальнейшем появится отдельный подробный курс;
- Частично изменена структура: изложение стало более логичным и последовательным;
- Физическая и логическая репликации теперь рассматриваются в отдельных темах.
- Исправлены недочёты в изложении, ошибки в скриптах демонстраций и практических заданий.

Cам курс: тут

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
postgres-A4.pdf
16.3 MB
Полный перевод документации PostgreSQL на русский язык

Оригинальная англоязычная документация PostgreSQL и документация к СУБД Postgres Pro в вариантах Standard и Enterprise.

Ссылка: тык

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4😁1
Игры, которые помогают изучать и практиковать SQL | Аналитика данных

Ссылки для доступа к играм:
1. SQL Island: https://sql-island.informatik.uni-kl.de/
2. SQL Murder Mystery: https://mystery.knightlab.com/
3. Полицейский департамент SQL: https://sqlpd.com/
4. The Schemaverse: https://schemaverse.com/

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Совет по Postgres: используйте pretty, чтобы видеть размеры таблиц в человекочитаемом формате; без него вы получите значения в байтах.

Общий размер таблицы, включая индексы и TOAST:

SELECT pg_size_pretty(pg_total_relation_size('my_table'));


32 kB

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Список с задачами для подготовки к SQL-интервью с различными базами данных:

1. [Database Basics](https://bit.ly/3zGK6S7)
2. [SQL Queries](https://bit.ly/3bGzN8r)
3. [MSSQL](https://bit.ly/3A5qIj0)
4. [MySQL](https://bit.ly/3bFkhtE)
5. [Postgres](https://bit.ly/3BOLLHP)
6. [Oracle](https://bit.ly/3zF2WsH)

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Функции pg_get_* — это встроенные функции интроспекции в Postgres.

pg_get_viewdef — «Покажи SQL, лежащий за этим представлением»

pg_get_indexdef — «Покажи CREATE INDEX для этого индекса»

pg_get_constraintdef — «Покажи, как определён этот внешний ключ / check-ограничение»

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Master_SQL.pdf
754.9 KB
Руководство по SQL

Это руководство охватывает различные аспекты, начиная с основ SQL и до более сложных тем

Материал дополнен практическими примерами, которые способствуют лучшему усвоению информации

Сохраняйте, чтобы не потерять

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Вчера мы говорили о функциях pg_get_*. Чтобы получить отформатированный SQL, передайте true вместо одной длинной нечитаемой строки.

pg_get_viewdef — представления
pg_get_indexdef — индексы
pg_get_constraintdef — ограничения

SELECT pg_get_viewdef('active_orders'::regclass, true);


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Этот репозиторий содержит все, что вам нужно, чтобы прокачать свои навыки работы с SQL

Более 100 упражнений и примеров по SQL.

Ссылка: тык

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Перенаправляете вывод psql куда-то ещё? В psql есть настройки, позволяющие сократить вывод до одиночных строк данных.

psql -qtA

- -q — тихий режим
- -t — только строки (tuples only)
- -A — без выравнивания (unaligned)

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Как сгруппировать строки в пачки (batch), где сумма не превышает заданное значение — прямо в Oracle SQL

Используйте MATCH_RECOGNIZE:

SELECT ... FROM ... MATCH_RECOGNIZE (
ORDER BY ...
MEASURES ...
PATTERN ( total+ )
DEFINE total AS SUM ( ... ) <= ...
)


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

Это похоже на "бин-пэкинг": ты просто собираешь строки в «ящики», пока сумма внутри ящика не превысит лимит

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
This media is not supported in your browser
VIEW IN TELEGRAM
Руководство по стилю SQL

Последовательное руководство по стилю кода SQL для обеспечения разборчивости и сопровождения проектов

Ссылка: тык

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
pgcli — интерфейс командной строки для PostgreSQL

Его главные особенности — автодополнение и подсветка синтаксиса. Это позволяет упростить взаимодействие с базами данных.

Есть аналог для MySQL.

Ссылка: тык

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Сравнение с предыдущим. Решение.

Решение: использование DATEDIFF

DATEDIFF
: эта функция вычисляет разницу между двумя датами. Она используется для того, чтобы обеспечить сравнение именно «сегодняшних» и «вчерашних» температур.

Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.

SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
«Его открывал мой муж. Поэтому и покинул нас в 45», - добавила она

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21
Вы можете использовать ORDER BY по столбцам, которых нет в SELECT-списке запроса.

...за исключением случая:

SELECT DISTINCT this FROM t ORDER BY that  --  некорректно!


Почему так?

DISTINCT удаляет дубликаты из выбранных значений и формирует новую таблицу,
поэтому доступны только те столбцы, что явно указаны в SELECT

Объяснение от Lukas Eder — blog.jooq.org

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
SQL-приём, о котором мало кто знает

Знал ли ты, что внутри транзакции можно создавать контрольные точки с помощью SAVEPOINT? Вместо сценария, где при ошибке теряется вся работа.

SAVEPOINT позволяет зафиксировать точку внутри транзакции, к которой можно откатиться. Обычный откат отменяет всю транзакцию, а откат к SAVEPOINT возвращает состояние только до этой точки.

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

Следующий код откатывает всё:

BEGIN;

INSERT INTO orders VALUES (1, 'Laptop');
INSERT INTO payments VALUES (1, 'FAILED');

-- Здесь что-то пошло не так
ROLLBACK; -- Удалит И заказ, И платёж


Если добавить SAVEPOINT, можно откатиться только к последней контрольной точке:

BEGIN;

INSERT INTO orders VALUES (1, 'Laptop');
-- Создаём контрольную точку
SAVEPOINT before_payment;

INSERT INTO payments VALUES (1, 'FAILED');

-- Платёж не прошёл — откатываем только его
ROLLBACK TO SAVEPOINT before_payment;

-- Пробуем альтернативный способ оплаты
INSERT INTO payments VALUES (1, 'SUCCESS');

COMMIT;


SAVEPOINT полезен, когда стоимость полного отката слишком высокая и выгоднее переиграть только часть транзакции. Даёт более гибкое управление транзакциями, особенно в сложных сценариях.

SAVEPOINT не устраняет ошибку, а ограничивает её последствия.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Нужно быстро выгрузить данные? \copy записывает результат любого запроса в локальный файл.

\copy (SELECT * FROM users WHERE created_at > now() - interval '7 days') TO '~/new_users.csv' WITH CSV HEADER


Кейсы:

- Быстрый экспорт выборки без поднятия отдельного пайплайна или воркфлоу.
- Выгрузка данных для аналитики в CSV с последующей обработкой в pandas/BI.
- Отладка: снятие среза таблицы для локального воспроизведения бага.
- Миграции: подготовка данных перед переносом между окружениями.
- Интеграции: передача данных в сторонние системы через файл.
- Бэкап части данных по фильтру (например, последние 7 дней).
- Проверка гипотез: выгрузка подвыборки без нагрузки на основную систему.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2