Простое объяснение соединений в базах данных:
Соединения позволяют связывать разные таблицы на основе их отношений.
Они особенно полезны, когда нужно получить данные из нескольких таблиц одновременно.
Основные типы соединений:
1. Inner Join – возвращает только те строки, которые совпадают в обеих таблицах.
2. Left (Outer) Join – возвращает все строки из левой таблицы и только совпадающие строки из правой.
Другие виды соединений:
- Self Join – соединение таблицы самой с собой.
- Outer Join – включает все строки из обеих таблиц с учетом совпадений и неполных данных.
- Cross Join – декартово произведение двух таблиц, каждая строка первой таблицы соединяется со всеми строками второй.
👉 @SQLPortal
Соединения позволяют связывать разные таблицы на основе их отношений.
Они особенно полезны, когда нужно получить данные из нескольких таблиц одновременно.
Основные типы соединений:
1. Inner Join – возвращает только те строки, которые совпадают в обеих таблицах.
2. Left (Outer) Join – возвращает все строки из левой таблицы и только совпадающие строки из правой.
Другие виды соединений:
- Self Join – соединение таблицы самой с собой.
- Outer Join – включает все строки из обеих таблиц с учетом совпадений и неполных данных.
- Cross Join – декартово произведение двух таблиц, каждая строка первой таблицы соединяется со всеми строками второй.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤4🤯2
Фича Postgres 18: дамп статистики таблиц
В Postgres 18 появится возможность использовать
👉 @SQLPortal
В Postgres 18 появится возможность использовать
pg_dump --statistics-only и --with-statisticsPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6
Если ты пишешь сложные вложенные подзапросы, лучше использовать CTE , чтобы улучшить читаемость
CTE позволяет определить запрос и работать с его результатом как с новой таблицей, организуя логику в иерархическую структуру.
@SQLPortal
CTE позволяет определить запрос и работать с его результатом как с новой таблицей, организуя логику в иерархическую структуру.
@SQLPortal
❤15😁4👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Новый уровень баз данных
Turso это впечатляющий технический проект. Это переписанный на Rust SQLite с архитектурой async-first, готовящейся поддержкой конкурентных записей, векторным поиском и встроенной поддержкой браузера / WASM.
Есть все шансы, что он станет фундаментальной частью инфраструктуры «vibe-coding» эпохи: on-demand, глобальные базы данных, совместимые с SQLite, которые можно запускать как в браузере, так и локально на устройстве.
Скорость, с которой развивается проект, это явно что-то необычное.🐱
Демо: shell.turso.tech
@SQLPortal
Turso это впечатляющий технический проект. Это переписанный на Rust SQLite с архитектурой async-first, готовящейся поддержкой конкурентных записей, векторным поиском и встроенной поддержкой браузера / WASM.
Есть все шансы, что он станет фундаментальной частью инфраструктуры «vibe-coding» эпохи: on-demand, глобальные базы данных, совместимые с SQLite, которые можно запускать как в браузере, так и локально на устройстве.
Скорость, с которой развивается проект, это явно что-то необычное.
Демо: shell.turso.tech
@SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
PostgreSQL получил полезное обновление для разработчиков
Теперь блокировка FOR NO KEY UPDATE официально помогает избегать проблем с параллельной вставкой в дочерние таблицы.
Ранее использование классического FOR UPDATE на родительской записи могло блокировать добавление связанных строк, например комментариев к посту. С FOR NO KEY UPDATE родительскую запись можно защищать от изменений, не мешая вставке дочерних данных. Это ускоряет работу баз и повышает параллельность операций, особенно в сложных схемах с внешними ключами.
Подробнее о механике и примерах использования можно почитать на блоге Владислава Михалчева
👉 @SQLPortal
Теперь блокировка FOR NO KEY UPDATE официально помогает избегать проблем с параллельной вставкой в дочерние таблицы.
Ранее использование классического FOR UPDATE на родительской записи могло блокировать добавление связанных строк, например комментариев к посту. С FOR NO KEY UPDATE родительскую запись можно защищать от изменений, не мешая вставке дочерних данных. Это ускоряет работу баз и повышает параллельность операций, особенно в сложных схемах с внешними ключами.
Подробнее о механике и примерах использования можно почитать на блоге Владислава Михалчева
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4
Объединяем строки по значению в SQL
Для этого используется GROUP BY col.
Он возвращает по одной строке для каждого уникального значения в колонке col.
После этого можно применять агрегатные функции, чтобы получить сводные данные по каждой группе:
COUNT — количество строк
AVG — среднее числовое значение
MIN/MAX — минимальное и максимальное значения
LISTAGG — список значений
Простой способ быстро агрегировать данные и видеть сводную информацию по каждой группе.
@SQLPortal
Для этого используется GROUP BY col.
Он возвращает по одной строке для каждого уникального значения в колонке col.
После этого можно применять агрегатные функции, чтобы получить сводные данные по каждой группе:
COUNT — количество строк
AVG — среднее числовое значение
MIN/MAX — минимальное и максимальное значения
LISTAGG — список значений
Простой способ быстро агрегировать данные и видеть сводную информацию по каждой группе.
@SQLPortal
❤4👍4
Совет для psql:
Часто вы подключаетесь к базе данных в схеме по умолчанию или в public. Команда
Схема является частью поискового пути psql (search_path), поэтому чтобы сменить схему, нужно изменить поисковый путь:
👉 @SQLPortal
\dn — показывает все схемы.Часто вы подключаетесь к базе данных в схеме по умолчанию или в public. Команда
\dn позволяет увидеть другие схемы.Схема является частью поискового пути psql (search_path), поэтому чтобы сменить схему, нужно изменить поисковый путь:
SET search_path TO new_schema;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Функция NVL в Oracle SQL возвращает:
первый аргумент, если он не NULL
иначе — второй аргумент
Пример использования:
План выполнения может использовать индекс, если
и
Демо у Monika Mitura
@SQLPortal
первый аргумент, если он не NULL
иначе — второй аргумент
Пример использования:
WHERE col = NVL(:var, col)
План выполнения может использовать индекс, если
:var не NULL,и
full table scan, если :var равен NULL.Демо у Monika Mitura
@SQLPortal
Blogspot
The Magical NVL Function
A while ago, I came across an interesting NVL trick on Connor Mc'Donald's blog . In his example, he compares a query that uses an optiona...
👍6
Полный курс по SQL от основ до продвинутого уровня
Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.
👉 @SQLPortal
Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - gowthamrajk/SQL-Tutorials: In this module, I will be updating the topic wise SQL tutorial notes which is very useful for…
In this module, I will be updating the topic wise SQL tutorial notes which is very useful for a fresher to start with MYSQL from basics to advanced. - gowthamrajk/SQL-Tutorials
👍7❤3
Новый уровень облачного администрирования
Команда Yandex Cloud запустила AI-ассистентов для работы с базами данных. Теперь можно управлять базами данных YDB, Trino, ClickHouse, PostgreSQL и другими с помощью AI-ассистентов.
ИИ-ассистент в YDB поможет провести диагностику, оптимизировать работу с базами данных и предложить варианты более эффективной работы с БД. Также для других задач можно подключить к YDB нейросети через MCP-сервер.
В WebSQL ИИ-помощник может генерировать запросы к базам данных по запросу пользователя на естественном языке. Также на платформе можно автоматически разметить метаданные через Data Catalog.
Есть все шансы, что это станет стандартом управления облаком: вместо ручной настройки — диалог в чате с готовой конфигурацией.
@SQLPortal
Команда Yandex Cloud запустила AI-ассистентов для работы с базами данных. Теперь можно управлять базами данных YDB, Trino, ClickHouse, PostgreSQL и другими с помощью AI-ассистентов.
ИИ-ассистент в YDB поможет провести диагностику, оптимизировать работу с базами данных и предложить варианты более эффективной работы с БД. Также для других задач можно подключить к YDB нейросети через MCP-сервер.
В WebSQL ИИ-помощник может генерировать запросы к базам данных по запросу пользователя на естественном языке. Также на платформе можно автоматически разметить метаданные через Data Catalog.
Есть все шансы, что это станет стандартом управления облаком: вместо ручной настройки — диалог в чате с готовой конфигурацией.
@SQLPortal
❤4👍3
PostgreSQL испытывает трудности при росте числа подключений
Даже умеренное количество клиентов может «сломать» PostgreSQL. Причина в том, как СУБД обрабатывает каждое соединение.
При подключении нового клиента процесс postmaster создаёт отдельный бэкенд-процесс (не поток) для работы с сессией. Этот процесс поддерживает соединение до отключения клиента или потери соединения.
С ростом числа клиентов сервер создаёт всё больше процессов. Каждый из них кеширует системные таблицы, подготовленные выражения, промежуточные результаты запросов и другие данные, что резко увеличивает потребление памяти.
Решение — использовать пул соединений, например, pg_bouncer. Менеджер пула держит заранее созданные соединения с базой и выдаёт их клиентам по мере необходимости, вместо того чтобы создавать новое соединение для каждого запроса. Это позволяет обслуживать больше клиентов при меньшем количестве соединений к базе.
Интересный факт, существует предложение перевести PostgreSQL на многопоточную модель вместо текущей многопроцессной, что потенциально могло бы решить проблему масштабируемости.
Детальный разбор того, как PostgreSQL управляет соединениями
👉 @SQLPortal
Даже умеренное количество клиентов может «сломать» PostgreSQL. Причина в том, как СУБД обрабатывает каждое соединение.
При подключении нового клиента процесс postmaster создаёт отдельный бэкенд-процесс (не поток) для работы с сессией. Этот процесс поддерживает соединение до отключения клиента или потери соединения.
С ростом числа клиентов сервер создаёт всё больше процессов. Каждый из них кеширует системные таблицы, подготовленные выражения, промежуточные результаты запросов и другие данные, что резко увеличивает потребление памяти.
Решение — использовать пул соединений, например, pg_bouncer. Менеджер пула держит заранее созданные соединения с базой и выдаёт их клиентам по мере необходимости, вместо того чтобы создавать новое соединение для каждого запроса. Это позволяет обслуживать больше клиентов при меньшем количестве соединений к базе.
Интересный факт, существует предложение перевести PostgreSQL на многопоточную модель вместо текущей многопроцессной, что потенциально могло бы решить проблему масштабируемости.
Детальный разбор того, как PostgreSQL управляет соединениями
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4❤2
Новости: Выпущен PostgreSQL 18!
https://www.postgresql.org/about/news/postgresql-18-released-3142/
👉 @SQLPortal
https://www.postgresql.org/about/news/postgresql-18-released-3142/
Please open Telegram to view this post
VIEW IN TELEGRAM
PostgreSQL News
PostgreSQL 18 Released!
The [PostgreSQL Global Development Group](https://www.postgresql.org) today announced the release of [PostgreSQL 18](https://www.postgresql.org/docs/18/release-18.html), the latest version of the world's most advanced …
🔥10👍6
Создавайте blockchain-таблицы в Oracle Database с помощью
Эти параметры:
- разрешают INSERT,
- запрещают UPDATE,
- запрещают DELETE/DROP до истечения заданного количества дней (N).
👉 @SQLPortal
CREATE BLOCKCHAIN TABLE ... ( ... )
NO DROP UNTIL n DAYS IDLE
NO DELETE UNTIL n DAYS AFTER INSERT
HASHING USING SHA2_512 VERSION "v1"
Эти параметры:
- разрешают INSERT,
- запрещают UPDATE,
- запрещают DELETE/DROP до истечения заданного количества дней (N).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Postgres: процесс-на-соединение
MySQL: поток-на-соединение
Узнайте больше о процессах, потоках, пуле соединений и о том, как они влияют на производительность базы данных — читать
@SQLPortal
MySQL: поток-на-соединение
Узнайте больше о процессах, потоках, пуле соединений и о том, как они влияют на производительность базы данных — читать
@SQLPortal
❤8
На GitHub появился новый проект SQLBot — база данных без SQL. 😱
Всего за несколько дней он собрал 1.5K ★
SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.
Встроена авто-визуализация, прогнозы и простая установка через Docker.
SQLBot на GitHub
👉 @SQLPortal
Всего за несколько дней он собрал 1.5K ★
SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.
Встроена авто-визуализация, прогнозы и простая установка через Docker.
SQLBot на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Индексирование полнотекстового поиска с подстановочными символами в Postgres? Вот практическое видео, которое показывает, как использовать pg_trgm и GIN-индексы
👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4
Бесплатный курс по SQL от Baraa Khatib Salkini, известного как DataWithBaraa. Курс охватывает всё от основ до сложных запросов и реальных проектов. 🤑
В GitHub-репозитории есть datasets/ с реальными данными из ERP и CRM, scripts/ с готовыми SQL-скриптами для практики и docs/ с документацией и материалами курса.
Ссылка на курс
👉 @SQLPortal
В GitHub-репозитории есть datasets/ с реальными данными из ERP и CRM, scripts/ с готовыми SQL-скриптами для практики и docs/ с документацией и материалами курса.
Ссылка на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - DataWithBaraa/sql-ultimate-course: The most comprehensive SQL guide from a real-world expert! Learn everything from basics…
The most comprehensive SQL guide from a real-world expert! Learn everything from basics to advanced queries, optimizations, and real-world SQL - DataWithBaraa/sql-ultimate-course
❤6🔥3
Совет для Postgres: используйте
👉 @SQLPortal
jsonb_pretty, чтобы выводить JSON в удобочитаемом вертикальном виде.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3
Типы связей в базах данных:
Связи показывают, как данные между собой связаны.
Три основных типа связей:
Один к одному (One-to-One) —> запись в одной таблице связана с одной записью в другой таблице.
Один ко многим (One-to-Many) —> запись в одной таблице связана с несколькими записями в другой таблице.
Многие ко многим (Many-to-Many) —> записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице.
👉 @SQLPortal
Связи показывают, как данные между собой связаны.
Три основных типа связей:
Один к одному (One-to-One) —> запись в одной таблице связана с одной записью в другой таблице.
Один ко многим (One-to-Many) —> запись в одной таблице связана с несколькими записями в другой таблице.
Многие ко многим (Many-to-Many) —> записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3
Простое объяснение Primary Key и Foreign Key в SQL:
Primary Key (PK) это уникальный идентификатор записи в таблице. В таблице customers поле customer_id является первичным ключом. Каждому клиенту присваивается уникальный номер, и два клиента не могут иметь одинаковый ID. Sarah Johnson всегда будет клиентом с ID 1001, а если завтра зарегистрируется другая Sarah Johnson, ей дадут другой ID. Это помогает организовать данные и избежать путаницы.
Foreign Key (FK) это связь между таблицами, как мост. В таблице orders поле customer_id является внешним ключом. Здесь он не уникален, потому что один клиент может сделать несколько заказов. Например, Sarah (customer 1001) сделала два заказа — на ноутбук и на клавиатуру. Внешний ключ customer_id в таблице orders ссылается на первичный ключ в таблице customers.
Без внешнего ключа пришлось бы хранить имя и email Сары в каждой записи заказа, что создаёт хаос и занимает лишнее место. Используя FK, данные клиента хранятся один раз в таблице customers, а в таблице orders просто ссылаются на него через ID. Это делает систему чистой, эффективной и масштабируемой.
PK уникально идентифицирует запись, а FK соединяет связанные данные между таблицами.
👉 @SQLPortal
Primary Key (PK) это уникальный идентификатор записи в таблице. В таблице customers поле customer_id является первичным ключом. Каждому клиенту присваивается уникальный номер, и два клиента не могут иметь одинаковый ID. Sarah Johnson всегда будет клиентом с ID 1001, а если завтра зарегистрируется другая Sarah Johnson, ей дадут другой ID. Это помогает организовать данные и избежать путаницы.
Foreign Key (FK) это связь между таблицами, как мост. В таблице orders поле customer_id является внешним ключом. Здесь он не уникален, потому что один клиент может сделать несколько заказов. Например, Sarah (customer 1001) сделала два заказа — на ноутбук и на клавиатуру. Внешний ключ customer_id в таблице orders ссылается на первичный ключ в таблице customers.
Без внешнего ключа пришлось бы хранить имя и email Сары в каждой записи заказа, что создаёт хаос и занимает лишнее место. Используя FK, данные клиента хранятся один раз в таблице customers, а в таблице orders просто ссылаются на него через ID. Это делает систему чистой, эффективной и масштабируемой.
PK уникально идентифицирует запись, а FK соединяет связанные данные между таблицами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5
В Postgres 18 появились виртуальные вычисляемые колонки
Если убрать ключевое слово stored в определении, колонка не будет храниться на диске, а будет вычисляться на лету.
Это экономит место и не замедляет записи, но может замедлять чтение, так что использовать стоит с умом.
👉 @SQLPortal
Если убрать ключевое слово stored в определении, колонка не будет храниться на диске, а будет вычисляться на лету.
Это экономит место и не замедляет записи, но может замедлять чтение, так что использовать стоит с умом.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4