Почему нельзя создать индекс на представление (VIEW)?
Ответ:
Поскольку у него нет физического хранения, на него нельзя повесить индекс. Индексы применимы только к материализованным представлениям или таблицам.
tags: #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤6🔥2
В статье подробно объясняются архитектурные принципы ClickHouse: от хранения данных и механики слияний до точечных чтений и join-ов.
Автор на примерах показывает, как устроены куски, почему важна иммутабельность, что влияет на производительность и как эффективно настраивать базу под разные сценарии.
tags: #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Почему Redis работает так быстро?
Ответ:
Это позволяет выполнять большинство команд за миллисекунды, без обращения к диску и сложных блокировок.
tags: #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍5❤3🥱2
Делимся бесплатной книгой об основах PostgreSQL 17 — от установки и подключения до первых запросов, работы с pgAdmin, транзакциями, JSON и полнотекстовым поиском.
Плюс — полезные советы по настройке БД для приложений и интеграции с 1С.
tags: #полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥1
Что такое MongoDB и чем она отличается от SQL-баз?
Ответ:
В отличие от SQL-баз, она не требует фиксированной схемы, легко масштабируется и чаще применяется там, где важна гибкость структуры данных.
tags: #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
В статье рассказывается о том, как устроены блокировки различных объектов в PostgreSQL, включая роли, схемы, индексы и абстрактные ресурсы.
Автор разбирает взаимоблокировки, предикатные и рекомендательные блокировки, показывая, как они влияют на поведение транзакций.
tags: #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
Что такое S3-хранилище и зачем оно нужно?
Ответ:
Оно масштабируемое, надёжное и предоставляет доступ к файлам через URL. В отличие от традиционных файловых систем, в S3 нет иерархии папок — всё хранится как объекты в “бакетах” (контейнерах), а доступ можно контролировать через политики и права.
tags: #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤5🔥3
В статье рассказывается о том, как грамотно организовать резервное копирование PostgreSQL с помощью стандартных инструментов командной строки.
Автор подробно сравнивает форматы дампов (plain, custom, tar, directory), объясняет, в каких сценариях лучше использовать каждый из них, и показывает замеры по времени, объёму и возможностям восстановления.
tags: #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24🔥3👍1
Почему в
WHERE нельзя использовать алиасы из SELECT?Ответ:
tags: #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯10👍9❤5
Делимся книгой для тех, кто хочет разобраться, как устроены современные СУБД на уровне архитектуры, алгоритмов и структур данных.
Подойдет разработчикам и архитекторам, которым важно понимать внутреннюю логику систем, а не просто применять готовые решения по шаблону.
tags: #полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4❤1
Forwarded from Data Science. SQL hub
Media is too big
VIEW IN TELEGRAM
📜 История SQL — от лабораторной идеи до «языка данных» № 1
Как появился самый известный язык работы с базами, почему он едва не остался «Сиквелом» и какие любопытные факты о нём редко всплывают в учебниках.
1. Всё началось с таблицы на бумаге
- 1970 г. — британский математик Эдгар Ф. Кодд публикует культовую статью *“A Relational Model of Data for Large Shared Data Banks”*.
- В ней впервые прозвучала идея: хранить данные в виде связанных таблиц, а не как запутанные иерархии (IMS) или сетевые графы (Codasyl).
- Коллеги в IBM скептически называли это «бумагой на буквы», но разрешили сделать прототип, чтобы проверить утопию Кодда на практике.
2. SEQUEL — «английский» запрос к таблицам
- 1973–1974 гг. — в лаборатории IBM San José (ныне Almaden) двое молодых исследователей, Дональд Чемберлин и Рэймонд Бойс, берутся за проект System R.
- Чтобы обращаться к реляционным таблицам, они придумывают Structured English QUEry Language — SEQUEL.
- Ключевая фишка — запросы выглядят почти как английские предложения:
- В 1974‑м публикуют первую спецификацию; академики критикуют за «слишком поверхностный английский», но программисты в восторге.
3. Почему SEQUEL стал SQL
- Торговая марка “SEQUEL” уже принадлежала авиастроительной компании *Hawker Siddeley*.
- IBM, опасаясь суда, в 1976 г. официально отказывается от «E» и оставляет SQL (Structured Query Language).
- *Небольшая путаница осталась навсегда: кто‑то произносит «эс‑кью‑эл», кто‑то — «сиквел».*
4. Коммерческий взлёт
- 1978 | Первая демонстрация System R внутри IBM | показала, что SQL работает быстрее ожиданий |
- 1979 | Стартап Relational Software (позже Oracle**) выпускает **Oracle V2 — первый коммерческий SQL‑движок | IBM ещё не успела выйти на рынок
- 1981 | IBM выпускает SQL/DS для мейнфреймов | стандарт де‑факто закрепляется
- 1983 | Дебют DB2 — теперь SQL есть почти в каждом крупном банке
5. Стандартизация и эволюция
- ANSI SQL‑86 → SQL‑92 (появился `JOIN ... ON`) → SQL:1999 (рекурсия, триггеры) → SQL:2003 (XML) → … → SQL:2023 (JSON, property graphs).
- Каждые 3–5 лет комитет добавляет «модные» возможности, но 90 % повседневных запросов всё ещё укладываются в синтаксис 1980‑х.
6. Забавные факты, которые украсят small talk 🍸
1. NULL ≠ 0 и NULL ≠ NULL — «неизвестное значение» нарушает законы логики, за что его зовут *“пятой ногой”* реляционной алгебры.
2. `SELECT *` — наследие печати на станке. Звёздочка означала «все колонки», чтобы не писать их руками в 132‑символьных перфокартах.
3. Команда
4. В Oracle долго не было
5. Первый SQL‑вирус — червь *Slammer* (2003) — парализовал интернет за 10 минут через уязвимость в SQL Server 2000.
6. SQL — декларативный язык, но внутри СУБД каждый
7.Ф. Кодд публикуетпридумали позже, чемлабораторн Сначала удалять целую БД казалось слишком опасным.
7. Почему SQL живёт дольше модных NoSQL‑наследников
- Математическая база. Таблицы + операции Кодда образуют алгебру с предсказуемой оптимизацией.
- Стандарты и переносимость. Код двадцатилетней давности можно запустить в современной Postgres или MariaDB.
- Большая экосистема. От Excel‑плагинов до BigQuery — везде так или иначе поддерживается SQL‑диалект.
- Сопротивляемость моде. Каждый «убийца SQL» (MapReduce, GraphQL, документные БД) в итоге добавляет свой адаптер
Итог: SQL родился как эксперимент IBM, пережил смену названий и юридические баталии, но в итоге стал «лентой Мёбиуса» мира данных: можно зайти с любой стороны — и всё равно окажешься в
https://www.youtube.com/shorts/EuFjzuVHkHE
@sqlhub -подписаться
Как появился самый известный язык работы с базами, почему он едва не остался «Сиквелом» и какие любопытные факты о нём редко всплывают в учебниках.
1. Всё началось с таблицы на бумаге
- 1970 г. — британский математик Эдгар Ф. Кодд публикует культовую статью *“A Relational Model of Data for Large Shared Data Banks”*.
- В ней впервые прозвучала идея: хранить данные в виде связанных таблиц, а не как запутанные иерархии (IMS) или сетевые графы (Codasyl).
- Коллеги в IBM скептически называли это «бумагой на буквы», но разрешили сделать прототип, чтобы проверить утопию Кодда на практике.
2. SEQUEL — «английский» запрос к таблицам
- 1973–1974 гг. — в лаборатории IBM San José (ныне Almaden) двое молодых исследователей, Дональд Чемберлин и Рэймонд Бойс, берутся за проект System R.
- Чтобы обращаться к реляционным таблицам, они придумывают Structured English QUEry Language — SEQUEL.
- Ключевая фишка — запросы выглядят почти как английские предложения:
SELECT name, salary
FROM employees
WHERE dept = 'R&D';
- В 1974‑м публикуют первую спецификацию; академики критикуют за «слишком поверхностный английский», но программисты в восторге.
3. Почему SEQUEL стал SQL
- Торговая марка “SEQUEL” уже принадлежала авиастроительной компании *Hawker Siddeley*.
- IBM, опасаясь суда, в 1976 г. официально отказывается от «E» и оставляет SQL (Structured Query Language).
- *Небольшая путаница осталась навсегда: кто‑то произносит «эс‑кью‑эл», кто‑то — «сиквел».*
4. Коммерческий взлёт
- 1978 | Первая демонстрация System R внутри IBM | показала, что SQL работает быстрее ожиданий |
- 1979 | Стартап Relational Software (позже Oracle**) выпускает **Oracle V2 — первый коммерческий SQL‑движок | IBM ещё не успела выйти на рынок
- 1981 | IBM выпускает SQL/DS для мейнфреймов | стандарт де‑факто закрепляется
- 1983 | Дебют DB2 — теперь SQL есть почти в каждом крупном банке
5. Стандартизация и эволюция
- ANSI SQL‑86 → SQL‑92 (появился `JOIN ... ON`) → SQL:1999 (рекурсия, триггеры) → SQL:2003 (XML) → … → SQL:2023 (JSON, property graphs).
- Каждые 3–5 лет комитет добавляет «модные» возможности, но 90 % повседневных запросов всё ещё укладываются в синтаксис 1980‑х.
6. Забавные факты, которые украсят small talk 🍸
1. NULL ≠ 0 и NULL ≠ NULL — «неизвестное значение» нарушает законы логики, за что его зовут *“пятой ногой”* реляционной алгебры.
2. `SELECT *` — наследие печати на станке. Звёздочка означала «все колонки», чтобы не писать их руками в 132‑символьных перфокартах.
3. Команда
GO в MS SQL Server не принадлежит стандарту SQL — это директива из старого клиента isql. 4. В Oracle долго не было
LIMIT, а в MySQL —QL — от лабора Поэтому админы шутили: «истинный межплатформенный SQL — это `SELECT 1;`». 5. Первый SQL‑вирус — червь *Slammer* (2003) — парализовал интернет за 10 минут через уязвимость в SQL Server 2000.
6. SQL — декларативный язык, но внутри СУБД каждый
SELECT превращается в процедурный план. 7.Ф. Кодд публикуетпридумали позже, чемлабораторн Сначала удалять целую БД казалось слишком опасным.
7. Почему SQL живёт дольше модных NoSQL‑наследников
- Математическая база. Таблицы + операции Кодда образуют алгебру с предсказуемой оптимизацией.
- Стандарты и переносимость. Код двадцатилетней давности можно запустить в современной Postgres или MariaDB.
- Большая экосистема. От Excel‑плагинов до BigQuery — везде так или иначе поддерживается SQL‑диалект.
- Сопротивляемость моде. Каждый «убийца SQL» (MapReduce, GraphQL, документные БД) в итоге добавляет свой адаптер
SELECT ….Итог: SQL родился как эксперимент IBM, пережил смену названий и юридические баталии, но в итоге стал «лентой Мёбиуса» мира данных: можно зайти с любой стороны — и всё равно окажешься в
FROM.https://www.youtube.com/shorts/EuFjzuVHkHE
@sqlhub -подписаться
👍23🔥11❤4🤨4🥰1💊1
Друзья, мы создали канал с книгами по SQL и залили туда наверное самую большую подборку книг по SQL. Около 200 книг. Каждую неделю выходят еще новые книги.
Подпишитесь, там будут книги и марафоны задач по SQL и много редкой литературы. https://t.me/sql_lib
Подпишитесь, там будут книги и марафоны задач по SQL и много редкой литературы. https://t.me/sql_lib
Telegram
Библиотека баз данных
Самая большая библиотека бесплатных книг по SQL
По всем вопросам- @haarrp
@ai_machinelearning_big_data - machine learning
@pythonl - Python
@itchannels_telegram - 🔥 best it channels
@ArtificialIntelligencedl - AI
РКН: № 5037640984
По всем вопросам- @haarrp
@ai_machinelearning_big_data - machine learning
@pythonl - Python
@itchannels_telegram - 🔥 best it channels
@ArtificialIntelligencedl - AI
РКН: № 5037640984
👍7❤2🔥2💊2🤨1
🛢️ SQL-задача с подвохом: NULL ловушка
Условие:
Есть таблица
| id | name | department |
|-----|----------|------------|
| 1 | Alice | Sales |
| 2 | Bob | NULL |
| 3 | Charlie | HR |
| 4 | Diana | NULL |
| 5 | Eve | Sales |
Ты хочешь выбрать всех сотрудников, которые не работают в отделе Sales. Пишешь простой запрос:
❓ Вопрос:
Какие строки вернёт этот запрос? Почему результат может удивить даже опытных специалистов?
---
🔍 Разбор:
На первый взгляд логика понятна: мы хотим исключить сотрудников из отдела
- Bob (NULL)
- Charlie (HR)
- Diana (NULL)
Но вот главный подвох: NULL — это "неизвестное значение", и в SQL любые сравнения с NULL дают
Запрос:
- Charlie (HR): ✅ вернётся, потому что HR <> Sales.
- Bob (NULL): ❌ НЕ вернётся, потому что NULL <> 'Sales' даёт
- Diana (NULL): ❌ по той же причине.
- Alice и Eve: ❌ потому что у них Sales.
---
✅ Фактический результат:
| id | name | department |
|-----|---------|------------|
| 3 | Charlie | HR |
---
💥 Подвох:
Многие думают, что NULL автоматически участвует в сравнении как будто это "значение", но SQL строго следует трёхзначной логике:
- TRUE
- FALSE
- UNKNOWN
В
---
🛠 Как исправить запрос, чтобы включить сотрудников без отдела (NULL):
Теперь вернётся:
| id | name | department |
|-----|---------|------------|
| 2 | Bob | NULL |
| 3 | Charlie | HR |
| 4 | Diana | NULL |
---
✅ Вывод:
• В SQL сравнения с NULL всегда возвращают
• Обычные условия (`<>`,
• Даже простой фильтр может дать неожиданный результат, если в данных есть пропуски.
💡 Бонус-вопрос:
Что будет, если использовать
➡ SQL Community |
Условие:
Есть таблица
employees:| id | name | department |
|-----|----------|------------|
| 1 | Alice | Sales |
| 2 | Bob | NULL |
| 3 | Charlie | HR |
| 4 | Diana | NULL |
| 5 | Eve | Sales |
Ты хочешь выбрать всех сотрудников, которые не работают в отделе Sales. Пишешь простой запрос:
SELECT * FROM employees
WHERE department <> 'Sales';
❓ Вопрос:
Какие строки вернёт этот запрос? Почему результат может удивить даже опытных специалистов?
---
🔍 Разбор:
На первый взгляд логика понятна: мы хотим исключить сотрудников из отдела
Sales. Кажется, что должны вернуться:- Bob (NULL)
- Charlie (HR)
- Diana (NULL)
Но вот главный подвох: NULL — это "неизвестное значение", и в SQL любые сравнения с NULL дают
UNKNOWN.Запрос:
WHERE department <> 'Sales'
- Charlie (HR): ✅ вернётся, потому что HR <> Sales.
- Bob (NULL): ❌ НЕ вернётся, потому что NULL <> 'Sales' даёт
UNKNOWN (не TRUE). - Diana (NULL): ❌ по той же причине.
- Alice и Eve: ❌ потому что у них Sales.
---
✅ Фактический результат:
| id | name | department |
|-----|---------|------------|
| 3 | Charlie | HR |
---
💥 Подвох:
Многие думают, что NULL автоматически участвует в сравнении как будто это "значение", но SQL строго следует трёхзначной логике:
- TRUE
- FALSE
- UNKNOWN
В
WHERE фильтре остаются только строки, где условие = TRUE. Строки с NULL дают UNKNOWN и отбрасываются.---
🛠 Как исправить запрос, чтобы включить сотрудников без отдела (NULL):
SELECT * FROM employees
WHERE department <> 'Sales' OR department IS NULL;
Теперь вернётся:
| id | name | department |
|-----|---------|------------|
| 2 | Bob | NULL |
| 3 | Charlie | HR |
| 4 | Diana | NULL |
---
✅ Вывод:
• В SQL сравнения с NULL всегда возвращают
UNKNOWN. • Обычные условия (`<>`,
=, >, <`) **не учитывают NULL правильно**, если явно не проверить `IS NULL или IS NOT NULL. • Даже простой фильтр может дать неожиданный результат, если в данных есть пропуски.
💡 Бонус-вопрос:
Что будет, если использовать
NOT department = 'Sales' вместо department <> 'Sales'? 😉Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥12❤6🤨2
Forwarded from Machinelearning
https://huggingface.co/learn/llm-course/chapter1/1
Создавайте инструменты с многоэтапным мышлением, используя LangChain и HF.
https://huggingface.co/learn/agents-course/unit0/introduction
Научите агентов принимать решения и учиться на основе окружающей среды.
https://huggingface.co/learn/deep-rl-course/unit0/introduction
Изучите как работает OCR, сегментация и классификация изображений с моделями HuggingFace.
https://huggingface.co/learn/audio-course/chapter0/introduction
Применяйте трансформеры к аудио: распознавание речи, тегирование музыки и синтез речи.
https://huggingface.co/learn/audio-course/chapter0/introduction
Узнайте, как ИИ меняет разработку игр: от поведения NPC до генерации контента.
https://huggingface.co/learn/ml-games-course/unit0/introduction
Работайте с 3D-данными, такими как облака точек и сетки, на стыке графики и ML.
https://huggingface.co/learn/ml-for-3d-course/unit0/introduction
Погрузитесь в технологию, лежащую в основе DALL·E и Stable Diffusion, и научитесь генерировать изображения.
https://huggingface.co/learn/diffusion-course/unit0/1
Коллекция практических ноутбуков от реальных разработчиков ИИ — учитесь, копируйте код и создавайте свои проекты. https://huggingface.co/learn/cookbook/index
@ai_machinelearning_big_data - подписаться
#free #courses #opensource #huggingface
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥3👍2💊2🤨1
🧠 SQL-задача с подвохом: “Найди самого активного… по количеству разных друзей”
📘 Условие
У тебя есть таблица дружбы:
Здесь каждая строка означает, что
Записи всегда односторонние: если есть
Нужно написать запрос, который найдёт пользователя с наибольшим числом уникальных друзей.
❓ Пример попытки:
🔍 Вопрос:
1) В чём здесь может быть логическая ошибка?
2) Какую строку подсчитает
3) Когда нужно использовать
4) Как обойти случай, если один и тот же друг записан несколько раз?
✅ Разбор подвоха
💣 Проблема: один пользователь может быть записан как друг **несколько раз**, особенно если приложение допускает дубли (или "перезапросы дружбы").
Пример:
```sql
INSERT INTO friends VALUES (1, 2), (1, 2), (1, 3);
```
В этом случае:
```sql
SELECT COUNT(friend_id) FROM friends WHERE user_id = 1;
-- → вернёт 3
```
Но реальных друзей у пользователя `1` — только **2**: `2` и `3`.
✅ Решение:
Используй `COUNT(DISTINCT friend_id)`:
```sql
SELECT user_id, COUNT(DISTINCT friend_id) AS unique_friends
FROM friends
GROUP BY user_id
ORDER BY unique_friends DESC
LIMIT 1;
```
🎯 Дополнительно можно убрать самого пользователя из списка друзей (на случай ошибок):
```sql
WHERE user_id != friend_id
```
⚠️ Подвох
• `COUNT()` без `DISTINCT` ловит даже опытных — особенно если в БД возможны дубли
• `LIMIT 1` не гарантирует "уникального победителя", если у нескольких одинаковый счёт
• Иногда friendship бывает и симметричной, тогда нужна защита от двойного счёта
📘 Условие
У тебя есть таблица дружбы:
friends(user_id, friend_id)
Здесь каждая строка означает, что
user_id дружит с friend_id. Записи всегда односторонние: если есть
(1, 2), это не значит, что будет (2, 1).Нужно написать запрос, который найдёт пользователя с наибольшим числом уникальных друзей.
❓ Пример попытки:
SELECT user_id, COUNT(friend_id) AS total_friends
FROM friends
GROUP BY user_id
ORDER BY total_friends DESC
LIMIT 1;
🔍 Вопрос:
1) В чём здесь может быть логическая ошибка?
2) Какую строку подсчитает
COUNT(friend_id)? 3) Когда нужно использовать
COUNT(DISTINCT friend_id)? 4) Как обойти случай, если один и тот же друг записан несколько раз?
✅ Разбор подвоха
💣 Проблема: один пользователь может быть записан как друг **несколько раз**, особенно если приложение допускает дубли (или "перезапросы дружбы").
Пример:
```sql
INSERT INTO friends VALUES (1, 2), (1, 2), (1, 3);
```
В этом случае:
```sql
SELECT COUNT(friend_id) FROM friends WHERE user_id = 1;
-- → вернёт 3
```
Но реальных друзей у пользователя `1` — только **2**: `2` и `3`.
✅ Решение:
Используй `COUNT(DISTINCT friend_id)`:
```sql
SELECT user_id, COUNT(DISTINCT friend_id) AS unique_friends
FROM friends
GROUP BY user_id
ORDER BY unique_friends DESC
LIMIT 1;
```
🎯 Дополнительно можно убрать самого пользователя из списка друзей (на случай ошибок):
```sql
WHERE user_id != friend_id
```
⚠️ Подвох
• `COUNT()` без `DISTINCT` ловит даже опытных — особенно если в БД возможны дубли
• `LIMIT 1` не гарантирует "уникального победителя", если у нескольких одинаковый счёт
• Иногда friendship бывает и симметричной, тогда нужна защита от двойного счёта
👀11👍9❤2🔥2💊1
git clone git@github.com:<your-username>/beekeeper-studio.git beekeeper-studio
cd beekeeper-studio/
yarn install
yarn run electron:serve
Beekeeper Studio без проблем работает на всех платформах: Linux, MacOS и Windows
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3🔥2🤨2