- •ОГЛАВЛЕНИЕ
- •3. Простые варианты поиска данных
- •3.2. Использование ключевого слова DISTINCT
- •3.3. Предложение WHERE
- •4.1. Использование DISTINCT с COUNT
- •4.3. Предложение HAVING
- •5.2. Внешние соединения
- •6. ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ В ОПЕРАТОРАХ SQL
- •6.4. Использование оператора EXISTS
- •6.5. Использование варианта IN с подзапросами
- •6.6. Использование NOT EXISTS
- •8. ДОБАВЛЕНИЕ ДАННЫХ. КОМАНДА INSERT
- •8.1. Добавление отдельной строки
- •9. ОБНОВЛЕНИЕ УЖЕ ИМЕЮЩИХСЯ ДАННЫХ.
- •КОМАНДА UPDATE
- •10. УДАЛЕНИЕ ДАННЫХ ИЗ ТАБЛИЦ. КОМАНДА DELETE
- •11. ГЕНЕРАТОРЫ И ИХ ИСПОЛЬЗОВАНИЕ
- •11.1. Создание генераторов
- •ПРИМЕРЫ ЗАПРОСОВ
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«Пермский государственный технический университет»
И. А. Шмидт
ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ
СИСТЕМ УПРАВЛЕНИЯ.
ПОСТРОЕНИЕ ЗАПРОСОВ
ПРИ РАБОТЕ С БАЗОЙ ДАННЫХ
Утверждено Редакционно-издательским советом университета в качестве учебного пособия
Издательство Пермского государственного технического университета
2008
УДК 681.3 (075) Ш73
Рецензенты:
д-р техн. наук, профессор Р. А. Файзрахмапов
(Пермский государственный технический университет);
канд. техн. наук И. Г Долгих
(Институт информационных систем)
Шмидт, И. А.
Ш73 Информационное обеспечение систем управления. Построе
ние запросов |
при работе с базой данных: учеб, пособие |
/ |
И. А. Шмидт. - |
Пермь: Изд-во Перм. гос. техн. ун-та, 2008. |
- |
83 с. |
|
|
ISBN 978-5-88151-997-1
Содержит материал, необходимый для понимания способа орга низации структуры данных и практического освоения языка SQL. Выполнение всех запросов демонстрируется на примере тестовой ба зы данных. Рассматривается специфика СУБД Interbase в построении
баз данных.
Рекомендуется для студентов всех форм обучения, изучающих курс «Информационное обеспечение систем управления», специаль ностей 220301 «Автоматизация технологических процессов и про изводств», 220305 «Автоматизированное управление жизненным циклом продукции», а также других специальностей, связанных с об работкой информации.
УДК 681.3 (075)
© ГОУВПО
«Пермский государственный технический университет», 2008
ОГЛАВЛЕНИЕ |
|
1. ТЕСТОВАЯ БАЗА ДАННЫХ................................................... |
5 |
2. ВЫБОРКА ДАННЫХ. КОМАНДА SELECT.......................... |
10 |
3. ПРОСТЫЕ ВАРИАНТЫ ПОИСКА ДАННЫХ....................... |
12 |
3.1. Упорядочение результата запроса. |
|
Предложение ORDER BY....................................................... |
16 |
3.2. Использование ключевого слова DISTINCT......................... |
20 |
3.3. Предложение WHERE............................................................. |
22 |
4. ОБОБЩЕНИЕ ДАННЫХ С ПОМОЩЬЮ АГРЕГАТНЫХ |
|
ФУНКЦИЙ................................................................................... |
35 |
4.1. Использование DISTINCT с COUNT..................................... |
36 |
4.2. Предложение GROUP BY....................................................... |
37 |
4.3. Предложение HAVING........................................................... |
40 |
5. СОЕДИНЕНИЕ ТАБЛИЦ.......................................................... |
43 |
5.1. Внутренние соединения (связывание по равенству)........... |
44 |
5.2. Внешние соединения............................................................... |
46 |
6. ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ |
|
В ОПЕРАТОРАХ SQL............................................................... |
56 |
6.1. Выбор одного........................................................................... |
57 |
6.2. Использование в подзапросе агрегатных функций............. |
58 |
6.3. Связанные подзапросы........................................................... |
58 |
6.4. Использование оператора EXISTS......................................... |
62 |
6.5. Использование варианта IN с подзапросами............... ......... |
63 |
6.6. Использование NOT EXISTS............................................... |
64 |
7. ОБЪЕДИНЕНИЕ ЗАПРОСОВ.................................................. |
48 |
8. ДОБАВЛЕНИЕ ДАННЫХ. КОМАНДА INSERT.................... |
68 |
8.1. Добавление отдельной строки.................................................. |
68 |
8.2. Добавление группы строк......................................................... |
69 |
9. ОБНОВЛЕНИЕ УЖЕ ИМЕЮЩИХСЯ ДАННЫХ. |
|
КОМАНДА UPDATE................................................................... |
70 |
10. УДАЛЕНИЕ ДАННЫХ ИЗ ТАБЛИЦ. КОМАНДА |
|
DELETE......................................................................................... |
71 |
11. ГЕНЕРАТОРЫ И ИХ ИСПОЛЬЗОВАНИЕ............................. |
72 |
11.1. Создание генераторов............................................................. |
72 |
11.2. Использование генераторов................ |
73 |
ПРИМЕРЫ ЗАПРОСОВ.................................................................. |
78 |
1. ТЕСТОВАЯ БАЗА ДАННЫХ
Перед изучением языка SQL необходимо рассмотреть тестовую базу данных, на которой будут отрабатываться все запросы. Наша тестовая база данных полностью соответствует рассмотренной в учебном пособии по нормализации данных и создании базы дан ных. Напомним, что эта база данных описывает сферу воздушных перевозок. Все пояснения к модели даны в пособии по нормализа ции данных и создании базы данных.
Для начала приведем логическую модель БД, где каждый ин формационный объект отображается реляционной таблицей, а связи между таблицами соответствуют связям между информационными объектами. Модель представлена в виде диаграммы рис. 1.
Последний этап моделирования БД - переход к физическому уровню модели, на котором модель также представлена в виде диа граммы (рис. 2).
Рис. 1. Логическая модель
Рис. 2. Физическая модель
Приведем соответствие имен таблиц и полей на логическом и физическом уровне.
Вид объекта |
Название |
Название на физическом |
|
на логическом уровне |
уровне |
||
|
|||
1 |
2 |
3 |
|
Таблица |
Авиамаршрут |
AIRLINE |
|
Поле |
Номер маршрута |
AL NUM |
|
Поле |
Код Типа Самолета |
ALPLCODE |
|
Поле |
Код Авиакомпании |
AL_AC_CODE |
|
Поле |
Откуда |
AL AP FROM |
|
Поле |
Куда |
A LA PTO |
|
Таблица |
Аэропорт |
AIRPORT |
|
Поле |
Код аэропорта |
APCODE |
|
Поле |
Название аэропорта |
APNAME |
|
Поле |
Код Города |
AP_CT_CODE |
|
Таблица |
Авиакомпания |
AIRCOMPANY |
|
Поле |
Код Авиакомпании |
AC CODE |
|
Поле |
Название Авиакомпа- |
ACNAME |
|
Таблица |
Борт |
BOARD |
|
Поле |
Борт номер |
BRDNUM |
|
Поле |
Код Типа Самолета |
BRDPLCODE |
|
Поле |
Код Авиакомпании |
BRG AC CODE |
|
Таблица |
Город |
CITY |
|
Поле |
Код Города |
CT CODE |
|
Поле |
Название Города |
CT_NAME |
|
Таблица |
Член Экипажа |
EQUIPAGE |
|
Поле |
Код Члена Экипажа |
EQ_CODE |
|
Поле |
Дата вылета |
EQ_FL DATE |
|
Поле |
Номер маршрута |
EQ FL NUM |
|
Поле |
Код Личности |
EQ PR CODE |
|
Поле |
Код роли |
EQ RNK CODE |
|
Таблица |
Рейс |
FLIGHT |
|
Поле |
Дата вылета |
FLDATE |
|
Поле |
Номер маршрута |
FLNUM |
|
Поле |
Борт номер |
FL BRD NUM |
|
Таблица |
Личность |
PERSON |
|
Поле |
Код Личности |
PR CODE |
|
Поле |
ФИО |
PRNAME |
|
Таблица |
Тип Самолета |
PLANE |
|
Поле |
Код Типа Самолета |
PLCODE |
Таблица
Поле
Поле
Таблица
Поле
Поле
Таблица
Поле
Поле
Поле
Таблица
Поле
Поле
Поле
Поле
Поле Таблица Поле Поле Поле
Роль члена экипажа |
RANK |
Код роли |
RNK CODE |
Роль |
RNK NAME |
Тип Салона |
SALON |
Код Типа Салона |
SL TYPE |
Название Типа Салона |
SL NAME |
Салон в Самолете |
SALON IN PLANE |
Код Типа Салона |
SP SL TYPE |
Код Типа Самолета |
SP PL CODE |
Количество мест |
SP COUNT |
Расписание |
TIMETABLE |
Код аэропорта |
TBL АР CODE |
Помер маршрута |
TBL AL NUM |
Время Прилета |
TBL DOWN TIME |
Время Вылета |
TBL START TIME |
Номер в Маршруте |
TBL NUMBER |
Тариф |
TARIFF |
Код Тарифа |
TR CODE |
Код Типа Салона |
TR SL TYPE |
Номер маршрута |
TR AL NUM |
'— |
л 01Л пянных занесена информация в коли- |
|
|
йпицЫ тестовой базы Д |
основных закономерно- |
<имя таблицы>. <имя столбца>
или
<псевдоним таблицы>. <имя столбца>
Уточненные имена столбцов обязательно должны присутство вать в операторах SELECT, где присутствует несколько таблиц, это позволит избежать двусмысленности при обращении к столбцам с одинаковым именем из разных таблиц. Такая ситуация может воз никнуть при выполнении соединений таблиц.
При задании имени столбца из таблицы, константы или любого выражения можно после ключевого слова AS указать текст, кото рый будет помещаться в заголовок отображаемой таблицы. Такой текст называется псевдонимом или алиасом столбца. Если псевдо ним содержит пробелы, специальные символы или буквы кирилли цы, то этот текст нужно заключить в двойные кавычки. Например:
SELECT CITY. CTJNAME
AS "Город", AIRPORT.AP^NAME AS "Аэропорт" FROM AIRPORT INNER JOIN CITY
ON AIRPORT.AP_CT_CODE = CITY.CT_CODE WHERE CITY.CT_NAME = 'Москва1
Русские тексты здесь заключены в кавычки, потому что содер жат символы, недопустимые в именах, а например CT_NAME, яв ляясь правильным именем в SQL, может обойтись без кавычек. Строковые константы должны заключатся в одинарные кавычки.
Внимание! Не путайте описанные таким образом псевдонимы столбцов с псевдонимами таблиц (см. далее). Если псевдонимы таб лиц можно использовать в операторе, где они определены, для уточнения ссылок на столбцы, то с псевдонимами столбцов дело обстоит несколько сложнее. В разных версиях разных серверов баз данных их можно использовать по-разному. Чуть позже мы рас смотрим некоторые варианты.
FROM <ссылка на таблицу> задает список имен таблиц, в которых осуществляется поиск. Здесь же можно указывать соеди нения (JOIN) таблиц, представления.
Необязательное предложение WHERE <условия поиска> оп ределяет условия поиска строк в таблицах. На самом деле это пред ложение не является таким уж необязательным. Если таблица в базе данных содержит тысячи строк, то, во-первых, вам вряд ли понадо