Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное_пособие_заочное (брошюра)

.pdf
Скачиваний:
24
Добавлен:
21.03.2016
Размер:
1.92 Mб
Скачать

 

Атрибуты таблиц и задания

 

 

превышающей заданное значение.

 

 

8.

Определить ФИО и адрес вкладчика с наименьшей

 

 

суммой вклада.

 

 

 

 

9.

Определить номер записи, ФИО вкладчика и его сумму

 

 

расхода, являющуюся максимальной за весь период.

 

10.

Определить общую сумму прихода, оформленного в

 

 

заданном месяце.

 

 

 

 

11.

Определить общую сумму прихода в разрезе вкладчиков и

 

 

кассиров.

 

 

 

 

12.

Определить общую сумму расхода в

разрезе вкладчиков

 

 

и кассиров.

 

 

 

 

 

 

 

 

6

Таблицы

ФИО,

Адрес,

Номер_телефона,

 

1.

Код_абонента,

 

 

Дата_установки

 

 

 

 

2.

Код_кассира, ФИО_кассира

 

 

 

3.

Номер_записи,

Код_абонента,

Код_кассира,

 

 

Месяц_оплаты, Сумма, Вид_оплаты

 

 

Запросы:

 

 

 

1.Удалить из базы данных информацию по заданному коду кассира.

2.Увеличить в два раза сумму оплаты абоненту с заданными ФИО и месяцем оплаты.

3.Создать новую таблицу данных, в которую занести абонентов, их адреса и суммы оплаты, превышающие заданное значение.

4.Выбрать коды и ФИО кассиров с кодами от 3 до 8.

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

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

7.Определить количество записей с суммой оплаты, не более заданного значения.

8.Определить ФИО, номер телефона и адрес абонента с самой ранней датой установки.

9.Определить номер записи, ФИО абонента и его сумму оплаты, являющуюся максимальной в заданном месяце.

10.Определить общую сумму оплаты с видом оплаты

«повремённый».

11.Определить среднюю сумму оплаты в разрезе абонентов и кассиров за весь период.

12.Определить общую сумму оплаты в разрезе кассиров и видов оплаты за весь период.

102

5)кортеж – строка таблицы;

6)первичный ключ – один или несколько атрибутов, однозначно определяющих кортеж;

7)внешний ключ – это атрибут одного отношения, являющийся первичным ключом другого отношения.

Например,

Сотрудники

ФИО

ОТДЕЛ

ДОЛЖНОСТЬ

ДАТА_РОЖДЕНИЯ

ИВАНОВ

АХО

Инженер по

23.08.62

 

 

ТБ

 

 

ПЕТРОВ

АХО

Зав.складом

11.02.60

СИДОРОВ

АСУ

Инженер

24.03.69

Первичный

ключ

 

Внешний ключ

Ставки

 

 

 

 

 

 

 

 

 

 

ДОЛЖНОСТЬ

 

ОКЛАД

 

 

Инженер по ТБ

 

2000

 

 

Зав.складом

 

2500

 

 

Инженер

 

 

2000

 

 

Первичный ключ

 

 

 

 

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

Количество атрибутов представляет собой степень отношения.

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

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

51

Набор атрибутов одного отношения, являющийся ключом другого (или его же), называется внешним ключом. Внешний ключ используется для установления связи между отношениями.

На отношения в реляционной модели накладываются следующие ограничения:

все кортежи в отношении должны быть уникальными;

имена атрибутов отношения должны быть так же уникальными;

все кортежи отношения должны иметь одинаковую структуру, соответствующую типам атрибутов;

значения атрибутов должны быть атомарными, то есть не содержать групп значений;

порядок следования кортежей не определен.

Существуют следующие зависимости между атрибутами отношений:

Атрибут Y функционально зависит от атрибута X или

X─>Y (функциональная зависимость), если каждому значению X ставится в соответствие точно одно значение Y. Это означает, что в любом кортеже значению X будет соответствовать одно и то же значение Y. Функциональная зависимость может быть частичной и полной, когда не ключевой атрибут зависит от части или, наоборот, всего составного ключа соответственно;

Атрибут Z транзитивно зависит от атрибута X (транзитивная зависимость), если X функционально зависит от атрибута Y, а Y функционально зависит от Z;

Атрибут Y многозначно зависит от атрибута X, если каждому значению X соответствует множество значений Y (многозначная зависимость). Многозначные

зависимости могут быть один ко многим или X─>>Y,многие к одному или X<<─Y и многие ко многим или X<<─>>Y.

2.5. Проектирование баз данных.

Процесс проектирования базы данных по существу

52

Атрибуты таблиц и задания

Дата_поступления

Запросы:

1.Удалить из базы данных информацию по заданному наименованию товара.

2.Увеличить в два раза количество товара с заданной ценой.

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

4.Выбрать коды и наименования товаров с кодами от 5 до 7.

5.Выбрать все сведения о поставщиках указанного города.

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

7.Определить количество наименований товаров с ценой, не превышающей заданное значение.

8.Определить код и название фирмы-поставщика с наибольшим количеством поступившего товара.

9.Определить название товара и его цену, являющуюся минимальной за весь период.

10.Определить общую стоимость товаров, поступивших в заданном месяце.

11.Определить общее количество поступивших товаров в разрезе товаров и фирм-поставщиков.

12.Определить общую стоимость поступивших товаров в разрезе товаров и поставщиков.

5

Таблицы

 

1.

Код_вкладчика, ФИО, Адрес, Сумма_вклада, Вид_вклада

 

2.

Код_кассира, ФИО_кассира

 

3. Номер_записи, Код_вкладчика, Код_кассира, Приход,

 

 

Расход, Дата_операции

 

Запросы:

 

1.

Удалить из базы данных информацию по заданному виду

 

 

вклада

 

2.

Увеличить в два раза сумму вклада вкладчику с заданным

 

 

ФИО.

 

3.

Создать новую таблицу данных, в которую занести

 

 

вкладчиков, их адреса и суммы вкладов , превышающие

 

 

заданное значение.

 

4.

Выбрать коды и ФИО кассиров с кодами от 4 до 8.

 

5.

Выбрать все сведения о вкладах, имеющих приход более

 

 

заданной суммы.

 

6.

Выбрать ФИО и коды кассиров, оформивших расход в

 

 

заданном месяце.

 

7.

Определить количество записей с суммой прихода, не

 

 

101

Атрибуты таблиц и задания

максимальной за весь период.

10.Определить общую стоимость товаров, отпущенных в заданном месяце.

11.Определить общее количество отпущенных товаров в разрезе товаров и сотрудников.

12.Определить общую стоимость отпущенных товаров в разрезе товаров и сотрудников.

3 Таблицы

1.Код_фирмы, Название, Адрес, ФИО_заказчика, Телефон

2.Код_товара, Наименование_товара, Цена

3.Код_фирмы, Код_товара, Код_заказа, Количество_заказа, Дата_заказа, Скидка

Запросы:

1.Удалить из базы данных информацию по заданному названию фирмы.

2.Увеличить в два раза цену товара с заданным наименованием.

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

4.Выбрать коды и наименования товаров с кодами от 5 до 10.

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

6.Выбрать коды, названия и цены товаров, заказанных в заданном месяце.

7.Определить количество наименований товаров с ценой, не превышающей заданное значение.

8.Определить ФИО_заказчика и его телефон, который заказал наименьшее количество товара.

9.Определить название товара и его цену, являющуюся максимальной.

10.Определить общую стоимость товаров, заказанных в заданном месяце.

11.Определить общее количество заказанных товаров в разрезе товаров и фирм.

12.Определить общую стоимость заказанных товаров в разрезе товаров и фирм.

4 Таблицы

1.Код_поставщика, Фирма-поставщик, Адрес, Телефон, Контактное_лицо

2.Код_товара, Наименование_товара

3.Код_поставщика, Код_товара, Цена_приходная, Приход,

100

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

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

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

В качестве простого дублирования данных рассмотрим следующее отношение:

ФИО

ОКЛАД

ИВАНОВ

250

ПЕТРОВ

400

СИДОРОВ

250

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

ФИО

РАЗРЯД

ОКЛАД

ИВАНОВ

3

250

ПЕТРОВ

5

400

СИДОРОВ

3

250

то возникнет избыточное дублирование данных, так как разряд однозначно определяет величину оклада.

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

ФИО

РАЗРЯД

 

РАЗРЯД

ОКЛАД

ИВАНОВ

3

 

3

250

ПЕТРОВ

5

 

5

400

СИДОРОВ

3

 

 

 

 

53

 

 

 

Основной задачей при проектировании БД и является нормализация её отношений с целью исключения избыточности и, как следствие, аномалий обновления. Метод нормальных форм проектирования БД состоит в переводе отношения из первой нормальной формы в нормальные формы более высокого порядка, при этом отношение последовательно может находиться в:

первой нормальной форме (1НФ);

второй нормальной форме (2НФ);

третьей нормальной форме (3НФ);

четвертой нормальной форме (4НФ);

пятой нормальной форме (5НФ).

На практике для исключения избыточности данных обычно достаточно перевести отношение в третью нормальную форму.

Отношение находится в 1НФ, если все его атрибуты являются атомарными.

Например, следующее исходное отношение

R0

ФИО

ОТДЕЛ

ДОЛЖНОСТЬ

СТАВКА

ФИРМА

ВИД

РАБОТЫ

 

 

 

 

 

ИВАНОВ

71

ИНЖ.

40

WPI

АДМ СУБД

ИВАНОВ

71

ИНЖ.

40

ВЕСТА+

АДМ СОС

СИДОРОВ

2

СТ. ИНЖ.

60

ВЕСТА+

АДМ СУБД

СИДОРОВ

2

СТ. ИНЖ.

60

WPI

АДМ СУБД

ПЕТРОВ

12

ТЕХН.

25

WPI

ОП СУБД

находится в 1НФ, так как все его атрибуты являются атомарными.

Отношение находится во 2НФ, если оно находится в 1НФ, и каждый не ключевой атрибут находится в полной функциональной зависимости от первичного ключа.

Для устранения возможной частичной зависимости и перевода во 2НФ необходимо с помощью операции проекции выполнить декомпозицию отношения на два:

54

Атрибуты таблиц и задания

наименования товаров и их цены, превышающие заданное значение.

4.Выбрать коды и наименования товаров с кодами от 3 до 7.

5.Выбрать все сведения о сотрудниках, проживающих в указанном микрорайоне.

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

7.Определить количество товаров с ценой, не превышающей заданное значение.

8.Определить ФИО и должность сотрудника с наибольшим окладом.

9.Определить название товара и его цену, являющуюся минимальной за весь период.

10.Определить общую стоимость товаров, оприходованных в заданном месяце.

11.Определить общее количество поступивших товаров в разрезе товаров и сотрудников.

12.Определить общую стоимость поступивших товаров в разрезе товаров и сотрудников.

2 Таблицы

1.Код_сотрудника, ФИО, Должность, Оклад, Стаж,

2.Код_товара, Наименование_товара,

3.Код_сотрудника, Код_товара, Цена_отпускная, Расход, Дата_отпуска

Запросы:

1.Удалить из базы данных информацию по заданному наименованию товара.

2.Увеличить в два раза оклад сотрудникам с заданной должностью.

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

4.Выбрать коды и наименования товаров с кодами от 5 до 10.

5.Выбрать все сведения о сотрудниках, имеющих стаж работы более 10 лет.

6.Выбрать коды, названия и цены товаров, отпущенных в заданном месяце.

7.Определить количество наименований товаров с ценой, не превышающей заданное значение.

8.Определить ФИО и должность сотрудника с наименьшим окладом.

9.Определить название товара и его цену, являющуюся

99

12.TRANSFORM Sum(Учетная.Цена_приходная) AS [Sum-

Цена_приходная] SELECT Учетная.Код_сотрудника FROM Учетная GROUP BY Учетная.Код_сотрудника PIVOT Учетная.Код_товара;

Вприведенных запросах используются следующие операторы:

DELETE (удаление), UPDATE (обновление), SELECT (выборка), TRANSFORM (создает перекрестный запрос).

Использованы также следующие фразы:

FROM позволяет указать имена исходных таблиц; WHERE определяет условия отбора записей; SET устанавливает новые значения полей;

INTO используется для указания таблицы, созданной на основе выборки из имеющихся таблиц;

INNER JOIN используется для объединения двух таблиц; ON позволяет указать условие, на основе которого объединяются таблицы;

AS используется для указания названия вычисляемого поля; GROUP BY определяет поля, используемые для группировки записей;

PIVOT указывает поле, используемое для создания заголовков столбцов в перекрестном запросе.

3.5.4.Варианты заданий.

Атрибуты таблиц и задания

1 Таблицы

1.Код_сотрудника, ФИО, Должность, Оклад , Дом_адрес

2.Код_товара, Наименование_товара

3.Код_сотрудника, Код_товара, Цена_приходная, Приход, Дата_поступления

Запросы:

1.Удалить из базы данных информацию по заданному наименованию товара.

2.Увеличить в два раза оклад сотрудникам с заданной должностью.

3.Создать новую таблицу данных, в которую занести

98

построить проекцию без атрибутов, находящихся в частичной функциональной зависимости от первичного ключа;

построить проекции на части первичного ключа и атрибутов, зависящих от этих частей.

В нашем случае существуют следующие зависимости между атрибутами рассматриваемого отношения: ФИО─>ОТДЕЛ, ФИО─>ДОЛЖНОСТЬ, ФИО─>СТАВКА, ДОЛЖНОСТЬ ─> СТАВКА, ФИО, ФИРМА─>ВИД РАБОТЫ. Между атрибутами ФИО и ФИРМА нет функциональных зависимостей, и эти атрибуты составляют первичный составной ключ. Выполняя выше указанные действия, получим два отношения R1 и R2:

R1

ФИО

ФИРМА

ВИД

 

 

РАБОТЫ

 

 

 

 

 

 

ИВАНОВ

WPI

АДМ СУБД

 

 

ИВАНОВ

ВЕСТА+

АДМ СОС

 

 

СИДОРОВ

ВЕСТА+

АДМ СУБД

 

 

СИДОРОВ

WPI

АДМ СУБД

 

 

ПЕТРОВ

WPI

ОП СУБД

 

 

R2

 

 

 

 

ФИО

ОТДЕЛ

ДОЛЖНОСТЬ

СТАВКА

ИВАНОВ

71

ИНЖ.

40

СИДОРОВ

2

СТ. ИНЖ.

60

ПЕТРОВ

12

ТЕХН.

25

Отношение находится в 3НФ, если оно находится во 2НФ, и каждый не ключевой атрибут не транзитивно зависит от первичного ключа.

Как и ранее, транзитивные зависимости устраняются с помощью операции проекции на атрибуты, порождающие эти зависимости.

В последнем отношении R2 присутствуют транзитивные зависимости: ФИО─>ДОЛЖНОСТЬ─>СТАВКА. В результате применения операции проекции на атрибуты ДОЛЖНОСТЬ и СТАВКА получим новые отношения R3 и R4:

55

R3

 

 

R4

 

ФИО

ОТДЕЛ

ДОЛЖНОСТЬ

 

ДОЛЖНОСТЬ

СТАВКА

 

 

 

 

 

 

ИВАНОВ

71

ИНЖ.

 

ИНЖ.

40

СИДОРОВ

2

СТ. ИНЖ.

 

СТ. ИНЖ.

60

ПЕТРОВ

12

ТЕХН.

 

ТЕХН.

25

Итак, в результате нормализации отношения R0 спроектирована БД, содержащая отношения R1, R3 и R4, находящиеся в 3НФ.

2.6. Целостность БД.

Обеспечение целостности БД достигается рядом ограничений целостности, включающих: 1)ограничения значений атрибутов; 2)структурные ограничения на кортежи. Первый тип ограничений достигается в СУБД наличием контроля значений атрибутов. Структурные ограничения на кортежи, в свою очередь, предполагают, во-первых, наличие у каждого кортежа отношения первичного ключа, и, во-вторых, требуют обеспечения ссылочной целостности. Ссылочная целостность предполагает наличие для каждого значения внешнего ключа кортежа с таким же первичным ключом.

Например, каждому значению внешнего ключа ДОЛЖНОСТЬ отношения R3 соответствует кортеж с таким же ключом в отношении R4.

ФИО

ОТДЕЛ

ДОЛЖНОСТЬ

 

ДОЛЖНОСТЬ

СТАВКА

ИВАНОВ

71

ИНЖ.

 

ИНЖ.

40

СИДОРОВ

2

СТ. ИНЖ.

 

СТ. ИНЖ.

60

ПЕТРОВ

12

ТЕХН.

 

ТЕХН.

25

Очевидно, что нарушение ссылочной целостности приведет к нарушению целостности данных в БД.

2.7. Языки запросов QBE и SQL.

Обрабатывать информацию, содержащуюся в таблицах БД можно путем использования запросов или в процессе работы

56

1.DELETE Товары.Код_товара, Товары.Наименование_товара FROM Товары WHERE (((Товары.Наименование_товара)="краска желтая"));

2.UPDATE Сотрудники SET Сотрудники.Оклад =

Сотрудники.Оклад*2 WHERE

(((Сотрудники.Должность)="кладовщик"));

3.SELECT Товары.Наименование_товара, Учетная.Цена_приходная

INTO Товары_1 FROM Товары INNER JOIN Учетная ON

Товары.Код_товара = Учетная.Код_товара WHERE

(((Учетная.Цена_приходная)>90));

4.SELECT Товары.Код_товара, Товары.Наименование_товара FROM Товары WHERE (((Товары.Код_товара)>3 And (Товары.Код_товара)<7));

5.SELECT Сотрудники.* FROM Сотрудники WHERE

(((Сотрудники.Дом_адрес) Like "*Жукова*"));

6.SELECT Товары.Код_товара, Товары.Наименование_товара, Учетная.Цена_приходная, Учетная.Дата_поступления FROM Товары INNER JOIN Учетная ON Товары.Код_товара = Учетная.Код_товара WHERE

(((Учетная.Дата_поступления)>#1/1/2009# And (Учетная.Дата_поступления)<#1/31/2009#));

7.SELECT Count(Учетная.Код_товара) AS [Count-Код_товара] FROM

Учетная WHERE (((Учетная.Цена_приходная)>=50));

8.SELECT Сотрудники.ФИО, Сотрудники.Должность, Сотрудники.Оклад FROM Сотрудники WHERE

(((Сотрудники.Оклад)=(select Max(Оклад) from Сотрудники)));

9.SELECT Товары.Наименование_товара, Учетная.Цена_приходная FROM Товары INNER JOIN Учетная ON Товары.Код_товара = Учетная.Код_товара WHERE (((Учетная.Цена_приходная)=(select min(Цена_приходная) from Учетная)));

10.SELECT Sum(Учетная.Цена_приходная) AS [Sum-Цена_приходная] FROM Учетная WHERE (((Учетная.Дата_поступления)>#1/1/2009# And (Учетная.Дата_поступления)<#1/31/2009#));

11.TRANSFORM Sum(Учетная.Приход) AS [Sum-Приход] SELECT

Учетная.Код_сотрудника FROM Учетная GROUP BY Учетная.Код_сотрудника PIVOT Учетная.Код_товара;

97

Рис. 3.5.19. Запрос 11 - перекрестный.

Рис. 3.5.20. Запрос 12 - перекрестный.

Откроем выполненные запросы в режиме Конструктора и для того, чтобы просмотреть их в режиме SQL, нажмём кнопку

(Вид) -> Режим SQL. Содержание этих запросов показано ниже.

96

специально разработанной программы – приложения.

Запрос представляет собой инструкцию на отбор записей. Большинство СУБД разрешают использовать запросы следующих видов:

1)запрос-выборка, предназначенный для отбора данных, хранящихся в таблицах, и не изменяющий эти данные;

2)запрос на изменение, предназначенный для изменения или перемещения данных.

К этому виду запросов относятся:

запросы на добавление записей;

запросы на удаление записей;

запросы на обновление данных;

запросы на создание таблицы.

Для подготовки запросов, как правило, используются два основных языка описания запросов:

1)язык QBE (Query By Example) – язык запросов по образцу;

2)язык SQL (Structured Query Language)

структурированный язык запросов.

Язык QBE предполагает ручное или визуальное формирование запросов.

Язык SQL предполагает программирование запроса.

2.8. Структурированный язык запросов SQL.

Язык SQL предназначен только для взаимодействия с базой данных. Он не содержит необходимых конструкций для разработки законченного приложения (отсутствуют средства разработки интерфейсов, систем печати и пр.). Язык SQL может быть реализован в трех формах:

Интерактивный SQL позволяет пользователям в командной строке или с помощью графического интерфейса непосредственно выполнять операторы языка.

Статический SQL представляет собой фиксированный, написанный заранее код SQL. Он может содержаться

57

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

Динамический SQL генерируется во время выполнения приложением, написанном на языке высокого уровня.

Язык SQL является непроцедурным языком. Другим отличием от большинства языков высокого уровня является использование в SQL трехзначной логики (TRUE, FALSE, UNKNOWN). Кроме того, язык SQL позволяет манипулировать с неопределенным значением в БД, обозначаемым маркером NULL. По сути NULL указывает на то, что значение атрибута либо отсутствует, либо не определено. Значение NULL не совпадает с арифметическим нулем или пробелом.

2.8.1. Типы данных.

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

CHAR(n) - Символьная строка фиксированной длины n.

VARCHAR(n) - Символьная строка переменной длины. Здесь необязательный параметр n определяет максимальное число символов.

NUMERIC(p,s) - Число с общим количеством знаков p и количеством знаков после запятой s.

INT - Целое число;

FLOAT(s) - Число с плавающей запятой. Здесь s – число знаков в мантиссе;

BIT(n) - Двоичная строка фиксированной длины n;

VARYING(n) - Двоичная строка переменной длины;

DATE - Содержит поля year, month и day и имеет формат yyyy-mm-dd;

TIME(s) - Содержит поля hour, minute и second и имеет формат hh:mm:ss. Параметр s определяет количество знаков после запятой в поле second;

58

Рис. 3.5.18. Запрос 10 на выборку с использованием групповой операции Sum().

11.Определить общее количество поступивших товаров в разрезе товаров и сотрудников.

12. Определить общую стоимость поступивших товаров в разрезе товаров и сотрудников.

Запросы 11, 12 – перекрестные запросы. При их выполнении следует выбрать тип запроса перекрестный (рис. 3.5.19. и 3.5.20)

95

Рис. 3.5.16. Запрос 8 на выборку с использованием подзапроса для агрегатной функции.

Рис. 3.5.17. Запрос 9 на выборку с использованием подзапроса для агрегатной функции.

94

2.8.2. Выражения и операции.

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

Язык SQL поддерживает операции:

Арифметические операции:+, –, *, /;

Операторы сравнения:=, <>, <, <=, >, >=;

Логические операции:AND, OR и NOT.

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

2.8.3.Предикаты отношений.

1.Предикат сравнения:

Например,

 

1)

(5,9)>= (5,7)

True

2)

(5,9)>= (7,NULL)

False

3)

(5,NULL)>= (5,22)

Unknown

4)

‘арба‘ < ‘арбуз‘

True

5)

’31.01.05’ < ’01.01.05’

False

2. Предикат BETWEEN (NOT BETWEEN).

Например,

Сотрудники.Дата_рождения BETWEEN ’01.01.65’ AND ’31.12.65’

(выбираются все даты рождения сотрудников, родившихся в

1965 году)

3.

Предикат IN (NOT IN).

 

Например,

предикат 5 IN (3,66,5,21) вырабатывает

значение True.

 

4.

Предикат LIKE (NOT LIKE).

 

Например,

Сотрудники.ФИО LIKE ’И%’

 

 

59

(выбираются все фамилии сотрудников, начинающихся с буквы 'И')

5. Предикат IS NULL (NOT NULL).

 

Например, 4 IS NOT NULL

принимает значение

True

 

2.8.4. Агрегатные функции.

Язык SQL содержит следующие агрегатные функции:

COUNT(*) - подсчитывает количество кортежей;

AVG(X) - вычисляет среднее арифметическое значений атрибута X.

SUM(X) - вычисляет сумму значений атрибута X;

MAX(X) - возвращает наибольшее из значений атрибута X;

MIN(X) - возвращает наименьшее из значений атрибута X.

2.8.5. Создание, модификация и удаление таблиц.

Создание таблицы осуществляется с помощью оператора CREATE TABLE, который имеет вид:

CREATE TABLE имя_таблицы (список атрибутов, их типов и возможно ограничений);

Ограничения могут быть следующие:

NOT NULL - запрещает задавать значение NULL;

PRIMARY KEY - разрешает

хранить

только

уникальные и отличные от NULL значения;

 

FOREIGN KEY – внешний ключ для связи с другими таблицами;

CHECK – контролирует ограничение, указанное в скобках и вырабатывающее значения TRUE, FALSE

или UNKNOWN.

Например,

60

8.Определить ФИО и должность сотрудника с наибольшим окладом.

9.Определить название товара и его цену, являющуюся минимальной за весь период.

10.Определить общую стоимость товаров, оприходованных в заданном месяце.

Запросы 7 - 10 – это тоже запросы на выборку, но при их формировании необходимо использовать агрегатные функции (рис. 3.5.15 - 3.5.18). Чтобы их использовать в запросах, нужно в режиме Конструктора выполнить команду Вид -> Групповые операции.

Иногда бывает, что использование групповых операций невозможно (например, когда в запросе на экран выводятся столбцы, не участвующие в групповых операциях), тогда для агрегатных функций пишутся подзапросы. К таким случаям относятся запросы 8 и 9 (рис. 3.5.16 и 3.5.17)

Рис. 3.5.15. Запрос 7 на выборку с использованием групповой операции count().

93