RIGHT JOIN
RIGHT JOIN — зеркало LEFT JOIN. Он оставляет все строки правой таблицы. Из левой таблицы берутся только строки с парой. В уроке работаем с tutorial.crunchbase_companies и tutorial.crunchbase_acquisitions.
RIGHT JOIN и LEFT JOIN дают одно и то же
Заголовок раздела «RIGHT JOIN и LEFT JOIN дают одно и то же»Этот запрос оставляет все компании:
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_dateFROM tutorial.crunchbase_companies companiesLEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink;Поменяйте таблицы местами и замените LEFT на RIGHT. Результат тот же:
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_dateFROM tutorial.crunchbase_acquisitions acquisitionsRIGHT JOIN tutorial.crunchbase_companies companies ON companies.permalink = acquisitions.company_permalink;В обоих запросах все компании сохранены. Меняется только порядок таблиц.
Какой выбрать
Заголовок раздела «Какой выбрать»RIGHT JOINиспользуют редко. Любой запрос можно переписать черезLEFT JOIN, поменяв таблицы местами.- Принято всегда писать
LEFT JOIN. Так запрос легче читать и проверять: главная таблица всегда вFROM. - Технического запрета на
RIGHT JOINнет.
Записи LEFT OUTER JOIN и RIGHT OUTER JOIN — то же самое, что LEFT JOIN и RIGHT JOIN.
Практика
Заголовок раздела «Практика»Решайте сами, без AI. Сначала напишите запрос, потом сверьтесь с проверкой, и только потом открывайте решение.
Задание 1
Заголовок раздела «Задание 1»Перепишите запрос из урока про LEFT JOIN, где вы считали все и купленные компании по штатам. Используйте RIGHT JOIN вместо LEFT JOIN. Результат должен быть таким же.
Проверка: первая строка: CA, 12900, 1937. Вторая: MA, 2542, 396.
Решение
SELECT companies.state_code, COUNT(DISTINCT companies.permalink) AS unique_companies, COUNT(DISTINCT acquisitions.company_permalink) AS acquired_companiesFROM tutorial.crunchbase_acquisitions acquisitionsRIGHT JOIN tutorial.crunchbase_companies companies ON companies.permalink = acquisitions.company_permalinkWHERE companies.state_code IS NOT NULLGROUP BY 1ORDER BY 3 DESC;