Загрузка данных


-- 1
CREATE USER nikita WITH PASSWORD '1243';

CREATE DATABASE mydb;

GRANT ALL PRIVILEGES ON DATABASE mydb TO nikita;

CREATE DATABASE store;

CREATE TABLE products
(
    id       INT,
    name     TEXT,
    quantity INT
);

INSERT INTO products (id, name, quantity)
VALUES (1, 'first product', 20);

SELECT id, name, quantity
FROM products;

SELECT *
FROM products;

UPDATE products
SET quantity=49
WHERE id = 1;

UPDATE products
SET name     = 'new name',
    quantity = 50
WHERE id = 1;

DELETE
FROM products
WHERE id = 1;

DROP DATABASE store;


-- 2

CREATE TABLE clients
(
    id          SERIAL PRIMARY KEY,
    last_name   VARCHAR(746)  NOT NULL,
    first_name  VARCHAR(2253) NOT NULL,
    middle_name VARCHAR(50),
    address     VARCHAR(50),
    phone       VARCHAR(16)
);

CREATE TABLE orders
(
    id         SERIAL PRIMARY KEY,
    order_date DATE,
    amount     NUMERIC(9, 2),
    client_id  INTEGER
);

ALTER TABLE orders
    ADD CONSTRAINT fk_client
        FOREIGN KEY (client_id)
            REFERENCES clients (id);

ALTER TABLE clients
    ADD COLUMN email VARCHAR(75);

ALTER TABLE clients
    DROP COLUMN email;

ALTER TABLE clients
    ALTER COLUMN phone TYPE VARCHAR(12);


-- 3

INSERT INTO clients
    (last_name, first_name, middle_name, address, phone)
VALUES ('Иванов', 'Иван', 'Иванович', 'Москва', '+7999999'),
       ('Петров', 'Петр', 'Петрович', 'Самара', '+7999998'),
       ('Сидоров', 'Сидор', 'Сидорович', 'Казань', '+7999988');

UPDATE clients
SET address = 'Тольятти'
WHERE id = 1;

DELETE
FROM clients
WHERE id = 3;

--
COPY clients (last_name, first_name, middle_name, address, phone)
    FROM '/tmp/clients_import.csv'
    WITH (FORMAT csv, HEADER true);


-- 4
SELECT *
FROM clients;

SELECT *
FROM orders
WHERE order_date >= '2019-01-01'
  AND order_date < '2020-01-01';

SELECT *
FROM clients
WHERE last_name = 'Иванов';

SELECT DISTINCT last_name
FROM clients;


-- 5
SELECT *
FROM clients
WHERE address LIKE '%Москва%';

SELECT *
FROM clients
ORDER BY last_name, first_name;

SELECT *
FROM orders
ORDER BY amount DESC
LIMIT 5;

SELECT *
FROM clients
WHERE last_name LIKE 'М%н';

SELECT o.*, c.last_name
FROM orders o
         JOIN clients c
              ON o.client_id = c.id
WHERE c.address LIKE '%Москва%';

SELECT c.address,
       SUM(o.amount) AS total_sales
FROM orders o
         JOIN clients c
              ON o.client_id = c.id
GROUP BY c.address;

SELECT *
FROM clients
WHERE id IN (SELECT client_id
             FROM orders
             WHERE amount > 1000);