- •Информационные системы, основные функции и области применения
- •Банк данных и его компоненты
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель
- •Классификация программ субд
- •Общие понятия реляционного подхода к организации бд Основные концепции и принципы
- •Индексирование
- •Отношения между таблицами
- •Управление реляционной базой данной. Реляционная алгебра. Реляционное исчисление.
- •Реляционное исчисление
- •Проектирование реляционных баз данных с использованием нормализации.
- •Первая нормальная форма таблицы
- •Вторая нормальная форма
- •Управление транзакциями
- •Транзакции и целостность бд
- •Изолированность пользователей
- •Сериализация транзакций
- •Методы сериализации транзакций
- •Синхронизационные захваты
- •Тупики распознавания и разрушения
- •Метод временных меток
- •Элементы языка sql Функции и основные возможности языка sql
- •Отличие sql от процедурных языков программирования
- •Интерактивный и встроенный sql
- •Составные части sql
- •Типы данных sql
- •Числовые типы данных:
- •Используемые термины и обозначения
- •Выборка данных с использование предложения select
- •Простейшие select-запросы
- •Преобразование вывода и встроенные функции
- •Числовые и символьные константы
- •Арифметические операции для преобразования числовых данных
- •Операция конкатенации строк
- •Агрегирование и групповые функции
- •Упорядочение выходных полей
- •Вложенные подзапросы
- •Формирование связанных подзапросов
- •Организация данных в InterBase
Упорядочение выходных полей
Записи в реляционной БД не упорядочены. Однако в результате выполнения запроса данные можно упорядочить. Для этого используется оператор Order by, который позволяет упорядочивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов. При этом можно задать возрастающую (asc) или убывающую (desc) последовательность сортировки.
Пример: 1)выбрать все данные из таблицы, упорядочив их по названию предмета.
Select *;
From subject
Order by subj_name;
2)Упорядочить выводимый список предметов обучения по значениям семестра, а внутри семестра по наименованию предмета.
Select *
From subject
Order by semester, subj_name;
Предложение Order by может использоваться для упорядочивания групп записей, при этом оператор Order by в запросе всегда должен быть последним.
Select subj_name, semester, max(hour)
From subject
Group by semester, subj_name
Order by semester;
При упорядочении вместо наименований столбцов можно указывать их номера, однако в данном случае это номера столбцов указанные при определении выходных данных в запросе, а не номера столбцов в таблице.
Например: упорядочить данные по полю семестр по убыванию.
Select subj_id, semester
From subject
Order by 2 desc;
Если в поле которое используется для упорядочения существует null-значение, то все они размещаются в конце или предшествуют всем остальным значениям этого поля.
Вложенные подзапросы
SQL позволяет использовать одни запросы внутри других, т.е. запросы вкладываются друг в друга. Пример: известна фамилия студента (Петров), но неизвестно значение его идентификатора. Чтобы извлечь все данные об оценках этого студента нужно записать следующий запрос:
Select *
From exam_marks
Where student_id =
(Select student_id
From student
Where surname = ‘Петров’);
Алгоритм работы запроса SQL со связанным подзапросом:
Выбирается строка из таблицы, имя которой указано во внешнем запросе;
Выполняется подзапрос и полученное значение применяется для анализа этой строки в условии предложения Where внешнего запроса;
По результату оценки этого условия принимается решение о включении или не включении строки в состав выходных данных;
Процедура повторяется для следующей строки таблицы внешнего запроса.
В некоторых случаях для гарантии получения единственного значения выполнения подзапроса используется distinct. Одним из видов функций, которые автоматически возвращает в результате единственное значение для любого количества строк, являются агрегирующие функции. Оператор IN также широко применяется в подзапросах. Он задает список значений с которыми сравниваются другие значения для определения истинности задаваемого этим оператором предиката. Пример: данные об оценках всех студентов из Воронежа.
Select *
From exam_marks
Where student_id in
( Select student_id
From student
Where city = ‘Воронеж’);
Подзапросы можно применять внутри предложения Having. Пример: определить количество предметов обучения с оценкой превышающей среднее значение оценки студента с идентификатором 301.
Select count distinct(subj_id), mark
From exam_marks
Group by mark
Having mark >
(Select avg(mark)
From exam_marks
Where student_id = 301);
