diff --git a/pmikhailov/postgresql/.project b/pmikhailov/postgresql/.project new file mode 100644 index 0000000..92f941b --- /dev/null +++ b/pmikhailov/postgresql/.project @@ -0,0 +1,11 @@ + + + postgresql + + + + + + + + diff --git a/pmikhailov/postgresql/joins.sql b/pmikhailov/postgresql/joins.sql new file mode 100644 index 0000000..e83b069 --- /dev/null +++ b/pmikhailov/postgresql/joins.sql @@ -0,0 +1,158 @@ +/* Задача 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.user_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.user_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'; \ No newline at end of file