Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 239новых вакансий за сутки·75 016вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании6 548
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 400 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python14 623
  • Облачные технологии10 965
  • QA вакансии3 255
  • Backend вакансии1 723
  • Инженер данных1 270
  • Продакт-менеджер586

Разработка

  • Android1 706
  • iOS1 579
  • AI вакансии822
  • Fullstack вакансии697
  • Frontend вакансии598
  • Mobile вакансии30

По стеку

  • Go8 025
  • Java5 176
  • Node.js1 637
  • Kotlin1 393
  • Rust1 331
  • .NET1 254
  • PHP541
  • C++384
  • C#352

DevOps и инфраструктура

  • Kubernetes6 272
  • Linux-инфраструктура4 763
  • DevOps вакансии4 564
  • Terraform / IaC3 459
  • Мониторинг и Observability1 587
  • CI/CD1 478
  • SRE458
  • Кибербезопасность127

Аналитика и данные

  • Аналитик данных683
  • Бизнес-аналитик638
  • Data Scientist622
  • Системный аналитик92

Другие направления

  • Проджект-менеджер202
  • UI/UX дизайн93
  • Ручное тестирование14

По регионам

  • Вакансии в США34 823
  • Вакансии в Европе15 244
  • Работа в России3 882
  • Вакансии в Канаде3 408

По формату

  • Удалённые вакансии54 624
  • Релокация в США34 823
  • Гибридная работа9 269
  • Офисная работа6 545

По уровню

  • Senior вакансии33 244
  • Middle вакансии15 490
  • Junior вакансии5 355

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме PostgreSQLВсе вопросы
PostgreSQLJuniorТеория

В чём разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

INNER JOIN — только совпадающие строки; LEFT JOIN — все строки левой таблицы + NULL справа; RIGHT JOIN — зеркало LEFT; FULL OUTER JOIN — все строки обеих таблиц с NULL на несовпавших сторонах.

INNER JOIN

Возвращает только строки, у которых есть совпадение в обеих таблицах. Строки без пары отбрасываются с обеих сторон.

SELECT u.name, o.id AS order_id, o.amount
FROM users u
INNER JOIN orders o ON o.user_id = u.id;
-- Пользователи без заказов НЕ попадут в результат
-- Заказы без пользователя (нарушение FK) тоже исключаются

Виды JOIN в PostgreSQL

JOIN — операция объединения строк из двух таблиц по условию. Тип JOIN определяет, что происходит со строками, не нашедшими пары.

LEFT JOIN (LEFT OUTER JOIN)

Возвращает все строки левой таблицы. Для строк, не нашедших пары в правой таблице, колонки правой таблицы заполняются NULL.

SELECT u.name, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;
-- Все пользователи присутствуют; у тех, кто не делал заказов, order_id = NULL

-- Частый паттерн: найти пользователей БЕЗ заказов
SELECT u.name
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;

RIGHT JOIN (RIGHT OUTER JOIN)

Зеркало LEFT JOIN — возвращает все строки правой таблицы. На практике почти всегда заменяется LEFT JOIN с переставленными таблицами — это удобнее для чтения.

SELECT u.name, o.id AS order_id
FROM users u
RIGHT JOIN orders o ON o.user_id = u.id;
-- Все заказы присутствуют; у «осиротевших» заказов name = NULL

-- Эквивалентно:
SELECT u.name, o.id AS order_id
FROM orders o
LEFT JOIN users u ON u.id = o.user_id;

FULL OUTER JOIN

Объединяет LEFT и RIGHT JOIN: возвращает все строки из обеих таблиц. Несопоставленные строки с каждой стороны дополняются NULL.

SELECT u.name, o.id AS order_id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id;
-- Пользователи без заказов: order_id = NULL
-- Заказы без пользователей: name = NULL

-- Найти несоответствия с обеих сторон:
SELECT u.name, o.id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id
WHERE u.id IS NULL OR o.id IS NULL;

CROSS JOIN

Декартово произведение — каждая строка первой таблицы соединяется с каждой строкой второй. Без условия ON/WHERE результат содержит N*M строк.

-- Все комбинации размеров и цветов
SELECT s.name AS size, c.name AS color
FROM sizes s
CROSS JOIN colors c;

Визуальная схема

  • INNER: пересечение двух множеств.
  • LEFT: левое множество целиком + пересечение.
  • RIGHT: правое множество целиком + пересечение.
  • FULL OUTER: объединение обоих множеств.

Подводные камни

  • Условие в WHERE превращает LEFT JOIN в INNER JOIN: LEFT JOIN ... WHERE right.col = 'x' отфильтрует строки с NULL. Фильтр по правой таблице нужно перенести в ON.
  • При декартовом произведении (забытое условие ON в CROSS JOIN или неявный JOIN через запятую) результат взрывается экспоненциально.
  • FULL OUTER JOIN работает медленно на больших таблицах: PostgreSQL не может использовать nested loop; чаще применяется hash join или merge join.
  • Дублирование строк: если в правой таблице несколько записей совпадают с одной записью в левой, левая строка будет повторена — неожиданное поведение при агрегации.
  • USING (column) вместо ON t1.col = t2.col удобно, но скрывает оригинальное имя таблицы — SELECT * вернёт колонку только один раз.
  • NULL != NULL: условие ON t1.col = t2.col не совпадёт, если обе колонки NULL; используйте IS NOT DISTINCT FROM для сравнения с учётом NULL.

Типичные ошибки

  • Отвечать про inner/left/right/full outer join как про абстрактный SQL без учета MVCC, WAL, planner или конкретной версии PostgreSQL.
  • Переносить поведение MySQL или ClickHouse на PostgreSQL без проверки документации.
  • Не связывать механизм с последствиями для индексов, транзакций, блокировок или эксплуатации.
  • Показывать синтаксис, который не поддерживается PostgreSQL.

Что проверяет интервьюер

  • Кандидат объясняет inner/left/right/full outer join через реальный механизм PostgreSQL, а не общими словами.
  • Приводит корректный SQL или диагностический запрос для этой СУБД.
  • Называет ограничения, версионные отличия или эксплуатационные последствия.
  • Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.

Как вы знаете этот вопрос?

Проверить себя по теме PostgreSQL →

Источники

  • https://www.postgresql.org/docs/current/queries-table-expressions.html
←Предыдущий вопросЧто такое MVCC (Multi-Version Concurrency Control) и как PostgreSQL его реализует?Следующий вопрос→Что такое EXPLAIN и EXPLAIN ANALYZE и как их использовать для оптимизации запросов?

Связанные темы

PostgreSQLrelational-modelingsql-querying

Вакансии с этим навыком

PostgreSQL вакансии
  • Middle Full-Stack Developer (C#/.NET)
  • Middle Full-Stack разработчик (C#/.NET)
  • DevOps Engineer
  • Senior Software Engineer
  • Lead Cloud Engineer (Azure) — Interview Experts Needed (#5499)

Частые вопросы на собеседовании

  • Что делает VACUUM, VACUUM FULL, ANALYZE? Чем они отличаются и какой когда применять?
  • Какие уровни изоляции есть и чем отличаются (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)? Какой по умолчанию в Postgres?
  • Что такое PITR и чем pg_dump отличается от base backup + WAL archive?
  • Каковы типы индексов в PostgreSQL (B-tree, Hash, GIN, GiST, BRIN)?