join tasks done

This commit is contained in:
pavel
2026-02-12 21:48:35 +01:00
parent 35283077b6
commit 1cf0709bbc
2 changed files with 158 additions and 188 deletions
+158
View File
@@ -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.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';