Здравствуйте!
Поддержка не сможет помочь с вопросами, связанными с теорией или задачам из курса «Системный аналитик» — в этой ситуации рекомендуем вам обратиться к вашему преподавателю в чате в Slack.
Если же у вас возникнут иные вопросы — обязательно пишите, будем рады помочь :)
INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN.INNER JOIN. Задача, которую мы будем решать, звучит так:invoice содержит информацию о заказах, а таблица client хранит данные о пользователях: их фамилии, имена и адреса. Таблица client связана с таблицей invoice полем customer_id, в котором указан идентификатор покупателя. В таблице client это поле — первичный ключ, а в таблице invoice — внешний.invoice и client. client найдётся соответствие в таблице с заказами invoice. В прошлом уроке вы узнали, что тип объединения INNER JOIN включит в итоговую таблицу только те данные, которые являются общими для двух таблиц. Если нужно исключить фамилии пользователей без заказов и идентификаторы пользователей без фамилий — оператор INNER JOIN подойдёт. INNER JOIN — полная запись. Можно использовать короткую форму — JOIN. И в том и в другом случае результат будет одинаковым.first_name и last_name из таблицы client, а также поле total из таблицы invoice. Без поля с суммой заказа не узнать, какие пользователи оформили самые крупные заказы. Объединить таблицы invoice и client можно с помощью общего поля customer_id. SELECT c.first_name,
c.last_name,
i.total
FROM invoice AS i
INNER JOIN client AS c ON i.customer_id = c.customer_id
LIMIT 10; SELECT, можно не переименовывать — у них понятные названия. Перед каждым полем нужно добавить псевдоним для таблицы — иначе не разобраться, в какой из двух таблиц находится нужное поле.FROM, добавив псевдоним i. Если тип объединения — INNER JOIN, порядок, в котором указывают таблицы, не важен. Результат слияния не поменяется. INNER JOIN можно указать вторую таблицу, добавив после ключевого слова ON условие для соединения. Это условие определяет, как будут сравниваться две таблицы. В запросе внешний ключ таблицы invoice сопоставляется с первичным ключом таблицы client....
FROM таблица_1
INNER JOIN таблица_2 ON таблица_1.поле=таблица_2.поле -- первое присоединение
INNER JOIN таблица_3 ON таблица_1.поле=таблица_3.поле -- второе присоединение
... invoice и client.| first_name | last_name | total |
|---|---|---|
| Luís | Gonçalves | 3.98 |
| Luís | Gonçalves | 3.96 |
| Luís | Gonçalves | 5.94 |
| Luís | Gonçalves | 0.99 |
| Luís | Gonçalves | 1.98 |
| Luís | Gonçalves | 13.86 |
| Luís | Gonçalves | 8.91 |
| Leonie | Köhler | 1.98 |
| Leonie | Köhler | 13.86 |
| Leonie | Köhler | 8.91 |
SELECT c.first_name,
c.last_name,
MIN(i.total) AS min_cost,
MAX(i.total) AS max_cost,
ROUND(AVG(i.total), 2) AS average_cost,
COUNT(i.total) AS total_purchases
FROM invoice AS i
INNER JOIN client AS c ON i.customer_id = c.customer_id
WHERE i.billing_country = 'USA'
GROUP BY first_name, last_name
ORDER BY average_cost DESC
LIMIT 10; | first_name | last_name | min_cost | max_cost | average_cost | total_purchases |
|---|---|---|---|---|---|
| Richard | Cunningham | 0.99 | 23.86 | 6.80 | 7 |
| Frank | Ralston | 0.99 | 13.86 | 6.23 | 7 |
| Julia | Barnett | 0.99 | 15.86 | 6.23 | 7 |
| Victor | Stevens | 0.99 | 13.86 | 6.09 | 7 |
| Jack | Smith | 0.99 | 13.86 | 5.66 | 7 |
| Dan | Miller | 0.99 | 13.86 | 5.66 | 7 |
| Heather | Leacock | 0.99 | 13.86 | 5.66 | 7 |
| Tim | Goyer | 1.98 | 13.86 | 5.52 | 7 |
| Michelle | Brooks | 0.99 | 13.86 | 5.37 | 7 |
| John | Gordon | 0.99 | 13.86 | 5.37 | 7 |
first_name и last_name. Ведь фамилии пользователей могут повторяться. С помощью условия WHERE i.billing_country = 'USA' отобрали пользователей из США. Отсортировав таблицу по средней сумме заказа от большего к меньшему, можно получить нужный список.track со всеми треками в магазине и invoice_line с купленными треками. INNER JOIN. После ключевого слова ON укажите поля, по которым нужно объединить таблицы: t.track_id=i.track_id.playlist_id. Такое поле можно получить из таблицы playlist_track. В этой таблице собраны идентификаторы плейлистов и треков (поле track_id). Условие остаётся прежним: если идентификаторы треков не совпадают во всех трёх таблицах, такие треки не должны войти в итоговую таблицу. Выведите первые 20 записей.INNER JOIN. Объедините таблицы по полю track_id.playlist. Таблица содержит поле playlist_id с идентификатором плейлиста и поле name — с его названием. Добавьте в итоговую таблицу поле name. Условия те же: данные без совпадения не должны попасть в таблицу. Ограничьте вывод первыми 20 записями.INNER JOIN и объедините таблицы по полю playlist_id.playlist_name с названием плейлиста и total_revenue с суммарной стоимостью. Отсортируйте данные по значению в поле total_revenue от большего к меньшему.xxxxxxxxxxSELECT p.name AS playlist_name, SUM(i.unit_price) AS total_revenue-- укажите нужные поляFROM track AS tINNER JOIN invoice_line AS i ON t.track_id=i.track_idINNER JOIN playlist_track AS pl ON t.track_id=pl.track_idINNER JOIN playlist AS p ON pl.playlist_id = p.playlist_idGROUP BY playlist_nameORDER BY total_revenue DESC;| playlist_name | total_revenue |
|---|---|
| Music | 4215.42 |
| 90’s Music | 944.46 |
| TV Shows | 441.78 |
| Classical | 40.59 |
| Brazilian Music | 26.73 |
| Heavy Metal Classic | 21.78 |
| Classical 101 - Deep Cuts | 18.81 |
| Classical 101 - Next Steps | 14.85 |
| Classical 101 - The Basics | 6.93 |
| Grunge | 6.93 |