Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД Курсовая работа.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
897.92 Кб
Скачать
  1. Руководство пользователя

Разработанный клиент БД является web-приложением, работающим в любом современном интернет-браузере, включая мобильные платформы.

В левой части окна находится вертикальное меню с:

  • Выбором роли

  • Вводом данных

  • Редактированием данных

  • Просмотром данных

  • Операциями из задания данной работы, и отображения результатов выборок с возможностью их параметризации (ввод кол-ва чего-либо, названия, даты и пр.):

Ввод данных в таблицу продуктов

Редактирование данных в таблице продуктов

Сначала из списка выбирается нужный продукт и нажимается кнопка «Редактировать товар», затем появляется список полей выбранного товара, которые можно изменять.

Постраничный просмотр данных в таблице продуктов

На одной странице отображается по 15 продуктов, на приведенном скриншоте отображена вторая страница.

  1. Тексты запросов и примеры работы

    1. Для каждого вида товара выдать список постоянных клиентов, отсортированный:

  • По дате приобретения

SELECT

t.name as product_type,

p.name as product_name,

o.created as order_date,

c.name as client_name

FROM

zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

JOIN zf322_belich.orders as o ON o.id = otp.orders

JOIN zf322_belich.clients as c ON c.id = o.clients

ORDER BY

p.id ASC,

o.created DESC

  • В алфавитном порядке

SELECT

t.name as product_type,

p.name as product_name,

o.created as order_date,

c.name as client_name

FROM

zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

JOIN zf322_belich.orders as o ON o.id = otp.orders

JOIN zf322_belich.clients as c ON c.id = o.clients

ORDER BY

p.id ASC,

c.name ASC

  • По стоимости

SELECT

t.name as product_type,

p.name as product_name,

p.price as product_price,

o.created as order_date,

c.name as client_name

FROM

zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

JOIN zf322_belich.orders as o ON o.id = otp.orders

JOIN zf322_belich.clients as c ON c.id = o.clients

ORDER BY

p.id ASC,

p.price DESC

    1. Для каждого вида товара указать сведения о поставщике (псевдоним, адрес и т.д.)

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price,

s.name as source_name,

s.address as source_address

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

LEFT JOIN zf322_belich.sources as s ON s.id = p.sources

ORDER BY

p.price DESC

    1. Найти самый дорогой вид товара, самый старый по году, найти товары с ценой свыше 2000 р. (и любая другая сумма, т.е. предусмотреть ввод цены с клавиатуры)

  • самый дорогой

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

ORDER BY

p.price DESC

LIMIT 1

  • самый старый по году

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

ORDER BY

p.created ASC

LIMIT 1

  • товары с ценой свыше 2000 р.

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

WHERE p.price > 2000

ORDER BY

p.price ASC

  • произвольный ввод цены

SELECT t.name as product_type, p.name as product_name, p.created as product_date, p.price as product_price FROM zf322_belich.products AS p JOIN zf322_belich.types as t ON t.id = p.types WHERE p.price > $1 ORDER BY p.price ASC

    1. Найти объем продаж заданного товара

  • за квартал

SELECT

COUNT(o.created) AS count

FROM zf322_belich.products AS p

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders

WHERE p.id = 3 AND o.created BETWEEN '2016-01-01' AND '2016-04-30'

  • за год

SELECT

COUNT(o.created) AS count

FROM zf322_belich.products AS p

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders

WHERE p.id = 3 AND extract(year from o.created) = 2016

  • за этот же период среднюю цену

SELECT

round(AVG(p.price), 2) AS average_price

FROM zf322_belich.products AS p

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders

WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'

  • за этот же период самую дорогую

SELECT

MAX(p.price) AS max_price

FROM zf322_belich.products AS p

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders

WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'

  • за этот же период самую дешевую вещь

SELECT

MIN(p.price) AS min_price

FROM zf322_belich.products AS p

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders

WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'

    1. Найти товары, поставляемые заданным поставщиком (выбор поставщика), чья дата продажи находится в заданных пределах (ввод интервала)

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price,

o.created as order_date

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON otp.orders = o.id

WHERE p.sources = 2 AND o.created BETWEEN '2016-01-01' AND '2016-04-30'

    1. Найти все товары для заданного места выпуска (выбор места), чья стоимость находится в заданных пределах (ввод интервала)

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

WHERE p.places = 4 AND p.price BETWEEN 3000 AND 4000

    1. Найти долю антиквариата, проданного за определенный период (ввод периода) от общего времени продажи

SELECT

COUNT(p.id) * 100 / (SELECT COUNT(id) FROM zf322_belich.products) as percent

FROM zf322_belich.products AS p

LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

LEFT JOIN zf322_belich.orders as o ON otp.orders = o.id

WHERE o.created BETWEEN '2016-01-01' AND '2016-03-30'

    1. Найти весь товар, проступивший от заданного поставщика, чья стоимость больше, чем средняя стоимость заданного товара (выбор наименования), поступившего из заданной страны (выбор страны)

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

WHERE p.sources = 2 AND p.price > (SELECT AVG(price) as price FROM zf322_belich.products WHERE types = 2 AND places = 1)

    1. Найти долю дешевого товара (чья стоимость меньше заданной, ввод стоимости), поступившего от заданного поставщика и в целом

SELECT

SUM(CASE WHEN p.price < 2000 AND p.sources = 2 then 1 else 0 end) * 100 / count(*)||'%' as source_percent,

SUM(CASE WHEN p.price < 2000 THEN 1 else 0 end) * 100 / count(*)||'%' as total_percent

FROM zf322_belich.products as p

    1. Найти среднюю стоимость товара, проданного за определенный промежуток времени (ввод интервала)

SELECT

round(AVG(p.price), 2) as average_price

FROM zf322_belich.products as p

JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

JOIN zf322_belich.orders as o ON otp.orders = o.id

WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'

    1. Найти весь товар, чья стоимость выше, чем средняя стоимость товара заданного производителя

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

WHERE p.price > (SELECT AVG(price) as price FROM zf322_belich.products WHERE sources = 2)

    1. Найти товар, который лучше всего раскупают, указать параметры (стоимость, производитель и т.д.)

SELECT

t.name as product_type,

p.name as product_name,

p.created as product_date,

p.price as product_price,

s.name as source_name,

COUNT(p.id) total_sales

FROM zf322_belich.products AS p

JOIN zf322_belich.types as t ON t.id = p.types

JOIN zf322_belich.sources as s ON s.id = p.sources

JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id

JOIN zf322_belich.orders as o ON otp.orders = o.id

GROUP BY p.id, t.name, s.name

ORDER BY total_sales DESC

LIMIT 1