- •Содержание
- •1.1. Основные понятия
- •1.2. Компоненты БнД
- •1.3. Классификация БнД и бд
- •1.4. Этапы проектирования бд
- •1.5. Взаимосвязь этапов проектирования бд
- •Вопросы для самоконтроля
- •Раздел 2. Проектирование баз данных. Тема 2. Инфологическое моделирование (начало)
- •2.1. Необходимость инфологического моделирования
- •2.1.1. Виды ограничений целостности
- •2.1.2. Причины, приводящие к нарушению ограничений целостности
- •2.2. Описание объектов и их свойств
- •Тема 3. Инфологическое моделирование (окончание)
- •3.1. Описание связей между объектами.
- •3. 2. Описание сложных объектов
- •Вопросы для самоконтроля
- •Тема 4. Даталогическое проектирование
- •4.1. Общие сведения
- •4.2. Подход к даталогическому проектированию
- •4.3. Определение состава бд
- •4.4. Разновидности даталогических моделей
- •Вопросы для самоконтроля
- •Тема 5. Реляционная даталогическая модель базы данных
- •5.1. Основные понятия
- •5.2. Цели проектирования рбд
- •5.2.1. Возможность хранения всех необходимых данных в бд
- •5.2.2. Исключение избыточности данных
- •5.2.3. Сведение числа хранимых в бд отношений к минимуму
- •5.2.4. Нормализация отношений
- •Вопросы для самоконтроля
- •Тема 6. Метод проектирования реляционной базы данных на основе илм
- •Вопросы для самоконтроля
- •Тема 7. Пример проектирования реляционной базы данных на основе илм
- •7.6. Определение состава бд
- •7.7. Определение отношений, включаемых в бд
- •7.8. Описание логической структуры бд на языке субд (схема бд)
- •7.9. Сравнение спроектированной рбд с однотабличной бд
- •Вопросы для самоконтроля
- •Раздел 3. Описание информационных потребностей пользователей базы данных. Тема 8. Информационные потребности пользователей базы данных.
- •8.1. Типы и языки запросов
- •8.2. Реляционная алгебра (алгебра отношений)
- •8.2.1. Проекция
- •8.2.2. Выборка
- •8.2.3. Соединение
- •8.2.4. Объединение
- •8.2.5. Пересечение
- •8.2.6. Вычитание
- •8.2.7. Умножение
- •8.2.8. Деление
- •8.3. Примеры запросов на реляционном языке
- •Вопросы для самоконтроля
- •Раздел 4. Использование языкаSql для работы с базами данных. Тема9. Структурированный язык запросов sql
- •9.1. Стандарт и разновидности языка sql
- •9.2. Краткое введение в sql
- •Тема 10. Основные элементы языка sql. Использование языка sql для выборки данных
- •10.1. Оператор select
- •Тема 11. Отбор строк из таблиц. Условия поиска строк
- •Вопросы для самоконтроля
- •Тема 12. Сортировка таблиц
- •Тема 13. Использование псевдонимов для обозначения таблиц базы данных. Самосоединение таблиц. Итоговые запросы и агрегатные функции
- •Вопросы для самоконтроля
- •Тема 14. Запросы с группировкой
- •Тема 15. Вложенные запросы
- •Вопросы для самоконтроля
- •Тема 16. Изменение данных в базе данных
- •16.1. Корректировка таблиц бд
- •16.2. Создание объектов бд
- •16.3. Создание представлений
- •Вопросы для самоконтроля
- •Рекомендуемая литература
Тема 11. Отбор строк из таблиц. Условия поиска строк
Фраза WHERE задает условие, по которому выбираются строки для выполнения запроса. в предыдущем примере использован следующий формат фразы WHERE:
WHERE [NOT] [<имя таблицы1>.] <имя столбца>
<знак сравнения> [<имя таблицы2>.] <имя столбца>
Условие отбора строк может задаваться с использованием логических операций AND и OR. Например, если нужны данные только о жителях с фамилиями ИВАНОВ и ПЕТРОВ, то фраза WHERE может быть такой:
WHERE Fio=‘ИВАНОВ’ OR Fio=‘ПЕТРОВ’
Помимо логических операций можно использовать предикат IN (находится в, принадлежит). Фраза WHERE в этом случае имеет такой формат:
WHERE [NOT] <выражение> [NOT] IN
(<список значений><подзапрос>)
Например, WHERE Fio IN (‘ИВАНОВ’, ‘ПЕТРОВ’)
Если нужно выдать сведения о всех жителях, кроме Ивановых и Петровых, то запрос можно задать так:
SELECT * FROM person WHERE Fio NOT IN (‘ИВАНОВ’, ‘ПЕТРОВ’)
В условии может быть задан диапазон:
WHERE [NOT] <выражение> [NOT] BETWEEN <нижнее выражение> AND <верхнее выражение>
Например, получить сведения о жителях, родившихся в 1960 году, можно с помощью запроса
SELECT * FROM person WHERE Rdate BETWEEN '01/01/60' AND '31/12/60'
Предусмотрена возможность поиска символьной информации по шаблону (маске). Символ “%” обозначает в шаблоне любую последовательность символов, а символ “_” (подчеркивание) - любой единичный символ. Поиск по шаблону задается фразой
WHERE [NOT] <имя столбца> [NOT] LIKE ‘<шаблон>’
Так, запрос
SELECT * FROM person WHERE Fio LIKE ‘И%’
обеспечит выдачу сведений о всех жителях, фамилии которых начинаются буквой “И”.
Вопросы для самоконтроля
Для чего предназначено предложение SELECT оператора SELECT?
Для чего предназначено предложение FROM оператора SELECT?
Для чего предназначено предложение WHERE оператора SELECT?
Тема 12. Сортировка таблиц
Информация, получаемая в результате выполнения запроса, может быть упорядочена с помощью фразы
ORDER BY <имя столбца><целое>[ASCDESC] [,<имя столбца><целое>[ASCDESC]...]
Вместо имени столбца может записываться целое число, которое задает номер столбца в таблице, считая слева направо.
Если столбцы вычисляемые или являются результатом операции UNION, то вместо имени столбца должен использоваться номер столбца.
Параметр ASCDESC означает вид сортировки (по возрастаниюпо убыванию соответственно). По умолчанию принимается значение ASC.
Если во фразе ORDER BY задается список полей, то это означает упорядочение по составному ключу. Фраза ORDER BY соответствует операции SORT. Столбцы, перечисленные во фразе ORDER BY, должны присутствовать во фразе SELECT.
Тема 13. Использование псевдонимов для обозначения таблиц базы данных. Самосоединение таблиц. Итоговые запросы и агрегатные функции
Вместо длинных имен таблиц в запросах можно использовать их псевдонимы, которые задаются в фразе FROM оператора SELECT:
FROM <имя таблицы> [<псевдоним>] [,<имя таблицы> [<псевдоним>]…]
В качестве псевдонима используется последовательность символов, соответствующая правилам записи имен на языке SQL.
Псевдоним удобно использовать также для обозначения копии таблицы при записи запроса. Например, определить пары жителей, получающих одинаковые доходы, можно соединив по равенству значений в столбце SumD копию А и копию В таблицы PERSON:
SELECT A.Fio,B.Fio FROM person A, person B WHERE A.SumD=B.SumD
Такой прием называется самосоединением таблиц.
Во многих запросах к базе данных не требуется той степени детализации, как в ранее рассмотренных запросах. Например, во всех запросах, перечисленных ниже, требуется узнать всего одно или несколько значений, которые подытоживают информацию, хранящуюся в базе данных:
Какова сумма общих доходов, получаемых всеми жителями?
Каковы минимальный и максимальный размеры общий доходов?
Каков средний размер общего дохода?
Запросы такого типа (итоговые запросы) создаются с помощью агрегатных функций и фраз GROUP BY и HAVING оператора SELECT.
Агрегатные функции предназначены для подведения итогов по информации, хранящейся в базе данных. Агрегатная функция принимает в качестве аргумента какой-либо столбец данных целиком, а возвращает одно значение, которое определенным образом подытоживает этот столбец.
Имеется шесть агрегатных функций, которые позволяют получать различные виды итоговой информации:
функция SUM( ) вычисляет сумму всех значений, содержащихся в столбце;
функция AVG( ) вычисляет среднее всех значений, содержащихся в столбце;
функция MIN( ) находит наименьшее среди всех значений, содержащихся в столбце;
функция MAX( ) находит наибольшее среди всех значений, содержащихся в столбце;
функция COUNT( ) подсчитывает количество значений, содержащихся в столбце;
функция COUNT(*) подсчитывает количество строк в таблице результатов запроса.
Например, получить ответы на запросы, перечисленные выше, можно оператором
SELECT SUM(SumD), MIN(SumD), MAX(SumD), AVG(SumD) FROM person