🔥 Успех в IT = скорость + знания + окружение
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
❤2👍1🔥1
Forwarded from Python/ django
py-pglite — обёртка PGlite для Python, позволяющая запускать настоящую базу PostgreSQL прямо при тестах. Без Docker, без настройки — просто импортируй и работай.
📌 Почему это круто:
- 🧪 Ноль конфигурации: никакого Postgres и Docker, только Python
- ⚡ Молниеносный старт: 2–3 с против 30–60 с на традиционные подходы :contentReference[oaicite:2]{index=2}
- 🔐 Изолированные базы: новая база для каждого теста — чисто и безопасно
- 🏗️ Реальный Postgres: работает с JSONB, массивами, оконными функциями
- 🔌 Совместимость: SQLAlchemy, Django, psycopg, asyncpg — любая связка :contentReference[oaicite:3]{index=3}
💡 Примеры установки:
pip install py-pglite
pip install py-pglite[sqlalchemy] # SQLAlchemy/SQLModel
pip install py-pglite[django] # Django + pytest-django
pip install py-pglite[asyncpg] # Асинхронный клиент
pip install py-pglite[all] # Всё сразу
🔧 Пример (SQLAlchemy)
python
def test_sqlalchemy_just_works(pglite_session):
user = User(name="Alice")
pglite_session.add(user)
pglite_session.commit()
assert user.id is not None
py‑pglite — идеальный инструмент для unit- и интеграционных тестов, где нужен настоящий Postgres, но без всей админской рутины.
Полноценный PostgreSQL — без его тяжеловесности.
▪Github
@pythonl
#python #sql #PostgreSQL #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4🥰3
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
Модель заточена и оптимизирована для интеграции с Model Context Protocol (MCP).
📊 На SimpleQA (agentic / MCP) — Jan-nano набирает 80.7
Это серьёзный результат для модели такого размера!
Модель работает через Jan — open-source альтернативу ChatGPT, которая запускается локально.
🔍 Jan-nano — ещё один пример того, как компактные модели могут конкурировать с большими моделями благодаря обучению и агентной архитектуре.
▪ HF: https://huggingface.co/Menlo/Jan-nano
@ai_machinelearning_big_data
#LLM #JanNano #MCP #OpenSourceAI
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥3😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Database Build - инструмент для работы с базами данным с капелькой нейросетей
Можно написать «Создай базу для пиццерии» и получить готовую структуру с таблицами, связями и диаграммами.
Получившиеся таблицы можно править, генерить в них тестовые данные, а потом импортировать в SQL или задеплоить на Supabase (а скоро подвезут и AWS).
Это бесплатно
Можно написать «Создай базу для пиццерии» и получить готовую структуру с таблицами, связями и диаграммами.
Получившиеся таблицы можно править, генерить в них тестовые данные, а потом импортировать в SQL или задеплоить на Supabase (а скоро подвезут и AWS).
Это бесплатно
❤9👍4🔥2
🧠 Хитрая SQL-задача на собеседование: "Пропущенный день"
Представь таблицу заказов:
🎯 Задача: Найти пользователей, у которых были два заказа, сделанных с пропуском ровно одного дня
(например: 1 мая и 3 мая), но без других заказов между ними.
🛑 Не учитываются пары, где между ними был хоть один заказ.
---
💡 Решение с LEAD() + NOT EXISTS:
🔍 Подвох: многие находят заказы “через день”, но забывают проверить, не было ли чего-то между ними.
Такие задачки отлично проверяют знание оконных функций и аналитического мышления.
Представь таблицу заказов:
orders (
id INT,
user_id INT,
order_date DATE
)🎯 Задача: Найти пользователей, у которых были два заказа, сделанных с пропуском ровно одного дня
(например: 1 мая и 3 мая), но без других заказов между ними.
🛑 Не учитываются пары, где между ними был хоть один заказ.
---
💡 Решение с LEAD() + NOT EXISTS:
WITH ranked_orders AS (
SELECT
user_id,
order_date,
LEAD(order_date) OVER (PARTITION BY user_id ORDER BY order_date) AS next_order
FROM orders
),
valid_pairs AS (
SELECT
user_id
FROM ranked_orders ro
WHERE DATE_DIFF(ro.next_order, ro.order_date, DAY) = 2
AND NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = ro.user_id
AND o.order_date > ro.order_date
AND o.order_date < ro.next_order
)
)
SELECT DISTINCT user_id FROM valid_pairs;
🔍 Подвох: многие находят заказы “через день”, но забывают проверить, не было ли чего-то между ними.
Такие задачки отлично проверяют знание оконных функций и аналитического мышления.
❤11👍5🔥2
🧠 Продвинутая SQL-задача: "Скользящий максимум с условиями"
Допустим, у вас есть таблица
🎯 Задача:
Для каждой транзакции нужно найти максимальный
- За последние 7 дней, включая текущую
- Только по этому же
- Только по статусу
📥 Ожидаемый вывод:
🧩 Решение:
⚠️ Подводные камни:
- Без индексов по
- Используется подзапрос, а не
- В PostgreSQL стоит учитывать точные границы
🚀 Навыки, которые проверяются:
- Оптимизация временных окон
- Группировка и фильтрация с условиями
- Агрегации по диапазонам
💡 Усложнение:
Хочешь ещё интереснее? Добавь группировку по разным
Допустим, у вас есть таблица
transactions:
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
user_id INT,
amount NUMERIC,
status TEXT,
created_at TIMESTAMP
);
🎯 Задача:
Для каждой транзакции нужно найти максимальный
amount:- За последние 7 дней, включая текущую
- Только по этому же
user_id - Только по статусу
'confirmed'📥 Ожидаемый вывод:
| id | user_id | amount | created_at | max_amount_last_7d |
|----|---------|--------|--------------------|---------------------|
| 1 | 101 | 100 | 2024-01-01 10:00 | 100 |
| 2 | 101 | 150 | 2024-01-04 12:00 | 150 |
| 3 | 101 | 120 | 2024-01-07 09:00 | 150 |
| 4 | 101 | 90 | 2024-01-15 14:00 | 120 |
🧩 Решение:
SELECT
t1.id,
t1.user_id,
t1.amount,
t1.created_at,
(
SELECT MAX(t2.amount)
FROM transactions t2
WHERE t2.user_id = t1.user_id
AND t2.status = 'confirmed'
AND t2.created_at BETWEEN t1.created_at - INTERVAL '7 days' AND t1.created_at
) AS max_amount_last_7d
FROM transactions t1;
⚠️ Подводные камни:
- Без индексов по
user_id, status, created_at запрос будет тормозить - Используется подзапрос, а не
window function, потому что окно — динамическое - В PostgreSQL стоит учитывать точные границы
BETWEEN при сравнении времени🚀 Навыки, которые проверяются:
- Оптимизация временных окон
- Группировка и фильтрация с условиями
- Агрегации по диапазонам
💡 Усложнение:
Хочешь ещё интереснее? Добавь группировку по разным
status, или перепиши на JOIN с LATERAL.🔥9❤6🥰2😱1
Media is too big
VIEW IN TELEGRAM
SQL за полтора часа в одном видео! Полный базовый курс по SQL. Базы данных курс для начинающих!
00:00:00 Введение
00:02:43 Платные курсы и что изучать дальше
00:04:55 Коротко об онлайн редакторе
00:07:11 Что такое база данных
00:08:10 Что такое CRUD
00:10:05 Запрос на создание первой таблицы
00:11:57 Типы данных у атрибутов(колонок) (DATA TYPES)
00:17:26 Прописываем атрибуты(колонки) первой таблицы
00:21:07 Создаем первую таблицу (CREATE TABLE)
00:21:38 Проверка на наличие таблицы при создании (IF NOT EXISTS)
00:22:18 Запрос на удаление таблицы(DROP TABLE)
00:22:33 Проверка на наличие таблицы при удалении(IF EXISTS)
00:22:57 Запрос на добавление объекта в таблицу (INSER INTO table)
00:23:35 Запрос на чтение(получение) объектов из таблицы(SELECT * FROM table)
00:24:18 Модификаторы для атрибутов(колонок) таблицы(NOT NULL, DEFAULT, UNIQUE)
00:29:26 Изменение уже существующей таблицы(ALTER TABLE, ADD, DROP, RENAME, MODIFY COLUMN)
00:36:08 Удаление объектов из таблицы(DELETE FROM table)
00:37:06 Редактирование объекта в таблице(UPDATE table)
00:39:03 Первичный ключ(PRIMARY KEY)
00:45:37 Композиция в бд
00:50:38 "Иностранный" ключ(FOREIGN KEY)
00:57:26 Индексы в бд(INDEX)
00:59:24 Готовим данные для темы алиас, юнион и слияние таблиц
01:03:30 Слияние таблиц(INNER JOIN)
01:06:02 Слияние таблиц(LEFT JOIN)
01:06:53 Слияние таблиц(RIGHT JOIN)
01:07:26 Слияние таблиц(FULL JOIN/OUTER JOIN) и Union
01:09:04 Алиас(table AS alias)
01:12:18 Select Distinct в SQL
01:13:42 AND OR NOT в SQL
01:16:18 ORDER BY и LIMIT в SQL
01:17:35 MIN и MAX в SQL
01:18:25 COUNT SUM AVG в SQL
01:19:29 LIKE в SQL
01:21:31 IN и BETWEEN в SQL
01:22:50 GROUP BY в SQL
01:25:17 EXISTS в SQL
01:27:37 ANY и SOME в SQL
01:29:00 INSERT INTO в SQL
01:30:40 Отношения в базе данных
01:32:11 Отношения один к одному
01:33:09 Отношения один ко многим
01:34:09 Отношения многие ко многим
01:37:10 Отношения один к одному и один ко многим "через"
01:39:10 SQL инъекции
источник
#devops #девопс
00:00:00 Введение
00:02:43 Платные курсы и что изучать дальше
00:04:55 Коротко об онлайн редакторе
00:07:11 Что такое база данных
00:08:10 Что такое CRUD
00:10:05 Запрос на создание первой таблицы
00:11:57 Типы данных у атрибутов(колонок) (DATA TYPES)
00:17:26 Прописываем атрибуты(колонки) первой таблицы
00:21:07 Создаем первую таблицу (CREATE TABLE)
00:21:38 Проверка на наличие таблицы при создании (IF NOT EXISTS)
00:22:18 Запрос на удаление таблицы(DROP TABLE)
00:22:33 Проверка на наличие таблицы при удалении(IF EXISTS)
00:22:57 Запрос на добавление объекта в таблицу (INSER INTO table)
00:23:35 Запрос на чтение(получение) объектов из таблицы(SELECT * FROM table)
00:24:18 Модификаторы для атрибутов(колонок) таблицы(NOT NULL, DEFAULT, UNIQUE)
00:29:26 Изменение уже существующей таблицы(ALTER TABLE, ADD, DROP, RENAME, MODIFY COLUMN)
00:36:08 Удаление объектов из таблицы(DELETE FROM table)
00:37:06 Редактирование объекта в таблице(UPDATE table)
00:39:03 Первичный ключ(PRIMARY KEY)
00:45:37 Композиция в бд
00:50:38 "Иностранный" ключ(FOREIGN KEY)
00:57:26 Индексы в бд(INDEX)
00:59:24 Готовим данные для темы алиас, юнион и слияние таблиц
01:03:30 Слияние таблиц(INNER JOIN)
01:06:02 Слияние таблиц(LEFT JOIN)
01:06:53 Слияние таблиц(RIGHT JOIN)
01:07:26 Слияние таблиц(FULL JOIN/OUTER JOIN) и Union
01:09:04 Алиас(table AS alias)
01:12:18 Select Distinct в SQL
01:13:42 AND OR NOT в SQL
01:16:18 ORDER BY и LIMIT в SQL
01:17:35 MIN и MAX в SQL
01:18:25 COUNT SUM AVG в SQL
01:19:29 LIKE в SQL
01:21:31 IN и BETWEEN в SQL
01:22:50 GROUP BY в SQL
01:25:17 EXISTS в SQL
01:27:37 ANY и SOME в SQL
01:29:00 INSERT INTO в SQL
01:30:40 Отношения в базе данных
01:32:11 Отношения один к одному
01:33:09 Отношения один ко многим
01:34:09 Отношения многие ко многим
01:37:10 Отношения один к одному и один ко многим "через"
01:39:10 SQL инъекции
источник
#devops #девопс
❤12👍7🔥5💊1
🧠 Oracle SQL — совет для продвинутых: аналитические функции > JOIN + GROUP BY
Если ты всё ещё используешь
🔧 Пример: вместо этого
🔥 Используй:
📌 Что это даёт:
•
•
•
⚡ Аналитические функции в Oracle — это:
• меньше кода
• выше производительность
• идеально для дашбордов, отчётов и сложной аналитики
🧠 Вывод: перестань бороться с GROUP BY — используй
Если ты всё ещё используешь
GROUP BY + подзапросы для расчёта рангов, окон и сумм — переходи на аналитические функции. Они читаются проще, работают быстрее и избавляют от лишних джойнов.🔧 Пример: вместо этого
SELECT department_id, employee_id, salary
FROM (
SELECT department_id, employee_id, salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk
FROM employees
)
WHERE rnk = 1;
🔥 Используй:
SELECT *
FROM (
SELECT e.*, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk
FROM employees e
)
WHERE rnk = 1;
📌 Что это даёт:
•
RANK(), DENSE_RANK(), ROW_NUMBER() — вычисляются без лишнего JOIN •
PARTITION BY делит данные по группам без агрегирования •
OVER (...) даёт гибкость без переписывания логики⚡ Аналитические функции в Oracle — это:
• меньше кода
• выше производительность
• идеально для дашбордов, отчётов и сложной аналитики
🧠 Вывод: перестань бороться с GROUP BY — используй
OVER() и управляй данными как потоком.❤7💊4👀3👍2🔥2
🌐 DeepBI — инновационная платформа для анализа данных с помощью ИИ, которая превращает сложные запросы в простые диалоги. Этот инструмент позволяет исследовать данные из MySQL, PostgreSQL, CSV и других источников, используя естественный язык вместо SQL.
Инструмент умеет генерировать персистентные визуализации и дашборды через чат-интерфейс. Платформа поддерживает мультиязычность (английский/китайский) и работает на Windows, Linux и macOS. Для тестирования доступны Docker-образы и EXE-установщик.
🤖 GitHub
@data_analysis_ml
Инструмент умеет генерировать персистентные визуализации и дашборды через чат-интерфейс. Платформа поддерживает мультиязычность (английский/китайский) и работает на Windows, Linux и macOS. Для тестирования доступны Docker-образы и EXE-установщик.
🤖 GitHub
@data_analysis_ml
❤3👍3🔥2
Forwarded from Machinelearning
🤖 Gemini Robotics выпускает автономный AI для роботов
Google представили Gemini Robotics On-Device — первую модель, объединяющую зрение, язык и действия, которая работает прямо на роботах, без постоянного подключения к интернету.
🔍 Что делает эту модель особенной:
🔹 Объединяет универсальность и точность Gemini, но работает локально
🔹 Моделька справляется со сложными задачами с двумя руками (манипуляции, сборка, перенос)
🔹 Обучается новым действиям всего по 50–100 демкам
Модель уже поддерживает разные типы роботов — от гуманоидов до промышленных двухруких манипуляторов. И это несмотря на то, что изначально она была обучена только на датасете ALOHA под управлением человеческих инструкций.
🛠 В комплекте выходит SDK Gemini Robotics — для разработчиков, которые хотят дообучить модель под свои нужды, включая тесты в физическом симуляторе MuJoCo.
🌐 Полностью автономная работа — идеально для кейсов с плохой связью или требованиями к высокой скорости отклика.
Gemini Robotics продолжает двигаться к будущему, где AI становится частью физического мира.
👉 Подробнее: https://goo.gle/gemini-robotics-on-device
@ai_machinelearning_big_data
#ai #robots #vlm #google #Gemini
Google представили Gemini Robotics On-Device — первую модель, объединяющую зрение, язык и действия, которая работает прямо на роботах, без постоянного подключения к интернету.
🔍 Что делает эту модель особенной:
🔹 Объединяет универсальность и точность Gemini, но работает локально
🔹 Моделька справляется со сложными задачами с двумя руками (манипуляции, сборка, перенос)
🔹 Обучается новым действиям всего по 50–100 демкам
Модель уже поддерживает разные типы роботов — от гуманоидов до промышленных двухруких манипуляторов. И это несмотря на то, что изначально она была обучена только на датасете ALOHA под управлением человеческих инструкций.
🛠 В комплекте выходит SDK Gemini Robotics — для разработчиков, которые хотят дообучить модель под свои нужды, включая тесты в физическом симуляторе MuJoCo.
🌐 Полностью автономная работа — идеально для кейсов с плохой связью или требованиями к высокой скорости отклика.
Gemini Robotics продолжает двигаться к будущему, где AI становится частью физического мира.
👉 Подробнее: https://goo.gle/gemini-robotics-on-device
@ai_machinelearning_big_data
#ai #robots #vlm #google #Gemini
🤨3👍2
💎 Tencent выводит 3D-генерацию на новый уровень с обновлением Hunyuan3D.
Китайский технологический гигант продолжает совершенствовать свою открытую нейросеть для создания трёхмерных объектов. В версии 2.1 модель научилась учитывать физические свойства материалов при рендеринге — теперь свет реалистично преломляется на стекле, отражается от металла и рассеивается на тканях.
Нейросеть работает по принципу двухэтапной генерации: сначала создаются изображения объекта с разных ракурсов, затем они преобразуются в 3D-модель. При этом ии остаётся доступным для широкого круга пользователей, ее базовые функции работают на видеокартах от 10 ГБ памяти.
🔗 Ссылка - *клик*
Китайский технологический гигант продолжает совершенствовать свою открытую нейросеть для создания трёхмерных объектов. В версии 2.1 модель научилась учитывать физические свойства материалов при рендеринге — теперь свет реалистично преломляется на стекле, отражается от металла и рассеивается на тканях.
Нейросеть работает по принципу двухэтапной генерации: сначала создаются изображения объекта с разных ракурсов, затем они преобразуются в 3D-модель. При этом ии остаётся доступным для широкого круга пользователей, ее базовые функции работают на видеокартах от 10 ГБ памяти.
🔗 Ссылка - *клик*
❤6🥱2👍1🔥1🤨1
🧠 SQL-задача для профи: "Ловушка NULL в подзапросе"
Условие:
Есть две таблицы:
✔️ Задание:
Выведите всех сотрудников, которые работают в неактивных отделах.
Если department_id у сотрудника NULL, таких сотрудников выводить не нужно.
❗️Подводный камень:
Решение, которое интуитивно приходит в голову, не работает правильно:
📉 Почему это ошибка:
Если в departments есть хотя бы одна строка, где is_active = true, но id = NULL, то NOT IN (...) будет сравнивать с NULL, а NULL NOT IN (...) всегда возвращает UNKNOWN, то есть — ничего не вернёт.
✅ Правильное решение:
💡 Почему работает:
JOIN отсекает NULL по department_id сразу.
Фильтр по is_active = false работает без ловушек NULL.
Сотрудники без департамента автоматически исключаются.
🔎 Усложнение для профи:
Что произойдёт, если в таблице departments есть id = NULL, is_active = true?
Ответ: ничего — JOIN по NULL никогда не срабатывает. Но если используете NOT EXISTS, нужно быть осторожным.
🧩 Вывод:
Когда дело касается NOT IN и NULL, всегда проверяйте подзапрос. Лучше переходите на JOIN или NOT EXISTS:
📌 Запомни:
NULL ломает IN / NOT IN, но не ломает JOIN / EXISTS.
➡ SQL Community | Чат
Условие:
Есть две таблицы:
CREATE TABLE employees (
id INT PRIMARY KEY,
name TEXT,
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY,
name TEXT,
is_active BOOLEAN
);
Выведите всех сотрудников, которые работают в неактивных отделах.
Если department_id у сотрудника NULL, таких сотрудников выводить не нужно.
❗️Подводный камень:
Решение, которое интуитивно приходит в голову, не работает правильно:
SELECT *
FROM employees
WHERE department_id NOT IN (
SELECT id FROM departments WHERE is_active = true
);
📉 Почему это ошибка:
Если в departments есть хотя бы одна строка, где is_active = true, но id = NULL, то NOT IN (...) будет сравнивать с NULL, а NULL NOT IN (...) всегда возвращает UNKNOWN, то есть — ничего не вернёт.
✅ Правильное решение:
SELECT e.*
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE d.is_active = false;
💡 Почему работает:
JOIN отсекает NULL по department_id сразу.
Фильтр по is_active = false работает без ловушек NULL.
Сотрудники без департамента автоматически исключаются.
🔎 Усложнение для профи:
Что произойдёт, если в таблице departments есть id = NULL, is_active = true?
Ответ: ничего — JOIN по NULL никогда не срабатывает. Но если используете NOT EXISTS, нужно быть осторожным.
🧩 Вывод:
Когда дело касается NOT IN и NULL, всегда проверяйте подзапрос. Лучше переходите на JOIN или NOT EXISTS:
SELECT e.*
FROM employees e
WHERE EXISTS (
SELECT 1
FROM departments d
WHERE d.id = e.department_id AND d.is_active = false
);
📌 Запомни:
NULL ломает IN / NOT IN, но не ломает JOIN / EXISTS.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5❤2
🗄️ MyDumper — параллельный бэкап MySQL без головной боли. Этот инструмент делает логические дампы MySQL в 5-10 раз быстрее стандартного mysqldump за счёт многопоточной работы. Данные сохраняются в отдельных файлах для каждой таблицы, а встроенная поддержка регулярных выражений позволяет гибко выбирать, какие базы или таблицы включать в бэкап.
Разработчики интересно реализовали согласованность данных: инструмент сначала блокирует таблицы глобальным read-lock, затем создаёт транзакционные снимки для каждого потока и только потом отпускает блокировки. Для восстановления есть параллельный загрузчик myloader
🤖 GitHub
Разработчики интересно реализовали согласованность данных: инструмент сначала блокирует таблицы глобальным read-lock, затем создаёт транзакционные снимки для каждого потока и только потом отпускает блокировки. Для восстановления есть параллельный загрузчик myloader
🤖 GitHub
❤6👍2
Прописаны все виды команд JOIN, а также их визуал.
Крайне полезная штука — сохраняем.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥7❤5🏆1
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Курс SQL - от новичка до профи
🔹 Регистрация на сайте Oracle
🔹 Что такое SQL? Какие задачи решают Базы Данных?
🔹 Команды SQL: DML, DDL, DCL, TCL
🔹 Агрегатные функции SQL: MIN | MAX | AVG | SUM | COUNT
🔹 Функция GROUP BY. HAVING vs WHERE
🔹INNER JOIN. LEFT JOIN и другие... В ЧЕМ РАЗНИЦА?
🔹Подзапросы SQL Oracle | Вложенные запросы SQL
🔹Агрегатные оконные функции | Аналитические функции sql: min/max/sum/avg/count
🔹Оконные функции SQL | Аналитические функции row_number / dense_ranka
🔹 Регистрация на сайте Oracle
🔹 Что такое SQL? Какие задачи решают Базы Данных?
🔹 Команды SQL: DML, DDL, DCL, TCL
🔹 Агрегатные функции SQL: MIN | MAX | AVG | SUM | COUNT
🔹 Функция GROUP BY. HAVING vs WHERE
🔹INNER JOIN. LEFT JOIN и другие... В ЧЕМ РАЗНИЦА?
🔹Подзапросы SQL Oracle | Вложенные запросы SQL
🔹Агрегатные оконные функции | Аналитические функции sql: min/max/sum/avg/count
🔹Оконные функции SQL | Аналитические функции row_number / dense_ranka
🔥20👍2🥰1🤨1💊1