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


-- Создание таблицы товаров
CREATE TABLE "products" (
    "id" INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    "name" VARCHAR(255) NOT NULL,
    "price" DECIMAL(10, 2) NOT NULL,
    "category" VARCHAR(100),
    "stock" INT DEFAULT 0
);

-- Создание таблицы клиентов
CREATE TABLE "customers" (
    "id" INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    "name" VARCHAR(255) NOT NULL,
    "email" VARCHAR(255),
    "city" VARCHAR(100)
);

-- Создание таблицы заказов
CREATE TABLE "orders" (
    "id" INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    "customer_id" INT,
    "product_id" INT,
    "quantity" INT,
    "order_date" DATE,
    FOREIGN KEY ("customer_id") REFERENCES "customers"("id"),
    FOREIGN KEY ("product_id") REFERENCES "products"("id")
);




-- Заполнение таблицы товаров (id создается автоматически)
INSERT INTO "products" ("name", "price", "category", "stock") VALUES ('Смартфон Apple iPhone 13', 65000.00, 'Электроника', 10);
INSERT INTO "products" ("name", "price", "category", "stock") VALUES ('Смартфон Xiaomi Redmi Note 12', 15000.00, 'Электроника', 0); -- нет в наличии
INSERT INTO "products" ("name", "price", "category", "stock") VALUES ('Наушники беспроводные', 1200.00, 'Электроника', 15);
INSERT INTO "products" ("name", "price", "category", "stock") VALUES ('Чехол для телефона', 450.00, 'Аксессуары', 50);
INSERT INTO "products" ("name", "price", "category", "stock") VALUES ('Книга по SQL', 800.00, 'Книги', 5);
INSERT INTO "products" ("name", "price", "category", "stock") VALUES ('Кофеварка капельная', 2500.00, 'Бытовая техника', 3);

-- Заполнение таблицы клиентов
INSERT INTO "customers" ("name", "email", "city") VALUES ('Иванов Иван', 'ivanov@gmail.com', 'Москва');
INSERT INTO "customers" ("name", "email", "city") VALUES ('Петрова Анна', 'petrova@yandex.ru', 'Санкт-Петербург');
INSERT INTO "customers" ("name", "email", "city") VALUES ('Сидоров Петр', 'sidorov@mail.ru', 'Новосибирск');
INSERT INTO "customers" ("name", "email", "city") VALUES ('Кузнецова Елена', 'kuznetsova@gmail.com', 'Москва');

-- Заполнение таблицы заказов (обратите внимание на формат дат YYYY-MM-DD)
-- Предполагаем, что id товаров и клиентов начинаются с 0 или 1 (Base присвоит их по порядку)
INSERT INTO "orders" ("customer_id", "product_id", "quantity", "order_date") VALUES (0, 0, 1, '2023-05-15');
INSERT INTO "orders" ("customer_id", "product_id", "quantity", "order_date") VALUES (1, 2, 2, '2022-11-20'); -- старый заказ (до 2023)
INSERT INTO "orders" ("customer_id", "product_id", "quantity", "order_date") VALUES (2, 4, 1, '2023-01-10');
INSERT INTO "orders" ("customer_id", "product_id", "quantity", "order_date") VALUES (3, 5, 1, '2023-08-01');



Для LibreOffice Base (который использует встроенную СУБД **HSQLDB** по умолчанию) синтаксис SQL немного отличается. Главные особенности:
 1. Имена таблиц и полей в запросах Base часто требуют заключения в **двойные кавычки ""**, чтобы избежать ошибок, а текстовые значения — в **одинарные ''**.
 2. В HSQLDB вместо привычного LIMIT используется конструкция LIMIT X в конце запроса или SELECT TOP X (в зависимости от версии, но LIMIT в Base работает стабильно).
 3. Операции с датами требуют строгого формата YYYY-MM-DD.
Ниже представлены скорректированные запросы для LibreOffice Base.
### 1. Вывести все товары дороже 1000 рублей.
```sql
SELECT * FROM "products" 
WHERE "price" > 1000;

```
### 2. Вывести товары из категории "Электроника" в наличии (stock > 0).
```sql
SELECT * FROM "products" 
WHERE "category" = 'Электроника' AND "stock" > 0;

```
### 3. Вывести заказы, сделанные после 1 января 2023 года.
```sql
SELECT * FROM "orders" 
WHERE "order_date" > '2023-01-01';

```
### 4. Вывести клиентов из Москвы или Санкт-Петербурга.
```sql
SELECT * FROM "customers" 
WHERE "city" IN ('Москва', 'Санкт-Петербург');

```
### 5. Вывести топ-5 самых дорогих товаров.
```sql
SELECT * FROM "products" 
ORDER BY "price" DESC 
LIMIT 5;

```
### 6. Вывести все заказы, отсортированные по дате (новые сначала).
```sql
SELECT * FROM "orders" 
ORDER BY "order_date" DESC;

```
### 7. Вывести товары, в названии которых есть слово "Смартфон".
> **Важно:** В LibreOffice Base оператор LIKE чувствителен к регистру. Чтобы поиск работал независимо от того, написано слово с большой или маленькой буквы, лучше использовать функцию LOWER().
> 
```sql
SELECT * FROM "products" 
WHERE LOWER("name") LIKE '%смартфон%';

```
### 8. Вывести клиентов, у которых email заканчивается на @gmail.com.
```sql
SELECT * FROM "customers" 
WHERE "email" LIKE '%@gmail.com';

```
### 9. Вывести товары с ценой от 500 до 2000 рублей, отсортированные по категории.
```sql
SELECT * FROM "products" 
WHERE "price" BETWEEN 500 AND 2000 
ORDER BY "category";

```
### 10. Вывести количество товаров в каждой категории (используйте GROUP BY).
```sql
SELECT "category", COUNT(*) AS "product_count" 
FROM "products" 
GROUP BY "category";

```