-- task 1 --✅ Задача: покажи все заказы и информацию о пользователе, который их сделал. SELECT o.id AS order_id, o.order_date AS order_date, o.status AS status, u.name AS user_name, u.country AS country FROM orders o INNER JOIN users u ON u.id = o.user_id; SELECT o.id AS order_id, o.order_date AS order_date, o.status AS status, u.name AS user_name, u.country AS country FROM orders o LEFT JOIN users u ON u.id = o.user_id; /* - С какой таблицы логичнее начать: `orders` или `users`? Почему? Логичнее начать с orders потому что мы сразу отсекаем пользователей, которые не делали заказ. Написал в обоих, INNER JOIN покажет только те заказы, у которых есть пользователи. А LEFT JOIN покажет все заказы, даже там где нет пользователя. - Какой тип JOIN здесь уместнее: `INNER` или `LEFT? Напиши запрос в обоих вариантах и посмотри, где пропадут строки. */ -- task 2 --✅ Задача: покажи состав заказа 101 (что в нём купили). SELECT o.id AS order_id, p.name AS product_name, oi.quantity AS quantity, oi.price_at_purchase AS price_at_purchase FROM order_items oi INNER JOIN orders o ON o.id = oi.order_id INNER JOIN products p ON p.id = oi.product_id WHERE order_id = 101; /* Что изменится, если эту фильтрацию order_id = 101 перенести в JOIN (после ON)? как я понял, в таком случае , заказ 101 привязывается ко всем товарам потому что таблицы не соединены между собой */ --task 3 --✅ Задача: выведи все заказы и товары внутри заказов (как “чек по магазину”). SELECT o.id AS order_id, u.name AS user_name, p.name AS product_name, oi.quantity AS quantity, oi.price_at_purchase AS price_at_purchase FROM orders o INNER JOIN order_items oi ON o.id = oi.order_id INNER JOIN products p ON oi.product_id = p.id INNER JOIN users u ON u.id = o.user_id; /***❓ Ответь на вопросы:** - почему после JOIN заказ `3` появляется в нескольких строках; потому что внутри заказа 3 несколько позиций товаров - чем результат отличается от задания 2 (по количеству строк и информации). во второй задаче нужно было вывести информацию только по 101 заказу, здесь по всем. и плюс указали кто купил и какое количество товаров */ --task 4 --✅ Задача: вывести список всех пользователей и их заказы. SELECT u.name AS user_name, o.id AS order_id, o.status AS status FROM users u FULL JOIN orders o ON o.user_id = u.id; /* **✅ После выполнения:** Найди глазами пользователя без заказов (у него **`order_id`** будет **`NULL`**); Таких имен найдено 3 штуки Чем этот запрос отличается от такого же, но с **`INNER JOIN`**? Иннер джоин в таком случае бы просто удалил из выдачи данные с NULL, то есть показал бы только пользователей с заказами, а остальных бы скрыл */ --task 5 --✅ Задача: найти пользователей, у которых нет ни одного заказа. SELECT o.user_id AS user_id, u.name AS user_name FROM orders o FULL JOIN users u ON o.user_id = u.id WHERE user_id IS NULL; /* **❓ Ответь на вопросы:** Почему тут важно фильтровать именно по колонке из **`orders`**, а не из **`users`**? Фильтровать нужно по orders потому что в принципе в системе есть люди, которые имеют и не имеют заказы, соответственно при выдаче запроса мы увидим , что некоторые пользователи не имеют заказов, поэтому и фильтруем по заказам, чтобы получить имена */ --task 6 --✅ Задача: найти все заказы, где встречается товар Kindle. SELECT oi.order_id AS order_id, u.name AS user_name, p.name AS product_name, oi.quantity AS quantity FROM order_items oi FULL JOIN orders o ON o.id = oi.order_id FULL JOIN users u ON o.user_id = u.id FULL JOIN products p ON p.id = oi.product_id WHERE p.name = 'Kindle'; /*Ответь на вопросы:** - Почему заказ `2` встречается в выдаче один раз? Потому что внутри 2го заказа только 1 товар */ --task 7 --✅ Задача: вывести все товары и информацию о том, в каких заказах они --встречаются (если товар не покупали — тоже показать). SELECT p.name AS product_name, oi.order_id AS order_id, oi.quantity AS quantity FROM order_items oi FULL JOIN orders o ON o.id = oi.order_id FULL JOIN products p ON p.id = oi.product_id /*❓ Ответь на вопросы: что будет в order_id, если товар ни разу не покупали? - в order_id будет NULL если товар ни разу не покупали чем это отличается от варианта, если использовать INNER JOIN? если использовать иннер, то в таком случае мы могли бы потерять из выборки те заказы, которые не покупали */ --task 8 SELECT oi.order_id AS order_id, u.name AS user_name, p.name AS product_name, oi.quantity AS quantity, oi.price_at_purchase AS price_at_purchase FROM order_items oi FULL JOIN orders o ON o.id = oi.order_id FULL JOIN products p ON p.id = oi.product_id FULL JOIN users u ON u.id = o.user_id WHERE o.status = 'paid'; /**❓ Ответь на вопросы:** - что будет, если условие **`status = 'paid'`** написать в **`JOIN`** с **`orders`** (там же, где **`ON`**)? Изменится ли результат сейчас и почему? В таком случае все задублируется */ --task 9 --Задание 9: Заказы пользователя Alice (все товары внутри) SELECT oi.order_id AS order_id, o.order_date AS order_date, p.name AS product_name, oi.quantity AS quantity, oi.price_at_purchase AS price_at_purchase FROM order_items oi FULL JOIN orders o ON o.id = oi.order_id FULL JOIN products p ON p.id = oi.product_id FULL JOIN users u ON u.id = o.user_id WHERE u.name = 'Alice'; /**❓ Ответь на вопросы:** - если у Alice нет ни одного заказа, сколько строк вернёт твой запрос и почему? В таком случае вернет 0 строк.*/ --task 10 --Задание 10: Заказы без товаров (проверка целостности) SELECT oi.order_id AS order_id, o.user_id AS user_id, o.status AS status, u.name AS name FROM order_items oi FULL JOIN orders o ON o.id = oi.order_id FULL JOIN products p ON p.id = oi.product_id FULL JOIN users u ON u.id = o.user_id; /* **❓ Ответь на вопросы:** - Что будет, если вместо **`LEFT JOIN`** написать **`INNER JOIN`** — изменится ли результат и как. В таком случае, пропаду пустые строки */