Я создал несколько запросов MSSQL, все они работают хорошо, но я думаю, что это можно сделать быстрее.Можете ли вы помочь мне оптимизировать их?
Это база данных:
Create table Teachers
(TNO char(3) Primary key,
TNAME char(20),
TITLE char(6) check (TITLE in('Prof','PhD','MSc')),
CITY char(12),
SUPNO char(3) REFERENCES Teachers);
Create table Students
(SNO char(3) Primary key,
SNAME char(20),
SYEAR int,
CITY char(20));
Create table Courses
(CNO char(3) Primary key,
CNAME char(20),
STUDYEAR int);
Create table TSC
(TNO char(3) REFERENCES Teachers,
SNO char(3) REFERENCES Students,
CNO char(3) REFERENCES Courses,
HOURS int,
GRADE float,
PRIMARY KEY(TNO,SNO,CNO));
1: В каком учебном году большинство курсов?
Проблема: похоже, чторезультат сортируется, пока мне нужен только элемент max.
select
top 1 STUDYEAR
from
Courses
group by
STUDYEAR
order by COUNT(*) DESC
2: Показать TNO тех учителей, которые НЕ имеют курсов с 1-м учебным годом
Проблема: я используюподзапрос только для отмены запроса на выборку
select
TNO
from
Teachers
where
TNO not in (
select distinct
tno
from
Courses, TSC
where tsc.CNO=Courses.CNO and STUDYEAR = 1)