| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- CREATE TABLE Marka (
- kod_marki SERIAL PRIMARY KEY,
- nazvanie_marki VARCHAR(100) NOT NULL
- );
- select from marka
- CREATE TABLE Model (
- id_modeli SERIAL PRIMARY KEY,
- kod_marki INT NOT NULL REFERENCES Marka(kod_marki)
- ON DELETE RESTRICT ON UPDATE CASCADE,
- kod_modeli VARCHAR(20) NOT NULL,
- nazvanie_modeli VARCHAR(100) NOT NULL
- );
- select from model
- CREATE TABLE Avtomobil (
- id_avtomobilya SERIAL PRIMARY KEY,
- id_modeli INT NOT NULL REFERENCES Model(id_modeli)
- ON DELETE RESTRICT ON UPDATE CASCADE,
- VIN_nomer CHAR(17) NOT NULL UNIQUE,
- cena DECIMAL(12,2) NOT NULL,
- klass_avtomobilya VARCHAR(50),
- tehnicheskie_dannye TEXT
- );
- SELECT COUNT(*) FROM model
- CREATE TABLE Klient (
- id_klienta SERIAL PRIMARY KEY,
- adres VARCHAR(255),
- nomer_telefona VARCHAR(20),
- gorod VARCHAR(100)
- );
- SELECT * FROM klient;
- CREATE TABLE Zakaz (
- id_zakaza SERIAL PRIMARY KEY,
- id_klienta INT NOT NULL REFERENCES Klient(id_klienta)
- ON DELETE RESTRICT ON UPDATE CASCADE,
- id_avtomobilya INT NOT NULL REFERENCES Avtomobil(id_avtomobilya)
- ON DELETE RESTRICT ON UPDATE CASCADE,
- data_pokupki DATE NOT NULL
- );
- SELECT * FROM users;
- CREATE TABLE users (
- id SERIAL PRIMARY KEY,
- login VARCHAR(50) UNIQUE NOT NULL,
- password VARCHAR(100) NOT NULL,
- role VARCHAR(20) NOT NULL
- );
- INSERT INTO users(login, password, role)
- VALUES
- ('admin', '12345', 'Администратор'),
- ('manager', '11111', 'Менеджер'),
- ('guest', '00000', 'Гость');
- --хранимая процедура по нахождению списка городов
- CREATE OR REPLACE FUNCTION GetCitiesByMarkAndPeriod(
- p_nazvanie_marki VARCHAR,
- p_date_from DATE,
- p_date_to DATE
- )
- RETURNS TABLE(gorod VARCHAR, nazvanie_marki VARCHAR, kolichestvo_zakaz BIGINT)
- LANGUAGE plpgsql
- AS $$
- BEGIN
- RETURN QUERY
- SELECT
- k.gorod,
- ma.nazvanie_marki,
- COUNT(z.id_zakaza) AS kolichestvo_zakaz
- FROM Zakaz z
- JOIN Klient k ON z.id_klienta = k.id_klienta
- JOIN Avtomobil a ON z.id_avtomobilya = a.id_avtomobilya
- JOIN Model mo ON a.id_modeli = mo.id_modeli
- JOIN Marka ma ON mo.kod_marki = ma.kod_marki
- WHERE ma.nazvanie_marki = p_nazvanie_marki
- AND z.data_pokupki BETWEEN p_date_from AND p_date_to
- GROUP BY k.gorod, ma.nazvanie_marki
- ORDER BY kolichestvo_zakaz DESC;
- END;
- $$;
- SELECT * FROM GetCitiesByMarkAndPeriod('Toyota',
- '2023-01-01',
- '2026-06-03');
- TRUNCATE TABLE zakaz RESTART IDENTITY CASCADE;
- TRUNCATE TABLE avtomobil RESTART IDENTITY CASCADE;
- TRUNCATE TABLE klient RESTART IDENTITY CASCADE;
- TRUNCATE TABLE model RESTART IDENTITY CASCADE;
- TRUNCATE TABLE marka RESTART IDENTITY CASCADE;
- SELECT COUNT(*)
- FROM zakaz
- WHERE data_pokupki BETWEEN '2023-01-01' AND '2026-06-03';
- SELECT nazvanie_marki FROM marka;
- --расчетный атрибут
- CREATE OR REPLACE VIEW vw_avtomobil AS
- SELECT
- id_avtomobilya,
- VIN_nomer,
- cena,
- cena * 1.20 AS cena_s_nds,
- klass_avtomobilya
- FROM Avtomobil;
- SELECT * FROM vw_avtomobil;
|