Skip to content

Instantly share code, notes, and snippets.

@hmel1990
Created February 13, 2025 17:07
Show Gist options
  • Save hmel1990/cd2af6616dff50a5585911de58943f97 to your computer and use it in GitHub Desktop.
Save hmel1990/cd2af6616dff50a5585911de58943f97 to your computer and use it in GitHub Desktop.
DZ 2025-02-12
INNER JOINS:
1. Показать названия и категории товаров, поставщиками которых являются ООО "Паньки" или ООО «Какие люди»
SELECT p.name AS "названия товаров", c.name AS "категории товаров", s.name AS "поставщики"
FROM Product p
JOIN Category c ON p.id_category = c.id
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON s.id = d.id_supplier WHERE s.name LIKE '%бусік%' OR s.name LIKE '%картофка%'
2. Выбрать все товары с указанием их поставщика, имя производителя которых не содержит букв [АКМ], и категория которых не "Крупы"
SELECT p.name AS "названия товаров", c.name AS "категории товаров", s.name AS "поставщики"
FROM Product p
JOIN Category c ON p.id_category = c.id
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON s.id = d.id_supplier
JOIN Producer pr ON p.id_producer = pr.id
WHERE pr.name NOT LIKE '%акм%' AND c.name NOT LIKE '%крупи%' -- NOT LIKE '%а%к%м%'
3. Показать названия и категории товаров с указанием поставщика и страны производителя. Условие: страна производителя не Украина,
не Молдова и не Польша, цена поставки менее 50 гривен, а дата поставки от 10.02.2025 и по сей день
SELECT p.name AS "названия товаров", c.name AS "категории товаров", s.name AS "поставщики", ctr.name AS "странa производителя"
FROM Product p
JOIN Category c ON p.id_category = c.id
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON d.id_supplier = s.id
JOIN Producer pr ON p.id_producer = pr.id
JOIN Address a ON pr.id_address = a.id
JOIN City ct ON a.id_city = ct.id
JOIN Region r ON ct.id_region = r.id
JOIN Country ctr ON r.id_country = ctr.id
WHERE ctr.name LIKE '%Україна%'
OR ctr.name LIKE '%Молдова%'
OR ctr.name LIKE '%Польша%'
AND d.price < 50
AND d.date_of_delivery BETWEEN '2025-10-02' AND CAST (GETDATE() AS DATE)
4. Показать все кондитерские и безалкогольные товары, которых было продано более 100. Показать информацию о поставщике и производителе
SELECT p.name AS "названия товаров", c.name AS "категории товаров", s.name AS "поставщики", pr.name AS "Производитель"
FROM Product p
JOIN Category c ON p.id_category = c.id
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON d.id_supplier = s.id
JOIN Producer pr ON p.id_producer = pr.id
JOIN Sale sl ON sl.id_product = p.id
WHERE c.name LIKE '%солодощ%'
OR c.name LIKE '%напо%'
AND sl.quantity>100
5. Сделать запрос на выборку информации о поставке товаров в следующем виде: название товара и его поставщика, категории,
дата поставки и общую стоимость поставленных товаров. Условие: только трёх указанных в запросе поставщиков.
Отсортировать названия товаров в алфавитном порядке
SELECT TOP 3
p.name AS "названия товаров",
s.name AS "поставщики",
c.name AS "категории товаров",
d.date_of_delivery AS "дата поставки",
d.quantity * d.price AS "общая стоимость"
FROM
Product p
JOIN Category c ON p.id_category = c.id
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON d.id_supplier = s.id
JOIN Sale sl ON sl.id_product = p.id
ORDER BY p.name
6. Сделать запрос на выборку о продажах товаров в следующем виде: название товара и его производителя, полный адрес
(страна, город, улица) производителя в одной ячейке, категории, дате продажи и общей стоимости продажи.
Условие: выведенная информация не должна касаться двух указанных в запросе производителей.
Отсортировать общую стоимость продаж в порядке убывания
SELECT
p.name AS "названия товаров",
pr.name AS "производитель",
CONCAT (ctr.name, ', ', r.name, ', ',ct.name, ', ',a.street) AS "адрес производителя",
c.name AS "категории товаров",
sl.date_of_sale AS "дата продажи",
sl.quantity*sl.price AS "общая стоимость"
FROM
Product p
JOIN Category c ON p.id_category = c.id
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON d.id_supplier = s.id
JOIN Producer pr ON p.id_producer = pr.id
JOIN Address a ON pr.id_address = a.id
JOIN City ct ON a.id_city = ct.id
JOIN Region r ON ct.id_region = r.id
JOIN Country ctr ON r.id_country = ctr.id
JOIN Sale sl ON sl.id_product = p.id
WHERE pr.name NOT LIKE '%Pepsi%' AND pr.name NOT LIKE '%Coca-Cola%'
ORDER BY "общая стоимость" DESC
=======================================================================================================================
OUTER JOINS:
1. Показать названия товаров и их производителей, но и в том числе тех производителей, у которых нет товаров
SELECT
p.name AS "названия товаров",
pr.name AS "производитель"
FROM Product p RIGHT JOIN Producer pr
ON p.id_producer = pr.id
2. Показать только те категории, к которым не относится ни один товар
SELECT
c.name AS "категории товаров"
FROM Product p
RIGHT JOIN Category c ON p.id_category = c.id
WHERE p.id IS NULL
3. Показать названия товаров, даты их поставки и поставщиков, в том числе тех поставщиков, которые ничего не успели поставить
SELECT
p.name AS "названия товаров",
d.date_of_delivery AS "дата поставки",
s.name AS "поставщики"
FROM
Product p
JOIN Delivery d ON d.id_product = p.id
RIGHT JOIN Supplier s ON d.id_supplier = s.id
ORDER BY p.name
4. Показать области (регионы), в которых нет ни одного производителя (EXCEPT)
SELECT
r.name AS "Области"
FROM Region r
EXCEPT
SELECT
r.name
FROM Region r
JOIN City ct ON ct.id_region = r.id
JOIN Address a ON a.id_city = ct.id
JOIN Producer pr ON pr.id_address = a.id
5. Показать те названия категорий, где нет товаров фирмы ООО «Нли Ю» (EXCEPT)
SELECT
с.name AS "Категория"
FROM Category с
EXCEPT
SELECT
c.name
FROM Category c
JOIN Product p ON p.id_category = c.id WHERE p.name LIKE '%Нли Ю%'
6. Показать производителей, которые не выпускают продукты молочной категории (EXCEPT)
SELECT
pr.name AS "Производители"
FROM Producer pr
EXCEPT
SELECT
pr.name
FROM Producer pr
JOIN Product p ON p.id_producer = pr.id
JOIN Category c ON p.id_category = c.id
WHERE c.name LIKE '%молоч%'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment