CREATE SQL. Введение
CREATE — оператор из подмножества DDL (Data Definition Language), применяемый для описания структуры данных и создания объектов базы.
В статье представлена — большая подборка «живых» сценариев: от операционных таблиц до аналитических витрин.
В экосистеме SQL объекты охватывают таблицы (TABLE), представления (VIEW), индексы (INDEX), а также ограничения целостности
(PRIMARY KEY, FOREIGN KEY REFERENCES, CHECK, NOT NULL).
Для аналитики часто используется подход AS SELECT (CTAS) — материализация результатов запроса в отдельную таблицу.
Все примеры оформлены по лучшим практикам: ключевые слова SELECT / FROM / JOIN / WHERE / GROUP BY / HAVING / ORDER BY — с новой строки, ровные отступы и выравнивание.
Синтаксис
CREATE <тип_объекта> имя_объекта [параметры];Типовая конструкция
CREATE TABLE table_name (
id INTEGER PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created DATE
);Операционные таблицы (20)
1. Карточка сотрудника с датой найма и email:
CREATE TABLE hr_employee (
employee_id INTEGER PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
hire_date DATE NOT NULL,
email VARCHAR(180)
);2. Номенклатура товаров с артикулом и ставкой НДС:
CREATE TABLE pr_product (
product_id INTEGER PRIMARY KEY,
sku VARCHAR(50) NOT NULL,
title VARCHAR(200) NOT NULL,
price DECIMAL(12,2) NOT NULL,
vat_rate DECIMAL(4,2) NOT NULL
);3. Заказ клиента с датой оформления и итогом:
CREATE TABLE ord_order (
order_id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
ordered_at TIMESTAMP NOT NULL,
grand_total DECIMAL(14,2) NOT NULL
);4. Справочник стран по ISO‑коду:
CREATE TABLE geo_country (
iso2 CHAR(2) PRIMARY KEY,
name VARCHAR(120) NOT NULL
);5. Город с привязкой к стране:
CREATE TABLE geo_city (
city_id INTEGER PRIMARY KEY,
iso2 CHAR(2) NOT NULL,
city_name VARCHAR(120) NOT NULL
);6. Аккаунт CRM с сегментом:
CREATE TABLE crm_account (
account_id INTEGER PRIMARY KEY,
name VARCHAR(200) NOT NULL,
segment VARCHAR(40)
);7. Сделка CRM со стадией и суммой:
CREATE TABLE crm_deal (
deal_id INTEGER PRIMARY KEY,
account_id INTEGER NOT NULL,
stage VARCHAR(30) NOT NULL,
amount DECIMAL(14,2) NOT NULL,
opened_at DATE NOT NULL
);8. Платёжная транзакция и способ оплаты:
CREATE TABLE pay_tx (
tx_id INTEGER PRIMARY KEY,
order_id INTEGER NOT NULL,
method VARCHAR(30) NOT NULL,
captured_at TIMESTAMP,
amount DECIMAL(14,2) NOT NULL
);9. Остаток товара на складе (по складу и товару):
CREATE TABLE wh_on_hand (
warehouse_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
qty_on_hand INTEGER NOT NULL,
PRIMARY KEY (warehouse_id, product_id)
);10. Назначение сотрудника в отдел:
CREATE TABLE org_assignment (
assignment_id INTEGER PRIMARY KEY,
employee_id INTEGER NOT NULL,
department VARCHAR(80) NOT NULL,
started_on DATE NOT NULL
);11. Публикация в блоге с автором и датой:
CREATE TABLE blog_post (
post_id INTEGER PRIMARY KEY,
title VARCHAR(200) NOT NULL,
author VARCHAR(120),
published DATE
);12. Комментарий к посту с датой создания:
CREATE TABLE blog_comment (
comment_id INTEGER PRIMARY KEY,
post_id INTEGER NOT NULL,
author VARCHAR(120) NOT NULL,
body VARCHAR(4000) NOT NULL,
created_at TIMESTAMP NOT NULL
);13. Пациент клиники с датой рождения:
CREATE TABLE med_patient (
patient_id INTEGER PRIMARY KEY,
full_name VARCHAR(140) NOT NULL,
birth_date DATE NOT NULL,
gender VARCHAR(10)
);14. Визит пациента с диагнозом:
CREATE TABLE med_visit (
visit_id INTEGER PRIMARY KEY,
patient_id INTEGER NOT NULL,
doctor_name VARCHAR(120) NOT NULL,
visited_at TIMESTAMP NOT NULL,
diagnosis VARCHAR(400)
);15. Телеметрия IoT‑датчика (метрика/значение/время):
CREATE TABLE iot_telemetry (
reading_id INTEGER PRIMARY KEY,
device_id VARCHAR(60) NOT NULL,
observed_at TIMESTAMP NOT NULL,
metric VARCHAR(40) NOT NULL,
value DECIMAL(16,6) NOT NULL
);16. Занятие с кодом курса и аудиторией:
CREATE TABLE edu_lesson (
lesson_id INTEGER PRIMARY KEY,
course_code VARCHAR(40) NOT NULL,
starts_at TIMESTAMP NOT NULL,
room VARCHAR(40)
);17. Запись студента на занятие (многие‑ко‑многим):
CREATE TABLE edu_enrollment (
student_id INTEGER NOT NULL,
lesson_id INTEGER NOT NULL,
enrolled_on DATE NOT NULL,
PRIMARY KEY (student_id, lesson_id)
);18. Приёмка на склад (inbound):
CREATE TABLE wh_inbound (
inbound_id INTEGER PRIMARY KEY,
warehouse_id INTEGER NOT NULL,
arrived_on DATE NOT NULL,
reference VARCHAR(80)
);19. Отгрузка со склада (outbound):
CREATE TABLE wh_outbound (
outbound_id INTEGER PRIMARY KEY,
warehouse_id INTEGER NOT NULL,
shipped_on DATE NOT NULL,
reference VARCHAR(80)
);20. Тариф подписки и ежемесячная стоимость:
CREATE TABLE sub_plan (
plan_code VARCHAR(20) PRIMARY KEY,
title VARCHAR(100) NOT NULL,
monthly_fee DECIMAL(10,2) NOT NULL
);Ограничения целостности (20)
21. Город ссылается на существующую страну (FK):
CREATE TABLE geo_city_ref (
city_id INTEGER PRIMARY KEY,
iso2 CHAR(2) NOT NULL,
city_name VARCHAR(120) NOT NULL,
CONSTRAINT fk_city_country
FOREIGN KEY (iso2) REFERENCES geo_country(iso2)
);22. Составной ключ: остаток на складе:
CREATE TABLE wh_item_pk (
warehouse_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
qty INTEGER NOT NULL,
CONSTRAINT pk_wh_item PRIMARY KEY (warehouse_id, product_id)
);23. Имя автора обязательно и непусто:
CREATE TABLE lib_author (
author_id INTEGER PRIMARY KEY,
name VARCHAR(160) NOT NULL,
CONSTRAINT chk_author_name CHECK (name <> '')
);24. Скидка в заказе: процент или сумма:
CREATE TABLE ord_discount (
order_id INTEGER PRIMARY KEY,
kind VARCHAR(10) NOT NULL,
value DECIMAL(8,2) NOT NULL,
CONSTRAINT chk_discount CHECK (
(kind = 'PCT' AND value BETWEEN 0 AND 100) OR
(kind = 'ABS' AND value >= 0)
)
);25. Контакт доступен: email или телефон:
CREATE TABLE crm_contact (
contact_id INTEGER PRIMARY KEY,
email VARCHAR(200),
phone VARCHAR(30),
CONSTRAINT chk_contact_reach CHECK (email IS NOT NULL OR phone IS NOT NULL)
);26. Уникальный номер полиса пациента:
CREATE TABLE med_policy (
policy_no VARCHAR(40) PRIMARY KEY,
patient_id INTEGER NOT NULL
);27. FK платежа на существующий заказ:
CREATE TABLE pay_tx_ref (
tx_id INTEGER PRIMARY KEY,
order_id INTEGER NOT NULL,
amount DECIMAL(14,2) NOT NULL,
CONSTRAINT fk_tx_order
FOREIGN KEY (order_id) REFERENCES ord_order(order_id)
);28. Валидация посещения урока (двойной FK):
CREATE TABLE edu_attendance (
student_id INTEGER NOT NULL,
lesson_id INTEGER NOT NULL,
status VARCHAR(12) NOT NULL,
CONSTRAINT pk_attend PRIMARY KEY (student_id, lesson_id),
CONSTRAINT fk_attend_student FOREIGN KEY (student_id) REFERENCES med_patient(patient_id),
CONSTRAINT fk_attend_lesson FOREIGN KEY (lesson_id) REFERENCES edu_lesson(lesson_id)
);29. Статус заказа только из предписанного множества:
CREATE TABLE ord_status (
order_id INTEGER PRIMARY KEY,
status VARCHAR(12) NOT NULL,
CONSTRAINT chk_status CHECK (status IN ('NEW','PAID','SHIPPED','CLOSED','CANCELLED'))
);30. Баланс счёта не может быть отрицательным:
CREATE TABLE fin_account (
account_id INTEGER PRIMARY KEY,
currency CHAR(3) NOT NULL,
balance DECIMAL(14,2) NOT NULL,
CONSTRAINT chk_balance_nonneg CHECK (balance >= 0)
);31. Пределы метрик IoT (min ≤ max):
CREATE TABLE iot_metric_limits (
device_id VARCHAR(60) PRIMARY KEY,
metric VARCHAR(40) NOT NULL,
min_value DECIMAL(10,4) NOT NULL,
max_value DECIMAL(10,4) NOT NULL,
CONSTRAINT chk_min_le_max CHECK (min_value <= max_value)
);32. Единственный главный офис компании (0/1):
CREATE TABLE org_office (
office_id INTEGER PRIMARY KEY,
company VARCHAR(120) NOT NULL,
is_hq INTEGER NOT NULL,
CONSTRAINT chk_is_hq CHECK (is_hq IN (0,1))
);33. Дата начала не позже даты окончания:
CREATE TABLE proj_span (
span_id INTEGER PRIMARY KEY,
starts_on DATE NOT NULL,
ends_on DATE NOT NULL,
CONSTRAINT chk_dates CHECK (starts_on <= ends_on)
);34. Отгрузка ссылается на склад:
CREATE TABLE wh_ship_ref (
shipment_id INTEGER PRIMARY KEY,
warehouse_id INTEGER NOT NULL,
shipped_on DATE NOT NULL,
CONSTRAINT fk_ship_wh FOREIGN KEY (warehouse_id) REFERENCES wh_outbound(warehouse_id)
);35. Название курса не пустое:
CREATE TABLE edu_course_chk (
code VARCHAR(40) PRIMARY KEY,
name VARCHAR(200) NOT NULL,
CONSTRAINT chk_course_name CHECK (name <> '')
);36. Контроль валюты платежа:
CREATE TABLE fin_payment_ccy (
payment_id INTEGER PRIMARY KEY,
account_id INTEGER NOT NULL,
currency CHAR(3) NOT NULL,
amount DECIMAL(14,2) NOT NULL
);37. Соответствие типа ставки НДС и значения:
CREATE TABLE tax_vat_rule (
rule_id INTEGER PRIMARY KEY,
kind VARCHAR(10) NOT NULL,
vat_rate DECIMAL(4,2) NOT NULL,
CONSTRAINT chk_vat CHECK (
(kind = 'STANDARD' AND vat_rate >= 10) OR
(kind = 'REDUCED' AND vat_rate < 10)
)
);38. Длина кода филиала ограничена:
CREATE TABLE org_branch (
branch_code VARCHAR(8) PRIMARY KEY,
name VARCHAR(120) NOT NULL
);39. Разрешённость стадии сделки (0/1):
CREATE TABLE crm_stage_rule (
rule_id INTEGER PRIMARY KEY,
stage VARCHAR(30) NOT NULL,
allowed INTEGER NOT NULL,
CONSTRAINT chk_allowed CHECK (allowed IN (0,1))
);Представления для отчётности (20)
40. Совокупная выручка по клиентам по месяцам №1:
CREATE VIEW vw_sales_month_1 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;41. Совокупная выручка по клиентам по месяцам №2:
CREATE VIEW vw_sales_month_2 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;42. Совокупная выручка по клиентам по месяцам №3:
CREATE VIEW vw_sales_month_3 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;43. Совокупная выручка по клиентам по месяцам №4:
CREATE VIEW vw_sales_month_4 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;44. Совокупная выручка по клиентам по месяцам №5:
CREATE VIEW vw_sales_month_5 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;45. Совокупная выручка по клиентам по месяцам №6:
CREATE VIEW vw_sales_month_6 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;46. Совокупная выручка по клиентам по месяцам №7:
CREATE VIEW vw_sales_month_7 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;47. Совокупная выручка по клиентам по месяцам №8:
CREATE VIEW vw_sales_month_8 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;48. Совокупная выручка по клиентам по месяцам №9:
CREATE VIEW vw_sales_month_9 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;49. Совокупная выручка по клиентам по месяцам №10:
CREATE VIEW vw_sales_month_10 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;50. Совокупная выручка по клиентам по месяцам №11:
CREATE VIEW vw_sales_month_11 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;51. Совокупная выручка по клиентам по месяцам №12:
CREATE VIEW vw_sales_month_12 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;52. Совокупная выручка по клиентам по месяцам №13:
CREATE VIEW vw_sales_month_13 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;53. Совокупная выручка по клиентам по месяцам №14:
CREATE VIEW vw_sales_month_14 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;54. Совокупная выручка по клиентам по месяцам №15:
CREATE VIEW vw_sales_month_15 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;55. Совокупная выручка по клиентам по месяцам №16:
CREATE VIEW vw_sales_month_16 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;56. Совокупная выручка по клиентам по месяцам №17:
CREATE VIEW vw_sales_month_17 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;57. Совокупная выручка по клиентам по месяцам №18:
CREATE VIEW vw_sales_month_18 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;58. Совокупная выручка по клиентам по месяцам №19:
CREATE VIEW vw_sales_month_19 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;59. Совокупная выручка по клиентам по месяцам №20:
CREATE VIEW vw_sales_month_20 AS
SELECT
o.customer_id,
DATE_TRUNC('month', o.ordered_at) AS month_start,
SUM(o.grand_total) AS revenue
FROM
ord_order AS o
GROUP BY
o.customer_id,
DATE_TRUNC('month', o.ordered_at)
ORDER BY
o.customer_id,
month_start;Индексы для производительности (15)
60. Поиск заказов по клиенту:
CREATE INDEX idx_orders_customer ON ord_order (customer_id);61. Фильтрация транзакций по методу оплаты:
CREATE INDEX idx_tx_method ON pay_tx (method);62. Посты блога по дате публикации:
CREATE INDEX idx_posts_published ON blog_post (published);63. Телеметрия по устройству:
CREATE INDEX idx_readings_device ON iot_telemetry (device_id);64. Остатки по продукту:
CREATE INDEX idx_stock_product ON wh_on_hand (product_id);65. Сделки по стадии:
CREATE INDEX idx_deals_stage ON crm_deal (stage);66. Пациенты по дате рождения:
CREATE INDEX idx_patients_birth ON med_patient (birth_date);67. Уроки по коду курса:
CREATE INDEX idx_lessons_course ON edu_lesson (course_code);68. Комментарии по посту:
CREATE INDEX idx_comments_post ON blog_comment (post_id);69. Визиты по врачу:
CREATE INDEX idx_visits_doctor ON med_visit (doctor_name);70. Офисы по компании:
CREATE INDEX idx_office_company ON org_office (company);71. Планы по стоимости:
CREATE INDEX idx_plan_fee ON sub_plan (monthly_fee);72. Энролменты по занятию:
CREATE INDEX idx_enroll_lesson ON edu_enrollment (lesson_id);73. Товары по артикулу:
CREATE INDEX idx_sku ON pr_product (sku);74. Заказы по дате:
CREATE INDEX idx_orders_date ON ord_order (ordered_at);CTAS — витрины и подготовка данных (15)
75. Витрина среднего чека клиентов №1:
CREATE TABLE mart_avg_check_1 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;76. Витрина среднего чека клиентов №2:
CREATE TABLE mart_avg_check_2 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;77. Витрина среднего чека клиентов №3:
CREATE TABLE mart_avg_check_3 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;78. Витрина среднего чека клиентов №4:
CREATE TABLE mart_avg_check_4 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;79. Витрина среднего чека клиентов №5:
CREATE TABLE mart_avg_check_5 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;80. Витрина среднего чека клиентов №6:
CREATE TABLE mart_avg_check_6 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;81. Витрина среднего чека клиентов №7:
CREATE TABLE mart_avg_check_7 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;82. Витрина среднего чека клиентов №8:
CREATE TABLE mart_avg_check_8 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;83. Витрина среднего чека клиентов №9:
CREATE TABLE mart_avg_check_9 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;84. Витрина среднего чека клиентов №10:
CREATE TABLE mart_avg_check_10 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;85. Витрина среднего чека клиентов №11:
CREATE TABLE mart_avg_check_11 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;86. Витрина среднего чека клиентов №12:
CREATE TABLE mart_avg_check_12 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;87. Витрина среднего чека клиентов №13:
CREATE TABLE mart_avg_check_13 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;88. Витрина среднего чека клиентов №14:
CREATE TABLE mart_avg_check_14 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;89. Витрина среднего чека клиентов №15:
CREATE TABLE mart_avg_check_15 AS
SELECT
o.customer_id,
AVG(o.grand_total) AS avg_check
FROM
ord_order AS o
GROUP BY
o.customer_id
ORDER BY
o.customer_id;Прикладные домены: узкие кейсы (10)
90. Финансы: учёт курсов валют по парам:
CREATE TABLE fx_rate (
rate_date DATE NOT NULL,
base_ccy CHAR(3) NOT NULL,
quote_ccy CHAR(3) NOT NULL,
rate DECIMAL(14,6) NOT NULL,
PRIMARY KEY (rate_date, base_ccy, quote_ccy)
);91. Логистика: маршрутная ведомость транспорта:
CREATE TABLE lg_route (
route_id INTEGER PRIMARY KEY,
vehicle_no VARCHAR(20) NOT NULL,
planned_on DATE NOT NULL,
driver_name VARCHAR(120) NOT NULL
);92. Кибербезопасность: лог успешных/неуспешных входов:
CREATE TABLE sec_login (
event_id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
happened TIMESTAMP NOT NULL,
ip_addr VARCHAR(64) NOT NULL,
success INTEGER NOT NULL,
CONSTRAINT chk_success CHECK (success IN (0,1))
);93. Производство: партии с контролем качества:
CREATE TABLE mfg_batch (
batch_id INTEGER PRIMARY KEY,
product_id INTEGER NOT NULL,
produced_on DATE NOT NULL,
quality VARCHAR(20) NOT NULL
);94. Маркетинг: A/B‑тесты и метрика:
CREATE TABLE mkt_ab_test (
test_id INTEGER PRIMARY KEY,
variant VARCHAR(10) NOT NULL,
launched DATE NOT NULL,
metric VARCHAR(40) NOT NULL
);95. Образование: расписание экзаменов:
CREATE TABLE edu_exam (
exam_id INTEGER PRIMARY KEY,
course VARCHAR(40) NOT NULL,
starts_at TIMESTAMP NOT NULL,
room VARCHAR(20)
);96. HR: вакансии по грейдам:
CREATE TABLE hr_vacancy (
vacancy_id INTEGER PRIMARY KEY,
title VARCHAR(140) NOT NULL,
grade VARCHAR(20) NOT NULL,
opened_on DATE NOT NULL
);97. E‑commerce: корзина покупателя:
CREATE TABLE cart_item (
item_id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
qty INTEGER NOT NULL
);98. Медицина: назначения лекарств на приёме:
CREATE TABLE med_rx (
rx_id INTEGER PRIMARY KEY,
patient_id INTEGER NOT NULL,
drug_name VARCHAR(120) NOT NULL,
dosage VARCHAR(60) NOT NULL
);99. Геоданные: точки интереса с координатами:
CREATE TABLE geo_poi (
poi_id INTEGER PRIMARY KEY,
name VARCHAR(160) NOT NULL,
latitude DECIMAL(9,6) NOT NULL,
longitude DECIMAL(9,6) NOT NULL
);Заключение
В этой статье на примере 100 «живых» сценариев показано применение create sql в операционных и аналитических задачах бизнеса.
В реальных проектах CREATE используется совместно с ALTER, DROP, TRUNCATE, а также DML‑командами (INSERT, UPDATE, DELETE).
Единый стиль кодирования и продуманные CONSTRAINT удобны для восприятия.
Понравились примеры? Сохраняйте страницу себе в закладки. Периодически планируем пополнять подборку новыми примерами.