Перейти к содержимому
TelegramGitHub

INNER JOIN

INNER JOIN оставляет только строки, у которых нашлась пара в обеих таблицах. Это тип соединения по умолчанию. В уроке работаем с benn.college_football_players и benn.college_football_teams.

Запись JOIN и INNER JOIN — одно и то же.

SELECT players.player_name,
teams.conference
FROM benn.college_football_players players
INNER JOIN benn.college_football_teams teams
ON teams.school_name = players.school_name;

Правила:

  • Игрок, чьей школы нет в таблице команд, не попадёт в результат.
  • Команда, у которой нет игроков, тоже не попадёт.
  • Это пересечение двух таблиц.

Если в таблице команд три строки с одним названием школы, каждый игрок этой школы появится три раза. Строки умножаются.

В наших данных у каждого игрока есть команда. Поэтому INNER JOIN вернёт все 6935 строк.

В обеих таблицах есть столбец school_name. Если взять players.* и teams.*, в результате будет два столбца с одним именем. Это неудобно.

SELECT players.*,
teams.*
FROM benn.college_football_players players
JOIN benn.college_football_teams teams
ON teams.school_name = players.school_name
LIMIT 5;

Чтобы избежать путаницы, называйте столбцы через AS:

SELECT players.school_name AS players_school_name,
teams.school_name AS teams_school_name
FROM benn.college_football_players players
JOIN benn.college_football_teams teams
ON teams.school_name = players.school_name
LIMIT 5;

Решайте сами, без AI. Сначала напишите запрос, потом сверьтесь с проверкой, и только потом открывайте решение.

Напишите запрос, который покажет имена игроков, названия школ и конференции для школ из дивизиона FBS (Division I-A Teams).

Проверка: 5089 строк. Среди строк есть: Jamal Sullivan, Alabama, Southeastern.

Решение
SELECT players.player_name,
players.school_name,
teams.conference
FROM benn.college_football_players players
JOIN benn.college_football_teams teams
ON teams.school_name = players.school_name
WHERE teams.division = 'FBS (Division I-A Teams)';

Посчитайте игроков в каждом дивизионе.

Проверка: 2 строки: FBS (Division I-A Teams) — 5089, FCS (Division I-AA Teams) — 1846.

Решение
SELECT teams.division,
COUNT(*) AS players
FROM benn.college_football_players players
INNER JOIN benn.college_football_teams teams
ON teams.school_name = players.school_name
GROUP BY teams.division
ORDER BY teams.division;