/* Задача 1 * Джойним в таком порядке т.к. не каждый юзер делал заказ * + судя по порядку колонок мы хотим анализировать заказы * (по сути выглядит так же как INNER) * Но в обратном порядке можем увидеть кто не делал заказ * и добавить их в условную рассылку */ SELECT o.id AS order_id, o.order_date, status, u."name" AS user_name, country FROM orders o LEFT JOIN users u ON o.user_id = u.id /* Задача 2 */ SELECT order_id, p."name" AS product_name, quantity, price_at_purchase FROM order_items oi LEFT JOIN products p ON oi.product_id = p.id -- AND oi.order_id = 1 из правой таблицы будут NULL там, где оба условия не выполнены WHERE order_id = 1 -- в задании другой номер - 101, надо исправить в Notion, данные на п.4 уже другие /* Задача 3 */ SELECT order_id, u."name" AS user_name, p."name" AS product_name, quantity, price_at_purchase FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id INNER JOIN users u ON o.id = u.id INNER JOIN products p ON oi.product_id = p.id; /* Задача 4 */ SELECT u."name" AS user_name, o.id AS order_id, status FROM users u LEFT JOIN orders o ON u.id = o.user_id /* Задача 5 */ SELECT o.user_id, u."name" AS user_name FROM users u LEFT JOIN orders o ON u.id = o.id WHERE o.user_id IS NOT NULL /* Задача 6 */ SELECT o.id AS order_id, u.name AS user_name, p.name AS product_name, quantity FROM orders o LEFT 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 o.user_id = u.id WHERE p."name" ILIKE '%Mi Band 7%'; /* Задача 7 */ SELECT p.name AS product_name, order_id, quantity FROM products p FULL JOIN order_items oi ON p.id = oi.product_id ORDER BY product_name; /* Задача 8 */ SELECT o.id, u."name" AS user_name, p."name" AS product_name, quantity, price_at_purchase FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id INNER JOIN users u ON o.user_id = u.id LEFT JOIN products p ON oi.product_id = p.id WHERE o.status = 'paid'; /* Задача 9 */ SELECT o.id AS order_id, o.order_date, p."name" AS product_name, quantity, price_at_purchase FROM orders o LEFT 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 o.user_id = u.id WHERE u."name" ILIKE '%alice%'; /* Задача 10 * Задача противоречит изначальным органичениям NOT NULL */ SELECT o.id AS order_id, user_id, status FROM orders o FULL JOIN order_items oi ON oi.order_id = o.id WHERE product_id IS NULL AND o.status = 'created';