Все нижеприведенные запросы характерны для разных баз данных, и приведены более для понимания того, что именно должно быть в Вашей работе.
Информация в скобках больше нужна для Вашего понимания тех таблиц, на которых производятся запросы.
Каждый запрос должен быть актуальным, т.е. не синтетическим.
Желательно у каждого запроса оставить дополнительную информацию, зачем он нужен?
Для каждого запроса будут также свои дополнения по базе данных, они не обязательны, но в случае моих запросов необходимы, т.к. базы немного отличаются.
Для параметризованного запроса необходимо указать несколько возможных комбинаций значений параметров, работающих для вашей БД, чтобы была возможность легко проверить работоспособность запроса.
Выбрать Номер студенческого билета, Фамилию и Имя студента нижний регистр Имени которого равен заданному значению. (БД: Предполагаем что на столбце имен нет проверки на initcap и соответственно имя может быть написано в каком угодно регистре)
SELECT s.number, s.lastname, s.firstname<
FROM
students AS s
WHERE
lower(s.firstname) = __FIRSTNAME__;
Допустимые параметры [__ FIRSTNAME __]:
('иван')
('анастасия')
('евгений')
Необходимость:
Поиск студента по имени
Оптимизация:
Был добавлен индекс students_firsname_idx_lower для осуществления фильтрации по нижнему регистру поля firstname.
CREATE INDEX students_firsname_idx_lower ON students ((lower(firstname)));
Выбрать Фамилию, Имя и Средний балл студента определенного курса, определенного пола. Отсортировать по убыванию среднего балла. Вывести первые 10 результатов.
(БД: Предположим что у нас есть столбец со средним баллом прямо в таблице студентов,- mark)
SELECT s.lastname, s.firstname, s.mark
FROM
students AS s
WHERE
s.course = __COURSE__
AND
s.sex = __SEX__
ORDER BY
s.mark DESC NULLS LAST
LIMIT 10;
Допустимые параметры [COURSE, SEX]:
(4, 'male')
(2, 'female')
(2, 'male')
Необходимость:
Предполагаем что у нас будет повышенная стипендия которую будут выплачивать топ 10 студентов каждого курса и пола (необходимость тут надуманная, таких запросов не должно быть, тут он больше для запроса с двумя параметрами)
Оптимизация:
Был добавлен индекс students_course_idx для осуществления фильтрации студентов по курсу.
CREATE INDEX students_course_idx ON students (course);
Нет необходимости добавлять мультиколоночный ключ на столбцы (course, sex) т.к. количество студентов мужского пола и женского примерно равное. Такой индекс не будет эффективным.
Выбрать Фамилию, Имя и Средний балл студента мужского пола второго курса со средним баллом более 4, отсортировать по Фамилии и Имени.
SELECT s.lastname, s.firstname, s.mark
FROM
students AS s
WHERE
s.course = 2
AND
s.sex = 'male'
ORDER BY
s.lastname,
s.firstname;
Необходимость:
Подаем список студентов на военную кафедру. (что важно, запрос именно с этими параматрами нас интересует а с другими - нет, и это прописано в необходимости, поэтому оптимизация будет специфической!)
Оптимизация:
Был добавлен индекс students_course_sex_idx_2_male с условием по курсу и полу, который сразу вернет нам идентификаторы нужных записей.
CREATE INDEX students_course_sex_idx_2_male ON students (course, sex) WHERE course = 2 AND sex = 'male';