


Вот вопрос из сложной ситуации с sql1
Разработать информационную систему содержащую базу данных и клиентское приложение «Платный прием в поликлинике»
Создать БД. Список таблиц: врачи, пациенты, прием пациентов
Список полей: ФИО врача, специальность врача, стоимость приема, процент отчисления на зарплату, фамилия пациента, имя пациента, отчество пациента, дата рождения пациента, адрес пациента, дата приема
Создать запросы:
Выбирает из таблицы ВРАЧИ информацию о врачах, имеющих конкретную специальность (например, хирург).
Выбирает из таблицы ПАЦИЕНТЫ информацию о пациентах с заданной датой рождения. Дата рождения вводится при выполнении запроса.
Выполняет группировку по полю Дата приема. Для каждой даты вычисляет среднюю стоимость приема.
Создает таблицу ВРАЧИ_ТЕРАПЕВТЫ, содержащую информацию о врачах-терапевтах.
Вторая часть
-- БИЛЕТ 4: Учет нарушений ПДД
USE master;
GO
IF DB_ID('ticket4') IS NOT NULL DROP DATABASE ticket4;
GO
CREATE DATABASE ticket4;
GO
USE ticket4;
GO
-- Создание таблиц
CREATE TABLE автомобили (
id_авто INT PRIMARY KEY IDENTITY(1,1),
модель NVARCHAR(50) NOT NULL,
год_выпуска INT NOT NULL,
госномер NVARCHAR(15) NOT NULL UNIQUE,
страховая_стоимость DECIMAL(12,2) NOT NULL,
фио_владельца NVARCHAR(100) NOT NULL,
паспорт_владельца NVARCHAR(20) NOT NULL
);
CREATE TABLE виды_нарушений (
id_нарушения INT PRIMARY KEY IDENTITY(1,1),
вид_нарушения NVARCHAR(100) NOT NULL,
размер_штрафа DECIMAL(8,2) NOT NULL
);
CREATE TABLE факты_нарушений (
id_факта INT PRIMARY KEY IDENTITY(1,1),
id_авто INT NOT NULL FOREIGN KEY REFERENCES автомобили(id_авто),
id_нарушения INT NOT NULL FOREIGN KEY REFERENCES виды_нарушений(id_нарушения),
дата_нарушения DATE NOT NULL,
фио_водителя NVARCHAR(100) NOT NULL
);
-- Запросы
-- a. Автомобили по году выпуска
SELECT * FROM автомобили WHERE год_выпуска = 2000;
-- b. Автомобиль по госномеру
SELECT * FROM автомобили WHERE госномер = 'В123ВС77';
-- c. Средняя страховая стоимость по моделям
SELECT
модель,
AVG(страховая_стоимость) AS средняя_стоимость
FROM автомобили
GROUP BY модель;
-- d. Создание таблицы дорогих автомобилей
SELECT * INTO дорогие_автомобили
FROM автомобили WHERE страховая_стоимость > 500000;
-- БИЛЕТ 5: Туристическое агентство
USE master;
GO
IF DB_ID('ticket5') IS NOT NULL DROP DATABASE ticket5;
GO
CREATE DATABASE ticket5;
GO
USE ticket5;
GO
-- Создание таблиц
CREATE TABLE клиенты (
id_клиента INT PRIMARY KEY IDENTITY(1,1),
фио_клиента NVARCHAR(100) NOT NULL,
паспорт_данные NVARCHAR(100) NOT NULL
);
CREATE TABLE маршруты (
id_маршрута INT PRIMARY KEY IDENTITY(1,1),
страна NVARCHAR(50) NOT NULL,
цель_поездки NVARCHAR(50) NOT NULL,
стоимость_дня DECIMAL(10,2) NOT NULL,
транспортные_услуги DECIMAL(10,2) NOT NULL,
стоимость_визы DECIMAL(8,2) NOT NULL
);
CREATE TABLE поездки (
id_поездки INT PRIMARY KEY IDENTITY(1,1),
id_клиента INT NOT NULL FOREIGN KEY REFERENCES клиенты(id_клиента),
id_маршрута INT NOT NULL FOREIGN KEY REFERENCES маршруты(id_маршрута),
дата_начала DATE NOT NULL,
количество_дней INT NOT NULL
);
-- Запросы
-- a. Маршруты в конкретную страну
SELECT * FROM маршруты WHERE страна = 'Германия';
-- b. Поездки по длительности пребывания
SELECT
клиенты.фио_клиента,
маршруты.страна,
маршруты.цель_поездки,
поездки.дата_начала,
поездки.количество_дней
FROM поездки
JOIN клиенты ON поездки.id_клиента = клиенты.id_клиента
JOIN маршруты ON поездки.id_маршрута = маршруты.id_маршрута
WHERE поездки.количество_дней BETWEEN 7 AND 14;
-- c. Минимальная и максимальная стоимость транспорта по странам
SELECT
страна,
MIN(транспортные_услуги) AS мин_транспорт,
MAX(транспортные_услуги) AS макс_транспорт
FROM маршруты
GROUP BY страна;
-- d. Обновление стоимости для лечения (+10%)
SELECT * INTO копия_маршруты FROM маршруты;
UPDATE копия_маршруты
SET стоимость_дня = стоимость_дня * 1.1
WHERE цель_поездки = 'лечение';
Вот твои ответы
-- БИЛЕТ 1: Платный прием в поликлинике
USE master;
GO
IF DB_ID('ticket1') IS NOT NULL DROP DATABASE ticket1;
GO
CREATE DATABASE ticket1;
GO
USE ticket1;
GO
-- Создание таблиц
CREATE TABLE врачи (
id_врача INT PRIMARY KEY IDENTITY(1,1),
фио_врача NVARCHAR(100) NOT NULL,
специальность NVARCHAR(50) NOT NULL,
стоимость_приема DECIMAL(10,2) NOT NULL,
процент_отчисления DECIMAL(5,2) NOT NULL
);
CREATE TABLE пациенты (
id_пациента INT PRIMARY KEY IDENTITY(1,1),
фамилия NVARCHAR(50) NOT NULL,
имя NVARCHAR(50) NOT NULL,
отчество NVARCHAR(50),
дата_рождения DATE NOT NULL,
адрес NVARCHAR(100)
);
CREATE TABLE прием_пациентов (
id_приема INT PRIMARY KEY IDENTITY(1,1),
id_врача INT NOT NULL FOREIGN KEY REFERENCES врачи(id_врача),
id_пациента INT NOT NULL FOREIGN KEY REFERENCES пациенты(id_пациента),
дата_приема DATE NOT NULL
);
-- Запросы
-- a. Врачи конкретной специальности
SELECT * FROM врачи WHERE специальность = 'хирург';
-- b. Пациенты по дате рождения
SELECT * FROM пациенты WHERE дата_рождения = '1990-01-01';
-- c. Средняя стоимость приема по датам
SELECT
дата_приема,
AVG(стоимость_приема) AS средняя_стоимость
FROM прием_пациентов
(тут мб инертал джойн) JOIN врачи ON прием_пациентов.id_врача = врачи.id_врача
GROUP BY дата_приема;
-- d. Создание таблицы врачей-терапевтов
SELECT * INTO врачи_терапевты
FROM врачи WHERE специальность = 'терапевт';
-- БИЛЕТ 2: Прокат автомобилей
USE master;
GO
IF DB_ID('ticket2') IS NOT NULL DROP DATABASE ticket2;
GO
CREATE DATABASE ticket2;
GO
USE ticket2;
GO
-- Создание таблиц
CREATE TABLE клиенты (
id_клиента INT PRIMARY KEY IDENTITY(1,1),
фио_клиента NVARCHAR(100) NOT NULL,
серия_паспорта NVARCHAR(10) NOT NULL,
номер_паспорта NVARCHAR(10) NOT NULL
);
CREATE TABLE автомобили (
id_авто INT PRIMARY KEY IDENTITY(1,1),
модель NVARCHAR(50) NOT NULL,
цвет NVARCHAR(30) NOT NULL,
год_выпуска INT NOT NULL,
госномер NVARCHAR(15) NOT NULL UNIQUE,
страховая_стоимость DECIMAL(12,2) NOT NULL,
стоимость_дня_проката DECIMAL(8,2) NOT NULL
);
CREATE TABLE прокат (
id_проката INT PRIMARY KEY IDENTITY(1,1),
id_клиента INT NOT NULL FOREIGN KEY REFERENCES клиенты(id_клиента),
id_авто INT NOT NULL FOREIGN KEY REFERENCES автомобили(id_авто),
дата_начала DATE NOT NULL,
количество_дней INT NOT NULL
);
-- Запросы
-- a. Автомобили конкретной модели
SELECT * FROM автомобили WHERE модель = 'ВАЗ-2110';
-- b. Автомобиль по госномеру
SELECT * FROM автомобили WHERE госномер = 'А001АА77';
-- c. Средняя страховая стоимость по моделям
SELECT
модель,
AVG(страховая_стоимость) AS средняя_стоимость
FROM автомобили
GROUP BY модель;
-- d. Создание таблицы старых автомобилей
SELECT * INTO старые_автомобили
FROM автомобили WHERE год_выпуска < 1995;
-- БИЛЕТ 3: Учет оптовых продаж
USE master;
GO
IF DB_ID('ticket3') IS NOT NULL DROP DATABASE ticket3;
GO
CREATE DATABASE ticket3;
GO
USE ticket3;
GO
-- Создание таблиц
CREATE TABLE товары (
id_товара INT PRIMARY KEY IDENTITY(1,1),
наименование NVARCHAR(100) NOT NULL,
единица_измерения NVARCHAR(20) NOT NULL,
цена_закупки DECIMAL(10,2) NOT NULL,
цена_продажи DECIMAL(10,2) NOT NULL
);
CREATE TABLE продавцы (
id_продавца INT PRIMARY KEY IDENTITY(1,1),
фио_продавца NVARCHAR(100) NOT NULL,
процент_комиссионных DECIMAL(5,2) NOT NULL
);
CREATE TABLE продажи (
id_продажи INT PRIMARY KEY IDENTITY(1,1),
id_товара INT NOT NULL FOREIGN KEY REFERENCES товары(id_товара),
id_продавца INT NOT NULL FOREIGN KEY REFERENCES продавцы(id_продавца),
дата_продажи DATE NOT NULL,
количество INT NOT NULL
);
-- Запросы
-- a. Продавцы на букву "И"
SELECT * FROM продавцы WHERE фио_продавца LIKE 'И%';
-- b. Факты продаж за период
SELECT
продажи.дата_продажи,
товары.наименование,
товары.цена_закупки,
товары.цена_продажи
FROM продажи
JOIN товары ON продажи.id_товара = товары.id_товара
WHERE продажи.дата_продажи BETWEEN '2023-01-01' AND '2023-12-31';
-- c. Средняя закупочная цена по товарам
SELECT
наименование,
AVG(цена_закупки) AS средняя_закупка
FROM товары
GROUP BY наименование;
-- d. Создание копии таблицы товаров
SELECT * INTO копия_товары FROM товары;
USE master;
GO
IF DB_ID('ticket1') IS NOT NULL DROP DATABASE ticket1;
GO
CREATE DATABASE ticket1;
GO
USE ticket1;
GO
-- Создание таблиц
CREATE TABLE врачи (
id_врача INT PRIMARY KEY IDENTITY(1,1),
фио_врача NVARCHAR(100) NOT NULL,
специальность NVARCHAR(50) NOT NULL,
стоимость_приема DECIMAL(10,2) NOT NULL,
процент_отчисления DECIMAL(5,2) NOT NULL
);
CREATE TABLE пациенты (
id_пациента INT PRIMARY KEY IDENTITY(1,1),
фамилия NVARCHAR(50) NOT NULL,
имя NVARCHAR(50) NOT NULL,
отчество NVARCHAR(50),
дата_рождения DATE NOT NULL,
адрес NVARCHAR(100)
);
CREATE TABLE прием_пациентов (
id_приема INT PRIMARY KEY IDENTITY(1,1),
id_врача INT NOT NULL FOREIGN KEY REFERENCES врачи(id_врача),
id_пациента INT NOT NULL FOREIGN KEY REFERENCES пациенты(id_пациента),
дата_приема DATE NOT NULL
);
-- Запросы
-- a. Врачи конкретной специальности
SELECT * FROM врачи WHERE специальность = 'хирург';
-- b. Пациенты по дате рождения
SELECT * FROM пациенты WHERE дата_рождения = '1990-01-01';
-- c. Средняя стоимость приема по датам
SELECT
дата_приема,
AVG(стоимость_приема) AS средняя_стоимость
FROM прием_пациентов
(тут мб инертал джойн) JOIN врачи ON прием_пациентов.id_врача = врачи.id_врача
GROUP BY дата_приема;
-- d. Создание таблицы врачей-терапевтов
SELECT * INTO врачи_терапевты
FROM врачи WHERE специальность = 'терапевт';
-- Создание таблиц
CREATE TABLE врачи (
id_врача INT PRIMARY KEY IDENTITY(1,1),
фио_врача NVARCHAR(100) NOT NULL,
специальность NVARCHAR(50) NOT NULL,
стоимость_приема DECIMAL(10,2) NOT NULL,
процент_отчисления DECIMAL(5,2) NOT NULL
);
CREATE TABLE пациенты (
id_пациента INT PRIMARY KEY IDENTITY(1,1),
фамилия NVARCHAR(50) NOT NULL,
имя NVARCHAR(50) NOT NULL,
отчество NVARCHAR(50),
дата_рождения DATE NOT NULL,
адрес NVARCHAR(100)
);
CREATE TABLE прием_пациентов (
id_приема INT PRIMARY KEY IDENTITY(1,1),
id_врача INT NOT NULL FOREIGN KEY REFERENCES врачи(id_врача),
id_пациента INT NOT NULL FOREIGN KEY REFERENCES пациенты(id_пациента),
дата_приема DATE NOT NULL
);
-- Запросы
-- a. Врачи конкретной специальности
SELECT * FROM врачи WHERE специальность = 'хирург';
-- b. Пациенты по дате рождения
SELECT * FROM пациенты WHERE дата_рождения = '1990-01-01';
-- c. Средняя стоимость приема по датам
SELECT
дата_приема,
AVG(стоимость_приема) AS средняя_стоимость
FROM прием_пациентов
(тут мб инертал джойн) JOIN врачи ON прием_пациентов.id_врача = врачи.id_врача
GROUP BY дата_приема;
-- d. Создание таблицы врачей-терапевтов
SELECT * INTO врачи_терапевты
FROM врачи WHERE специальность = 'терапевт';
USE master;
GO
IF DB_ID('ticket1') IS NOT NULL DROP DATABASE ticket1;
GO
CREATE DATABASE ticket1;
GO
USE ticket1;
GO
-- Создание таблиц
CREATE TABLE врачи (
id_врача INT PRIMARY KEY IDENTITY(1,1),
фио_врача NVARCHAR(100) NOT NULL,
специальность NVARCHAR(50) NOT NULL,
стоимость_приема DECIMAL(10,2) NOT NULL,
процент_отчисления DECIMAL(5,2) NOT NULL
);
CREATE TABLE пациенты (
id_пациента INT PRIMARY KEY IDENTITY(1,1),
фамилия NVARCHAR(50) NOT NULL,
имя NVARCHAR(50) NOT NULL,
отчество NVARCHAR(50),
дата_рождения DATE NOT NULL,
адрес NVARCHAR(100)
);
CREATE TABLE прием_пациентов (
id_приема INT PRIMARY KEY IDENTITY(1,1),
id_врача INT NOT NULL FOREIGN KEY REFERENCES врачи(id_врача),
id_пациента INT NOT NULL FOREIGN KEY REFERENCES пациенты(id_пациента),
дата_приема DATE NOT NULL