Skip to content

Latest commit

 

History

History
106 lines (64 loc) · 5.25 KB

File metadata and controls

106 lines (64 loc) · 5.25 KB

Примеры запросов

Все нижеприведенные запросы характерны для разных баз данных, и приведены более для понимания того, что именно должно быть в Вашей работе.

Информация в скобках больше нужна для Вашего понимания тех таблиц, на которых производятся запросы.

Каждый запрос должен быть актуальным, т.е. не синтетическим.

Желательно у каждого запроса оставить дополнительную информацию, зачем он нужен?

Для каждого запроса будут также свои дополнения по базе данных, они не обязательны, но в случае моих запросов необходимы, т.к. базы немного отличаются.

Для параметризованного запроса необходимо указать несколько возможных комбинаций значений параметров, работающих для вашей БД, чтобы была возможность легко проверить работоспособность запроса.

1. Запрос

Выбрать Номер студенческого билета, Фамилию и Имя студента нижний регистр Имени которого равен заданному значению. (БД: Предполагаем что на столбце имен нет проверки на 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)));

2. Запрос

Выбрать Фамилию, Имя и Средний балл студента определенного курса, определенного пола. Отсортировать по убыванию среднего балла. Вывести первые 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) т.к. количество студентов мужского пола и женского примерно равное. Такой индекс не будет эффективным.

3. Запрос

Выбрать Фамилию, Имя и Средний балл студента мужского пола второго курса со средним баллом более 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';