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


Окей, давай спокойно и по шагам. Ничего страшного, что потерялся — сейчас разложу всё по полочкам.

---

Общий план

Ты сейчас в DBeaver, у тебя есть структура таблиц (CREATE TABLE). Чтобы выполнить задания из практики, нужно:

1. Создать таблицы
2. Заполнить их данными (Категории, Товары, Покупки, Детализация)
3. Выполнить 5 запросов из практики

Это три отдельных этапа. Не смешивай их.

---

Этап 1. Создать таблицы

В DBeaver:

1. Открой SQL Editor (правой кнопкой по подключению → SQL Editor → New SQL script).
2. Вставь весь этот код:

```sql
CREATE TABLE Categories (
    CategoryID   INTEGER PRIMARY KEY,
    CategoryName TEXT,
    Description  TEXT
);

CREATE TABLE Goods (
    GoodsID          INTEGER PRIMARY KEY,
    GoodsName        TEXT,
    DetailedTracking INTEGER
);

CREATE TABLE Spendings (
    SpendingID   INTEGER PRIMARY KEY,
    CategoryID   INTEGER,
    ShopName     TEXT,
    TotalSum     REAL,
    SpendingDate TEXT
);

CREATE TABLE Goods_Spendings (
    GoodsSpendingID INTEGER PRIMARY KEY,
    SpendingID      INTEGER,
    GoodsID         INTEGER,
    Quantity        REAL,
    Amount          REAL
);
```

3. Нажми Alt+X (выполнить весь скрипт).
4. Слева в дереве должны появиться 4 таблицы.

Если пишет «table already exists» — значит таблицы уже есть, этот шаг можно пропустить.

---

Этап 2. Заполнить таблицы данными

Открой новый SQL Editor и вставь это:

```sql
-- Категории
INSERT INTO Categories VALUES
 (1,'Семья','Семейные дела'),
 (2,'Дом','Дела по дому'),
 (3,'Своё дело','Работа и бизнес'),
 (4,'Отдых','Развлечения');

-- Товары
INSERT INTO Goods VALUES
 (1, 'Пиво',     1),
 (2, 'Вино',     1),
 (3, 'Кофе',     1),
 (4, 'Хлеб',     0),
 (5, 'Молоко',   0),
 (6, 'Сыр',      0),
 (7, 'Шоколад',  1);

-- Покупки
INSERT INTO Spendings VALUES
 (1, 1, 'Пятёрочка', 1500, '2015-05-20'),
 (2, 3, 'Лента',      800, '2015-06-03'),
 (3, 2, 'Ozon',      2500, '2015-06-10'),
 (4, 4, 'Магнит',    1200, '2015-06-15');

-- Детализация покупок (какой товар в какой покупке)
INSERT INTO Goods_Spendings VALUES
 (1, 1, 1, 6, 600),   -- Пиво в покупке 1
 (2, 1, 4, 2, 100),   -- Хлеб в покупке 1
 (3, 2, 3, 1, 700),   -- Кофе в покупке 2
 (4, 3, 2, 2, 1600),  -- Вино в покупке 3
 (5, 4, 7, 3, 900);   -- Шоколад в покупке 4
```

Выполни Alt+X. Проверь:

```sql
SELECT * FROM Goods;
SELECT * FROM Spendings;
SELECT * FROM Goods_Spendings;
```

Должны увидеть строки. Если увидел — молодец, переходим к этапу 3.

---

Этап 3. Выполнить 5 заданий практики

Для каждого задания — новый SQL Editor (или просто выделяй нужный запрос мышкой и жми Ctrl+Enter, чтобы выполнить только его).

Задание 1

```sql
SELECT g.GoodsName, gs.Amount
FROM Goods g
JOIN Goods_Spendings gs ON g.GoodsID = gs.GoodsID;
```

Задание 2

```sql
SELECT c.CategoryName, s.ShopName, s.TotalSum
FROM Categories c
JOIN Spendings s ON c.CategoryID = s.CategoryID
WHERE c.CategoryID = 4;
```

Задание 3

```sql
SELECT g.GoodsName, gs.Quantity
FROM Goods g
JOIN Goods_Spendings gs ON g.GoodsID = gs.GoodsID
WHERE g.GoodsName = 'Пиво';
```

Задание 4

```sql
SELECT g.GoodsName, gs.Quantity, s.SpendingDate
FROM Goods g
JOIN Goods_Spendings gs ON g.GoodsID = gs.GoodsID
JOIN Spendings s ON s.SpendingID = gs.SpendingID
WHERE g.GoodsName = 'Пиво';
```

Задание 5

```sql
SELECT c.CategoryName, g.GoodsName, s.ShopName, s.SpendingDate
FROM Categories c
JOIN Spendings s ON c.CategoryID = s.CategoryID
JOIN Goods_Spendings gs ON s.SpendingID = gs.SpendingID
JOIN Goods g ON g.GoodsID = gs.GoodsID;
```

---

Что должно получиться

Задание Что увидишь
1 Товары и их суммы
2 Категория №4 (Отдых), магазин, сумма
3 Пиво и количество
4 Пиво, количество, дата
5 Категория, товар, магазин, дата

---

Если что-то пошло не так

· «no such table» → таблица не создана, вернись к Этапу 1.
· «no such column» → опечатка в имени столбца, сверься со структурой.
· Пустой результат → данные не вставились (Этап 2) или в условии нет подходящих строк.

Скажи, на каком именно шаге застрял — разберём точечно.