Загрузка данных
Го, вся практика 2–5 части, без CONSTRAINT (где не критично), для базы `HospitalGavrilov`.
## Часть 2. Новые таблицы
**Задание 5** — Patients:
```sql
CREATE TABLE Patients (
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
Surname NVARCHAR(100) NOT NULL,
Phone CHAR(10) NULL,
BirthDate DATE NOT NULL,
DepartmentId INT NULL FOREIGN KEY REFERENCES Departments(Id)
);
```
**Задание 6** — PatientDiseases:
```sql
CREATE TABLE PatientDiseases (
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PatientId INT NOT NULL FOREIGN KEY REFERENCES Patients(Id),
DiseaseId INT NOT NULL FOREIGN KEY REFERENCES Diseases(Id),
DiagnosisDate DATE NOT NULL
);
```
**Задание 7** — Rooms:
```sql
CREATE TABLE Rooms (
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Number INT NOT NULL UNIQUE,
Building INT NOT NULL CHECK (Building >= 1 AND Building <= 5),
Capacity INT NOT NULL DEFAULT 1 CHECK (Capacity >= 1),
DepartmentId INT NOT NULL FOREIGN KEY REFERENCES Departments(Id)
);
```
**Задание 8** — PatientRooms:
```sql
CREATE TABLE PatientRooms (
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PatientId INT NOT NULL FOREIGN KEY REFERENCES Patients(Id),
RoomId INT NOT NULL FOREIGN KEY REFERENCES Rooms(Id),
AdmissionDate DATE NOT NULL,
DischargeDate DATE NULL
);
```
## Часть 3. Наполнение данными
**Задание 9:**
```sql
INSERT INTO Departments (Building, Financing, Name) VALUES (3, 15000, N'Неврология');
INSERT INTO Departments (Building, Financing, Name) VALUES (5, 22000, N'Кардиология');
```
**Задание 10:**
```sql
INSERT INTO Diseases (Name, Severity) VALUES (N'Грипп', 1);
INSERT INTO Diseases (Name, Severity) VALUES (N'Пневмония', 3);
INSERT INTO Diseases (Name, Severity) VALUES (N'Мигрень', 2);
```
**Задание 11:**
```sql
INSERT INTO Doctors (Name, Surname, Phone, Salary, DepartmentId)
VALUES (N'Иван', N'Петров', '1234567890', 25000, (SELECT Id FROM Departments WHERE Name = N'Неврология'));
INSERT INTO Doctors (Name, Surname, Phone, Salary, DepartmentId)
VALUES (N'Анна', N'Сидорова', '0987654321', 30000, (SELECT Id FROM Departments WHERE Name = N'Кардиология'));
```
**Задание 12:**
```sql
INSERT INTO Patients (Name, Surname, Phone, BirthDate, DepartmentId)
VALUES (N'Сергей', N'Иванов', '1112223334', '1985-04-12', (SELECT Id FROM Departments WHERE Name = N'Неврология'));
INSERT INTO Patients (Name, Surname, Phone, BirthDate, DepartmentId)
VALUES (N'Ольга', N'Кузнецова', '2223334445', '1990-08-23', (SELECT Id FROM Departments WHERE Name = N'Кардиология'));
INSERT INTO Patients (Name, Surname, Phone, BirthDate, DepartmentId)
VALUES (N'Дмитрий', N'Смирнов', NULL, '1978-01-05', (SELECT Id FROM Departments WHERE Name = N'Неврология'));
```
**Задание 13:**
```sql
INSERT INTO Rooms (Number, Building, Capacity, DepartmentId)
VALUES (101, 3, 2, (SELECT Id FROM Departments WHERE Name = N'Неврология'));
INSERT INTO Rooms (Number, Building, Capacity, DepartmentId)
VALUES (102, 3, 1, (SELECT Id FROM Departments WHERE Name = N'Неврология'));
INSERT INTO Rooms (Number, Building, Capacity, DepartmentId)
VALUES (201, 5, 3, (SELECT Id FROM Departments WHERE Name = N'Кардиология'));
```
**Задание 14:**
```sql
INSERT INTO PatientDiseases (PatientId, DiseaseId, DiagnosisDate)
VALUES (
(SELECT Id FROM Patients WHERE Name = N'Сергей' AND Surname = N'Иванов'),
(SELECT Id FROM Diseases WHERE Name = N'Мигрень'),
'2024-02-10'
);
INSERT INTO PatientDiseases (PatientId, DiseaseId, DiagnosisDate)
VALUES (
(SELECT Id FROM Patients WHERE Name = N'Ольга' AND Surname = N'Кузнецова'),
(SELECT Id FROM Diseases WHERE Name = N'Грипп'),
'2024-03-05'
);
INSERT INTO PatientDiseases (PatientId, DiseaseId, DiagnosisDate)
VALUES (
(SELECT Id FROM Patients WHERE Name = N'Дмитрий' AND Surname = N'Смирнов'),
(SELECT Id FROM Diseases WHERE Name = N'Пневмония'),
'2024-03-12'
);
```
**Задание 15:**
```sql
INSERT INTO PatientRooms (PatientId, RoomId, AdmissionDate, DischargeDate)
VALUES (
(SELECT Id FROM Patients WHERE Name = N'Сергей' AND Surname = N'Иванов'),
(SELECT Id FROM Rooms WHERE Number = 101),
'2024-02-10', '2024-02-20'
);
INSERT INTO PatientRooms (PatientId, RoomId, AdmissionDate, DischargeDate)
VALUES (
(SELECT Id FROM Patients WHERE Name = N'Ольга' AND Surname = N'Кузнецова'),
(SELECT Id FROM Rooms WHERE Number = 201),
'2024-03-05', NULL
);
INSERT INTO PatientRooms (PatientId, RoomId, AdmissionDate, DischargeDate)
VALUES (
(SELECT Id FROM Patients WHERE Name = N'Дмитрий' AND Surname = N'Смирнов'),
(SELECT Id FROM Rooms WHERE Number = 102),
'2024-03-12', '2024-03-25'
);
```
## Часть 4. Простые SELECT-запросы
**16:**
```sql
SELECT * FROM Departments WHERE Financing > 20000;
```
**17:**
```sql
SELECT Name, Severity FROM Diseases WHERE Severity > 1;
```
**18:**
```sql
SELECT Name, Surname, Salary FROM Doctors WHERE Salary >= 20000 AND Salary <= 30000;
```
**19:**
```sql
SELECT Name FROM Examinations WHERE DayOfWeek = 1 OR DayOfWeek = 2;
```
**20:**
```sql
SELECT Name, Surname FROM Doctors WHERE Phone IS NULL;
```
**21:**
```sql
SELECT Name FROM Departments WHERE Building = 1 OR Building = 2 OR Building = 3;
```
**22:**
```sql
SELECT Name FROM Diseases WHERE Name LIKE N'П%';
```
**23:**
```sql
SELECT Name, Surname, BirthDate FROM Patients WHERE BirthDate > '1980-01-01';
```
**24:**
```sql
SELECT Number, Capacity FROM Rooms WHERE Capacity > 1 AND Building = 3;
```
**25:**
```sql
SELECT Name, StartTime, EndTime FROM Examinations WHERE StartTime > '12:00';
```
**26:**
```sql
SELECT Name, Surname, Salary FROM Doctors ORDER BY Salary DESC;
```
**27:**
```sql
SELECT Name, Financing FROM Departments ORDER BY Name ASC;
```
**28:**
```sql
SELECT Patients.Name, Patients.Surname, PatientDiseases.DiagnosisDate
FROM Patients, PatientDiseases
WHERE Patients.Id = PatientDiseases.PatientId
AND PatientDiseases.DiagnosisDate >= '2024-03-01'
AND PatientDiseases.DiagnosisDate <= '2024-03-31';
```
**29:**
```sql
SELECT Diseases.Name, PatientDiseases.DiagnosisDate
FROM Patients, PatientDiseases, Diseases
WHERE Patients.Id = PatientDiseases.PatientId
AND PatientDiseases.DiseaseId = Diseases.Id
AND Patients.Surname = N'Иванов';
```
**30:**
```sql
SELECT d.Name, d.Surname, dep.Name
FROM Doctors d, Departments dep
WHERE d.DepartmentId = dep.Id
AND d.Salary > 20000;
```
## Часть 5. Повышенная сложность
**31:**
```sql
SELECT p.Name, p.Surname, r.Number
FROM Patients p, PatientRooms pr, Rooms r
WHERE p.Id = pr.PatientId
AND pr.RoomId = r.Id
AND pr.DischargeDate IS NULL;
```
**32:**
```sql
SELECT dep.Name, r.Number
FROM Departments dep, Rooms r
WHERE dep.Id = r.DepartmentId;
```
**33:**
```sql
SELECT doc.Name, doc.Surname, e.Name
FROM Doctors doc, Examinations e
WHERE doc.Id = e.DoctorId
AND doc.Salary > 25000;
```
**34:**
```sql
SELECT p.Name, p.Surname, dis.Name, dis.Severity
FROM Patients p, PatientDiseases pd, Diseases dis
WHERE p.Id = pd.PatientId
AND pd.DiseaseId = dis.Id
AND dis.Severity > 1;
```
**35:**
```sql
SELECT dep.Name, doc.Name, doc.Surname, e.Name
FROM Departments dep, Doctors doc, Examinations e
WHERE dep.Id = doc.DepartmentId
AND doc.Id = e.DoctorId
AND dep.Name = N'Неврология';
```
Важно: задания 33 и 35 сработают только если у тебя есть строки в Examinations с заполненным `DoctorId` — в исходных данных задания 9–15 это не заполняется явно, так что для проверки 33/35 сначала сделай `UPDATE Examinations SET DoctorId = ... WHERE Id = ...` вручную (или это отдельное упущение задания).