--Создание таблицы для добополнительного сиропа
CREATE TABLE IF NOT EXISTS topping
(
    id SERIAL NOT NULL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    price NUMERIC(4,2) NOT NULL
);

--Создание таблицы для ингредиентов
CREATE TABLE IF NOT EXISTS ingredients
(
    id SERIAL NOT NULL PRIMARY KEY,
    name VARCHAR(52) NOT NULL,
    volume INTEGER NOT NULL
);

--Создание таблицы для должностей сотрудников
CREATE TABLE IF NOT EXISTS post
(
    id SERIAL NOT NULL PRIMARY KEY,
    title VARCHAR(50) NOT NULL,
    salary NUMERIC(10,2) NOT NULL
); 

--Создание таблицы для клиентов
CREATE TABLE IF NOT EXISTS client
(
    id SERIAL NOT NULL PRIMARY KEY,
    firstname VARCHAR(50) NOT NULL,
    name VARCHAR(50) NOT NULL,
    patronymic VARCHAR(50) NOT NULL,
    datebirth DATE NOT NULL,
    telephone VARCHAR(18) NOT NULL
);

--Создание таблицы для сотрудников
CREATE TABLE IF NOT EXISTS employee
(
    id SERIAL NOT NULL PRIMARY KEY,
    firstname VARCHAR(50) NOT NULL,
    name VARCHAR(50) NOT NULL,
    patronymic VARCHAR(50) NOT NULL,
    datebirth DATE NOT NULL,
    telephone VARCHAR(18) NOT NULL,
    post_id INTEGER NOT NULL,  
    FOREIGN KEY (post_id) REFERENCES post(id)
);

--Создание таблицы для пасспорта сотрудника 
CREATE TABLE IF NOT EXISTS passport
(
    id INTEGER NOT NULL PRIMARY KEY REFERENCES employee(id),
    SERIAL char(4) NOT NULL,
    number char(6) NOT NULL,
    who_issued VARCHAR(150) NOT NULL,
    when_issued DATE NOT NULL,
    registration VARCHAR(150) NOT NULL
);

--Создание таблицы для заказов
CREATE TABLE IF NOT EXISTS ordering
(
    id SERIAL NOT NULL PRIMARY KEY,
    registration_date DATE NOT NULL,
    end_date DATE NULL,
    status VARCHAR(50) NOT NULL,
    payment VARCHAR(50) NOT NULL,
    client_id INTEGER NOT NULL,
    FOREIGN KEY (client_id) REFERENCES client,
    employee_id INTEGER  NOT NULL,
    FOREIGN KEY (employee_id) REFERENCES employee
);

--Создание таблицы для кофе
CREATE TABLE IF NOT EXISTS coffee_drinks
(
    id SERIAL NOT NULL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    price NUMERIC(6,2) NOT NULL,
    volume INTEGER NOT NULL,
    count_coffee INTEGER NOT NULL,
    ingredients_id INTEGER NOT NULL,
    FOREIGN KEY (ingredients_id) REFERENCES ingredients,
    topping_id INTEGER NOT NULL,
    FOREIGN KEY (topping_id) REFERENCES topping,
    ordering_id INTEGER NULL,
    FOREIGN KEY (ordering_id) REFERENCES ordering
);


CREATE TABLE IF NOT EXISTS coffee_drinks_ordering
(
    coffee_drinks_id INTEGER NOT NULL REFERENCES coffee_drinks(id),
    ordering_id INTEGER NOT NULL  REFERENCES ordering(id),
    UNIQUE(ordering_id, coffee_drinks_id),
    count_coffee INTEGER NOT NULL,
    price NUMERIC(10,2) NOT NULL
);


--Ввод информации о ингредиентов
INSERT INTO ingredients(name, volume)
VALUES
('Кофе, вода', 45),
('Кофе,горячий шоколад, взбитые сливки, молоко', 35),
('Кофе, вспененное молоко', 70),
('Кофе, вода, вспененное молоко', 50),
('Кофе, вода', 25);

--Ввод информации о сиропах
INSERT INTO topping(name, price)
VALUES
('Клубничный',  62.00),
('Молочно-шоколадный', 16.00),
('Карамель', 87.00),
('Манго', 93.67),
('Малина', 55.00),
('Темный шоколад', 89.00),
('Маракуя', 98.00),
('Медовый', 54.00);

--Ввод информации о должостнях
INSERT INTO post(title, salary)
VALUES
('Директор', 998000.00),
('Менеджер', 70000.00),
('Консультант', 45000.00),
('Продавец', 25000.00),
('Техподдержка', 45000.00);

--Ввод информации о клиентов
INSERT INTO client(id, firstname, name, patronymic, datebirth, telephone)
VALUES
(1, 'Грекова', 'Таисия', 'Николаевна', '1980-06-27', '+7(958) 301-58-89'),
(2, 'Мухоморова', 'Дарья', 'Серафимовна', '1983-03-12', '+7(966) 646-30-42'),
(3, 'Шаров', 'Василий', 'Ефимович', '1997-05-12', '+7(975) 651-43-22'),
(4, 'Боярская', 'Людмила', 'Никитьевна', '1965-04-15', '+7(922) 862-69-42'),
(5, 'Дубинкин', 'Николай', 'Антонович', '1967-01-27', '+7(958) 714-59-37'),
(6, 'Гришкин', 'Роман', 'Юринович', '1967-10-02', '+7(970) 873-66-56'),
(7, 'Скосырский', 'Вячеслав', 'Максимович', '1960-06-10', '+7(972) 714-44-93'),
(8, 'Шапиро', 'Алиса', 'Григориевна', '1997-07-13', '+7(922) 845-11-37');

--Ввод информации о сотрудниках
INSERT INTO employee(id, firstname, name, patronymic, datebirth, telephone, post_id)
VALUES
(1, 'Коржукова', 'Елена', 'Степановна', '1987-03-06', '+7(921) 958-78-39', 1),
(2, 'Синдеева', 'Римма', 'Игнатьевна', '1983-01-10', '+7(947) 973-10-76', 2),
(3, 'Чичваркин', 'Серафим', 'Макарович', '1977-03-28', '+7(925) 943-71-85', 3),
(4, 'Толстокожева', 'Марьяна', 'Якововна', '1992-10-08', '+7(932) 432-32-63', 4),
(5, 'Курчатова', 'Вера', 'Геннадьевна', '1985-12-24', '+7(980) 817-79-42', 4),
(6, 'Ярославова', 'Лидия', 'Семеновна', '1992-10-11', '+7(958) 568-10-49', 4),
(7, 'Карманов', 'Алексей', 'Никанорович', '1986-04-03', '+7(915) 295-94-85', 5);

--Ввод информации о пасспорте сотрудника
INSERT INTO passport(id, serial, number, who_issued, when_issued, registration)
VALUES
(1, '4011', '468571', 'Отделением УФМС России в г. Реутов', '2018-12-07', 'Россия, г. Набережные Челны, Вишневая ул., д. 7 кв.139'),
(2, '4213', '569545', 'Управление внутренних дел по г. Бердск', '1990-08-28', 'Россия, г. Волгоград, Весенняя ул., д. 11 кв.147'),
(3, '4015', '517569', 'Отделением УФМС России по г. Псков', '2021-11-18', 'Россия, г. Благовещенск, Новоселов ул., д. 4 кв.188'),
(4, '4934', '420551', 'Отделением УФМС России по г. Одинцово', '2016-05-07', 'Россия, г. Кострома, Октябрьский пер., д. 9 кв.47'),
(5, '4375', '348134', 'Отделением УФМС России в г. Пермь', '2016-08-26', 'Россия, г. Грозный, Ленина ул., д. 9 кв.9'),
(6, '4519', '335478', 'Отделом УФМС России по г. Елец', '2015-08-16', 'Россия, г. Рубцовск, Октябрьский пер., д. 3 кв.138'),
(7, '4475', '304844', 'Отделением УФМС России в г. Салават', '2016-05-20', 'Россия, г. Новороссийск, Космонавтов ул., д. 9 кв.37');

--Ввод информации о заказе
INSERT INTO ordering( registration_date, end_date, status, payment, client_id, employee_id)
VALUES
('2023-01-13', '2023-01-13', 'Завершен', 'Онлайн', '1', '4'),
('2023-01-14', '2023-01-14', 'Завершен', 'Наличкой', '1', '4'),
('2023-01-15', '2023-01-15', 'Завершен', 'Наличкой', '1', '4'),
('2023-01-16', '2023-01-16', 'Завершен', 'Онлайн', '2', '6'),
('2023-01-17', '2023-01-17', 'Завершен', 'Онлайн', '2', '6'),
('2023-01-18', '2023-01-18', 'Завершен', 'Онлайн', '2', '6'),
('2023-01-19', '2023-01-19', 'Завершен', 'Онлайн', '2', '4'),
('2023-01-20', '2023-01-20', 'Завершен', 'Онлайн', '2', '5'),
('2023-01-21', '2023-01-21', 'Завершен', 'Наличкой', '3', '5'),
('2023-01-22', '2023-01-22', 'Завершен', 'Онлайн', '3', '4'),
('2023-01-23', '2023-01-23', 'Завершен', 'Наличкой', '3', '5'),
('2023-01-24', '2023-01-24', 'Завершен', 'Онлайн', '3', '6'),
('2023-01-25', '2023-01-25', 'Завершен', 'Наличкой', '4', '4'),
('2023-01-26', '2023-01-26', 'Завершен', 'Наличкой', '4', '5'),
('2023-01-27', '2023-01-27', 'Завершен', 'Наличкой', '4', '4'),
('2023-01-28', '2023-01-29', 'Завершен', 'Наличкой', '4', '6'),
('2023-01-30', '2023-01-31', 'Завершен', 'Онлайн', '5', '5'),
('2023-02-01', '2023-02-01', 'Завершен', 'Онлайн', '6', '4'),
('2023-02-02', '2023-02-02', 'Завершен', 'Наличкой', '7', '6'),
('2023-02-03', '2023-02-03', 'Завершен', 'Онлайн', '7', '6'),
('2023-02-04', '2023-02-04', 'Готово', 'Наличкой', '8', '5'),
('2023-02-04', '2023-02-04', 'Готовится', 'Онлайн', '1', '5'),
('2023-02-04', '2023-02-04', 'Завершен', 'Онлайн', '4', '4');

--Ввод информации о кофе
INSERT INTO coffee_drinks(name, price, volume, count_coffee, ingredients_id, topping_id)
VALUES
('Карамельный эспрессо', '157.00', '90', '1', '1', '3'),
('Медовый эспрессо', '124.00', '90', '1', '1', '8'),
('Молочно-шоколадный эспрессо', '86.00', '90', '1', '1', '2'),
('малиновое мокко', '220.00', '140', '1', '2', '3'),
('Темный шоколадное мокко', '254.00', '140', '4', '2', '6'),
('Манговый мокко', '258.67', '140', '1', '2', '4'),
('Маракуйное латте', '228.00', '140', '1', '3', '7'),
('Клубничное латте', '192.00', '140', '1', '3', '1'),
('Карамельное латте', '217.00', '140', '1', '3', '3'),
('Медовое капучино', '124.00', '150', '1', '4', '8'),
('Молочно-шоколадное капучино', '86.00', '150', '1', '4', '2'),
('Манговое капучино', '163.67', '150', '1', '4', '4'),
('Темно шоколадное американо', '199.00', '50', '1', '5', '6'),
('Молочно-шоколадное американо', '126.00', '50', '1', '5', '2'),
('Медовое американо', '164.00', '50', '1', '5', '8');

--Ввод информации о полной стоймости заказа и количества кофе
INSERT INTO coffee_drinks_ordering (coffee_drinks_id, ordering_id, count_coffee, price)
VALUES
(8, 1, 4, 768.00),
(15, 2, 3, 492.00),
(4, 3, 10, 2200.00),
(7, 4, 1, 228.00),
(9, 5, 3, 261.00),
(10, 6, 7, 868.00),
(11, 7, 8, 688.00),
(12, 8, 13, 2131.61),
(1, 9, 10, 1570.00),
(3, 10, 11, 946.00),
(2, 11, 6, 744.00),
(8, 12, 5, 960.00),
(13, 13, 4, 796.00),
(14, 14, 9, 1134.00),
(6, 15, 10, 2568.70),
(5, 16, 12, 3048.00),
(6, 17, 1, 258.67),
(4, 18, 4, 880.00),
(1, 19, 7, 1099.00),
(15, 20, 8, 1312.00),
(12, 21, 2, 327.94),
(10, 22, 9, 1116.00),
(4, 23, 6, 1320.00);

--Обновление сотрудника при помощи регулярного выражения LIKE
update employee
set id='1', name='Тимофей', firstname='Новоселов', patronymic='Дмитриевич', datebirth='1998-05-11', telephone='+7(909) 790-55-49'
WHERE name LIKE 'Елена';

--Обновление паспорта для нового сотрудника
UPDATE passport
set serial='4023', number='183858', who_issued='Отделением УФМС России по г. Керчь', when_issued='2014-08-21', registration='Россия, г. Батайск, Полевой пер., д. 12 кв.6'
WHERE 1=1;

--Удаление паспорта старого сотрудника
DELETE FROM passport 
WHERE passport.id='7';

--Удаление сотрудника
DELETE FROM employee 
WHERE employee.id='7';


--Удаление должности старого сотрудника
DELETE FROM post 
WHERE post.id='5';

--Вывод общей суммы таблицы кофе
SELECT SUM(price)
FROM coffee_drinks;

--Подсчет сколько вообщем заказов
SELECT COUNT(id)
FROM ordering;

--Вывод среднего значения по сотрудникам
SELECT AVG(price)
FROM topping;

--Вывод минимальной суммы стоймости кофе за кружку
SELECT MIN(price)
FROM coffee_drinks;

--Вывод максимальной суммы стоймости кофе за кружку
SELECT MAX(price)
FROM coffee_drinks;

--Сортировка по убыванию
SELECT * FROM employee 
ORDER BY id;

--Сортировка по возрастанию
SELECT * FROM employee 
ORDER BY id DESC;

--Сортировка по возрастанию
SELECT DISTINCT employee
FROM employee ORDER BY employee;

--Создание лимита
SELECT * FROM coffee_drinks_ordering 
ORDER BY price 
LIMIT 5 OFFSET 6;

--Вывод информации от точном клиенте
SELECT * FROM client
WHERE id = '4';

--Вывод информации без повторений
SELECT * FROM coffee_drinks_ordering
WHERE coffee_drinks_id <> '1';

--Вывод информации ordering_id №5
SELECT * FROM coffee_drinks_ordering
WHERE ordering_id != '5';

--Вывод суммы больше 1000-чи
SELECT * FROM coffee_drinks_ordering
WHERE price > 1000;

--Вывод суммы меньше 1000-чи
SELECT * FROM coffee_drinks_ordering
WHERE price < 1000;

--Вывод суммы больше или ровно 600-та
SELECT * FROM coffee_drinks_ordering
WHERE price >= 600;

--Вывод суммы меньше или ровно 600-ти
SELECT * FROM coffee_drinks_ordering
WHERE price <= 600;

--Вывод точной суммы
SELECT * FROM coffee_drinks_ordering
WHERE price = 3048;

--Использование логических операторов (AND,OR)ж
SELECT * FROM coffee_drinks_ordering
WHERE ( coffee_drinks_id = '3' OR price > 2000 )AND (coffee_drinks_id = '5' OR price > 2000);

--Вывод информации о сотрудников при использование IN
SELECT * FROM employee
WHERE name IN ('Тимофей', 'Римма', 'Вера');

--Вывод информации о сотрудников при использование NOY IN
SELECT * FROM employee
WHERE name NOT IN ('Тимофей', 'Римма', 'Вера');

--Вывод информации припомощи регулярного выражения SIMILAR TO
SELECT * FROM client
WHERE telephone NOT SIMILAR TO '\([0-9]{3}\) 555\-%' escape '\';

--Объединение таблицы и вывод только левой таблицы
SELECT employee, post AS post FROM employee
LEFT JOIN post
ON employee = post;

--Объединение таблицы и вывод только правой таблицы
SELECT employee, post AS post FROM employee
RIGHT JOIN post
ON employee = post;

--Объединение таблицы и вывод по двум таблицам
SELECT employee, post AS post FROM employee
INNER JOIN post
ON employee = post;

 

PostgreSQL online editor

Write, Run & Share PostgreSQL queries online using OneCompiler's PostgreSQL online editor and compiler for free. It's one of the robust, feature-rich online editor and compiler for PostgreSQL. Getting started with the OneCompiler's PostgreSQL editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose database as 'PostgreSQL' and start writing queries to learn and test online without worrying about tedious process of installation.

About PostgreSQL

PostgreSQL is a open source relational database system and is also knows as Postgres.

Key Features:

  • Postgres is not only free and open-source but also it is highly extensible.
  • Custom Data types and funtions from various programming languaues can be introduced and the good part is compiling entire database is not required.
  • ACID(Atomicity, Consistency, Isolation, Durability) compliant.
  • First DBMS which implemented Multi-version concurrency control (MVCC) feature.
  • It's the default database server for MacOS.
  • It supports all major operating systems like Linux, Windows, OpenBSD,FreeBSD etc.

Syntax help

1. CREATE

CREATE command is used to create a table, schema or an index.

Syntax:

         CREATE TABLE table_name (
                column1 datatype,
                column2 datatype,
                ....);

2. ALTER

ALTER command is used to add, modify or delete columns or constraints from the database table.

Syntax

ALTER TABLE Table_name ADD column_name datatype;

3. TRUNCATE:

TRUNCATE command is used to delete the data present in the table but this will not delete the table.

Syntax

TRUNCATE table table_name;

4. DROP

DROP command is used to delete the table along with its data.

Syntax

DROP TABLE table_name;

5. RENAME

RENAME command is used to rename the table name.

Syntax

ALTER TABLE table_name1 RENAME to new_table_name1; 

6. INSERT

INSERT Statement is used to insert new records into the database table.

Syntax

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

7. SELECT

Select statement is used to select data from database tables.

Syntax:

SELECT column1, column2, ...
FROM table_name; 

8. UPDATE

UPDATE statement is used to modify the existing values of records present in the database table.

Syntax

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition; 

9. DELETE

DELETE statement is used to delete the existing records present in the database table.

Syntax

DELETE FROM table_name where condition;