Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пиппец 2.doc
Скачиваний:
107
Добавлен:
07.06.2015
Размер:
3.16 Mб
Скачать

75. Языки описания запросов. Язык sql.

Языки описания запросов. Язык запросов SQL Структура языка запросов SQL. Язык определения данных DDL и язык манипулирования данными DML.

Использование SQL для выборки данных из таблицы. Оператор Select. Группировка и упорядочение данных. Итоговые функции в операторе Select. Пример применения оператора Select.

Операторы Insert Into, Delete From, Update. Примеры их использования.

Операторы Create Table, Alter Table. Примеры их использования

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

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

  • SQL (Structured Query Language) – структурированный язык запросов.

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

Команды SQL разделены на пять категорий: команды DDL, команды DML, команды управления транзакцией, команды управления сеансом и встроенные команды SQL.

Язык определения данных (Data Definition Language – DDL) и язык манипулирования данными (Data Manipulation Language – DML).

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

Встроенные команды SQL применяются совместно с командами DDL, DML и командами управления транзакцией в программах на процедурном языке. Пример: OPEN (открывает курсор проверяя запрос и подставляя хост-переменные, указанные во фразе USING, во фразу WHERE), CLOSE, FETCH (выполняет выборку одной или нескольких строк из результирующего набора, возвращаемого оператором SELECT, назначая для хост-переменных значения из списка выбора.

Операторы языка SQL.

Select [all | distinct] –команда выборки данных

[<псевдоним_таблицы>.]<выбираемый_элемент> [AS <заголовок_столбца>]

[, [<псевдоним_таблицы >.]< выбираемый_элемент > [AS < заголовок_столбца >] ...]

FROM <источники данных>

[WHERE <условие_фильтра>]

[GROUP BY <критерий_группировки>]

[HAVING <фильтр>]

[ORDER BY <критерий_упорядочения>[ASC | DESC]

Следующие функции допустимы для использования с <выбираемый_элемент>, они являются полями или выражениями включающими поля:

AVG(<выбираемый_элемент >) - Среднее по колонке числовых данных.

COUNT(<выбираемый_элемент >) - Счетчик в колонке. COUNT(*) счетчик числа строк в выходе запроса.

MIN(<выбираемый_элемент >) - Определяет наименьшее значение в колонке.

MAX(<выбираемый_элемент >) - Определяет наибольшее значение в колонке.

SUM(<выбираемый_элемент >) - Сумма по колонке числовых данных.

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

SELECT Reader.cfam as Фамилия, Reader.cname as Имя, Reader.cpatr as Отчество, Issue.iticket as Билет, COUNT(*) as Количество;

FROM library!reader INNER JOIN library!issue ;

ON Reader.iticket = Issue.iticket;

GROUP BY Issue.iticket;

ORDER BY 5 DESC

Пример 2. Отобразить сведения обо всех изданиях хранящихся в библиотеке.

SELECT Edition.iedition, Author1.cfamily, Caption.ccaption,;

Edition.iyear;

FROM library!caption INNER JOIN library!edition;

INNER JOIN library!author;

INNER JOIN library!author1 ;

ON Author1.iauthor = Author.iauthor ;

ON Author.iedition = Edition.iedition ;

ON Caption.icaption = Edition.icaption

Оператор определения таблицы имеет следующий синтаксис:

CREATE TABLE <имя таблицы> (<имя поля> тип поля [(<длина поля>[,десят. часть])];

[Free];

[Check лог. выражение 1 [Error сообщение];

[Defaultвыражение];

[Primary Key | Unique];

[References имя родит таблицы[Tagимя тэга]; [, …]

Пример.

CREATE TABLE library!Reader(idTicket integer) Default 222222

Оператор Insert Into

INSERT INTO имя таблицы[(имя поля1[,имя поля2, ...])]

VALUES (выражение1 [, выражение2, ...])

Добавляет в таблицу указанную запись.

Пример.

INSERT INTO ”Reader” (“idTicket”, “cSurname”)

VALUES (2007, ‘Иванов’)

Оператор Delete From

Delete From имя таблицы[Whereфильтр]

Удаляет записи из таблицы.

Пример.

DELETE FROM“reader”Where“cSurname”='Петров'

Оператор Update

UPDATE [имя БД!]имя таблицы;

Set имя поля1=выражение1 [,имя поля2=выражение2 …]

Where фильтр;

Обновляет записи в таблице (только для одной таблицы).

Пример.

UPDATE “reader” Set “idTicket”=“idTicket”+1000 Where “cSurname”='Петров‘

Оператор Alter Table

ALTER TABLE <имя таблицы> ;

Add | Alter| Drop [Column] <имя поля> [тип поля [(<длина поля>[,десят. часть])]] ;

[Check лог. выражение 1 [Error сообщение];

[Defaultвыражение];

[Primary Key | Unique];

[References имя родит таблицы[Tagимя тэга];

[, …]

Оператор модификации структуры таблицы.

Пример.

ALTER TABLE library!Reader;

Add iIndex Integer(6);

Default 222222

73. Проектирование баз данных. Метод нормальных форм

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

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

Особенности проектирования БД методом нормальных

Процесс проектирования БД с использованием метода НФ является итерационным и заключается в последовательном переводе отношений из первой НФ в НФ более высокого порядка по определенным правилам. Каждая следующая НФ ограничивает определенный тип функциональных зависимостей, устраняет соответствующие аномалии при выполнении операций над отношениями БД и сохраняет свойства предшествующих нормальных форм. Наиболее часто выделяют следующую последовательность нормальных форм: 1НФ, 2НФ, 3НФ, усиленная третья нормальная форма (нормальная форма Бойса-Кодда (БКНФ)), 4НФ, 5НФ.

Исходное отношение

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

Зависимости между атрибутами отношения

Атрибут B функционально зависит от атрибута A (AB), если каждому значению A соответствует в точности одно значение B. В рассматривавшемся отношении можно выделить функциональные зависимости Код_автора→Автор, Издательство→Город и другие. Функциональная взаимозависимость (взаимно однозначное соответствие) между A и B имеется в том случае если существуют функциональные зависимости вида AB и BA. Пример. Код_автора Автор (если нет авторов с одинаковыми фамилиями, именами и отчествами). Частичной зависимостью называется зависимость неключевого атрибута от части составного ключа. Пример. Атрибут Фамилия находится в функциональной зависимости от атрибута Билет, являющегося частью первичного ключа. Следовательно атрибут Фамилия находится в частичной зависимости от ключа отношения. Альтернативным вариантом является полная функциональная зависимость ключевого атрибута от всего составного ключа. (Дата_выдачи, Дата_Возврата, Срок)

Исходное отношение (1НФ)

Библиотека (Переплет, Билет, Код_автора, Автор, Код_издания, Заголовок, Вид, Издательство, Город, Год, Переплет, Стоимость, Дата_выдачи, Срок, Дата_возврата, Билет, Фамилия, Имя, Отчество)

2НФ

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

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

2НФ

Библиотека (Переплет, Билет, Дата_выдачи, Дата_возврата, Срок)

Переплет(Переплет, Код_издания, Стоимость, Заголовок, Вид, Издательство, Год, Город, Код_автора, Автор).

2НФ

Читатель (Билет, Фамилия, Имя, Отчество)

3НФ

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

Атрибут C зависит от атрибута A транзитивно (существует транзитивная зависимость), если для атрибутов A, B, C выполняются условия AB и BC, но обратная зависимость отсутствует. Пример. Код_издания→Издательство→Город

3НФ

Библиотека (Переплет, Билет, Дата_выдачи, Дата_возврата, Срок)

Переплет (Переплет, Код_издания, Стоимость).

Издание (Код_издания, Заголовок, Вид, Издательство, Год)

Издательство (Издательство, Город)

Автор (Код_автора, Автор)

Читатель (Билет, Фамилия, Имя, Отчество)

79