Структура языка SQL

Автор работы: Пользователь скрыл имя, 22 Января 2013 в 08:37, курсовая работа

Описание работы

Стандарт ISO языка SQL предусматривает использование в операторах CREATE TABLE и ALTER TABLE специальных конструкций, предназначенных для определения требований поддержки целостности данных, к которым относятся условие обязательности наличия данных; ограничения для доменов атрибутов; требования поддержки целостности сущностей; требования поддержки ссылочной целостности данных и требования (бизнес-правила) данного предприятия. Обязательность наличия данных указывается с помощью ключевого слова NOT NULL. Ограничения для доменов атрибутов задаются либо с помощью конструкций CHECK, либо посредством создания соответствующих доменов с помощью операторов CREATE DOMAIN. Первичные ключи определяются с помощью конструкции PRIMARY KEY, а альтернативные ключи описываются с помощью комбинации ключевых слов NOT NULL и описателей UNIQUE. Внешние ключи описываются с помощью конструкции FOREIGN KEY, а также задания правил удаления и обновления с использованием конструкций ON UPDATE и ON DELETE. Бизнес-правила предприятия могут быть заданы с помощью конструкций CHECK и UNIQUE.

Содержание работы

Введение…………………………………………………………………………….3
1 Уровни языка SQL и операторы манипулирования данными….……………..4
1.1 Стандартизация SQL…………………………………………………………...7
1.2 Типы данных языка SQL………………………………………………………9
1.3 Операторы манипулирования данными…………………………………….14
2 Построение сложных запросов………………………………………………...18
2.1 Понятие запроса в SQL……………………………………………………….18
2.2 Структура запросов с использованием нескольких таблиц………………..21
2.3 Объединение (UNION)………………………………………………………..22
2.4 Применение агрегатных функций и вложенных запросов в операторе выбора…………………………………………………………………………………….24
2.5 Внешние объединения………………………………………………………..25
Заключение………………………………………………………………………..28
Глоссарий………………………………………………………………………….30
Список использованных источников……………………………………………31
Приложения……………………………………………………………………….32

Файлы: 1 файл

ПЫЖОВ.doc

— 207.00 Кб (Скачать файл)

Символьная строка может быть определена как имеющая фиксированную или переменную (VARYING) длину. Если строка определена с фиксированной длиной, то при вводе в нее меньшего количества символов строковое значение дополняется до указанной длины пробелами, добавляемыми справа. Если строка определена с переменной длиной, то при вводе в нее меньшего количества символов в базе данных будут сохранены только введенные символы, что позволяет достичь определенной экономии внешней памяти. Например, столбец branchNo таблицы Branch с обозначением номера отделения имеет фиксированную длину четыре символа и может быть объявлен следующим образом:

  branchNo CHAR(4)

  Столбец address таблицы  PrivateOwner имеет переменную длину  значения {максимум до 30 символов), поэтому  он может быть объявлен следующим образом:

   address VARCHAR(30)

  Битовые данные (тип bit) используется для определения битовых строк, т.е. последовательности двоичных цифр (битов), каждая из которых может иметь значение либо 0, либо 1. Для опредеяения данных битового типа используется формат, сходный с определением символьных данных:

OBIT IVARYING] {length].

Например, для сохранения битовой строки с фиксированной  длиной и значением «ООН» может быть объявлен столбец bitstring:

bitString BIT(4)

Тип точных числовых данных используется для определения чисел, которые имеют точное представление в компьютере. Числа состоят из цифр и необязательных символов (десятичной точки, знака "плюс" или "минус"). Данные точного числового типа определяются значностъю (precision) и длиной, дробной части (scale). Значность задает общее количество значащих десятичных цифр числа, в которое входят длина целой и дробной частей, но без учета самой десятичной точки. Дробная часть указывает количество дробных десятичных разрядов числа. Например, точное число -12 .345 имеет значность, равную 5 цифрам, и дробную часть длиной 3. Особой разновидностью точных чисел являются целые числа. Существует несколько способов определения данных точного числового типа:

NUMERIC [ precision - [, scale] ]

DECIMAL [ precision [, scale] ]

INTEGER

SMALLXNT

INTEGER . (может быть сокращено до INT) и DECIMAL (до DEC)

Типы NUMERIC и DECIMAL предназначены для  хранения чисел в десятичном формате. По умолчанию длина дробной части  равна нулю, а принимаемая по умолчанию  значность зависит от реализации. Тип INTEGER используется для хранения больших положительных или отрицательных целых чисел. Тип SMALLINT используется для хранения небольших положительных или отрицательных целых чисел. При использовании этого типа данных расход внешней памяти существенно сокращается. Например, максимальное абсолютное значение числа, которое может сохраняться в столбцах с типом данных SMALLINT, чаще всего составляет 32 767. Для столбца rooms таблицы PropertyForRent, в котором сохраняются сведения о количестве комнат сдаваемого в аренду объекта, можно выбрать тип SMALLINT и объявить его следующим образом:

rooms SMALLINT Столбец salary таблицы Staff может быть объявлен следующим  образом:

salary DECIMAL(7,2)

В этом случае максимальное значение заработной платы составит 99 999.99 фунтов стерлингов,

Округленные числовые данные (тип approximate numeric). Тип округленных числовых данных используется для описания данных, которые нельзя точно представить  в компьютере, например действительных чисел. Для представления округленных чисел или чисел с плавающей точкой используется экспоненциальная система обозначений, в которой число записывается с помощью мантиссы, умноженной на определенную степень десяти (порядок), на пример: 10ЕЗ, +5.2Е6, -0.2Е-4. Существует несколько способов определения данных с типом округленных числовых данных:

FLOAT [precision]

REAL

DOUBLE PRECISION

Параметр precision задает значность мантиссы. Значность определений типа REAL и DOUBLE PRECISION зависит от конкретной реализации.

Дата и время (тип datetime). Тип данных "дата/время" используется для определения моментов времени с некоторой установленной точностью. Примерами являются даты, отметки времени и время суток. Стандарт ISO разделяет тип данных "дата/время" на подтипы YEAR (Год), MONTH (Месяц), DAY (День), HOUR (Час), MINUTE (Минута), SECOND (Секунда), TIMEZONE_HOUR (Зональный час) и TIMEZONE_MINUTE (Зональная минута). Два последних типа определяют час и минуты сдвига зонального времени по отношению к всеобщему скоординированному времени (прежнее название — гринвичское время). Поддерживаются три типа полей даты/времени.

DATE

TIME [timePrecision] [WITH TIME 2ONS]

TIMESTAMP [timePrecision] [WITH TIME ZONE]

Тип данных DATE используется для хранения календарных дат, включающих поля YEAR, MONTH и DAY. Тип данных TIME используется для хранения отметок времени, включающих поля HOUR, MINUTE и SECOND. Тип данных TIMESTAMP служит для совместного хранения даты и времени. Параметр timePrecision задает количество дробных десятичных знаков, определяющих точность представления значений в поле SECOND. Если этот параметр опущен, по умолчанию его значение для столбцов типа TIME принимается равным нулю (т.е. сохраняется целое количество секунд), тогда как для полей типа TIMESTAMP он принимается равным 6 (т.е. отметки времени сохраняются с точностью до микросекунд). Наличие ключевого слова WITH TIME ZONE определяет использование полей TIMEZONE_HOUR и TIMEZONE_MINUTE. Например, столбец date таблицы Viewing, представляющий дату (день, месяц и год) осмотра клиентом сдаваемого в аренду объекта, может быть определен следующим образом:

viewDate DATE

Интервальный тип данных interval. Данные с интервальным типом используются для представления периодов времени. Любой интервальный тип данных состоит  из набора полей: YEAR, MONTH, DAY, HOUR, MINUTE и SECOND. Существуют два класса данных с интервальным типом: интервалы год-месяц и интерналы сутки-время суток. В первом случае данные включают только два поля — YEAR и/или MONTH. Данные второго типа могут состоять из произвольной последовательности полей DAY, HOUR, MINUTE, SECOND.

Данные интервального типа определяются следующим образом:

INTERVAL -{{startField TQ.endField} singleDatetimeField}

StartField = YEAR MONTH | DAY j HOUR | MINUTE

             [ (intervaiLeadingFieldPrecisicm) ]

endField = YEAR | MONTH | DAY j .HOUR-.. | MINUTE | SECOND

            [(fractionalSecondsPrecision)]

singleDatetimeField = startPield |;SECONB

            [ (intervejlbeadingFie.IdPrecis.icm [,fractionalSecondsRrecision])]

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

INTERVAL YEAR(2) ТО MONTH

Это объявление описывает интервал времени, значение которого может находиться между 0 годом, 0 месяцем и 99 годом, 11 месяцем. Еще один пример:

INTERVAL HOUR TO SECOND(4)

Это объявление описывает интервал времени, значение которого может изменяться от 0 часов, 0 минут, о секунд до 99 часов, 59 минут 59.9999 секунды. (Число дробных  десятичных знаков для секунд установлено равным 4.)

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

 

1.3 Операторы манипулирования данными

 

DML - Data Manipulation Language. Язык манипулирования  данными. Используется для работы  с информацией, хранимой в базе  данных.

Основными командами  этой группы являются:

- Select - вычитка информации.

- Insert - добавление информации.

- Update - обновление информации.

- Delete - удаление информации.

Список столбцов в  данной команде не является обязательным параметром. В этом случае должны быть указаны значения для всех полей  таблицы в том порядке, как  эти столбцы были перечислены в команде CREATE TABLE, например:

INSERT INTO publishers VALUES (16,"Microsoft Press","http://www.microsoft.com");

Пример с указанием  списка столбцов:

INSERT INTO publishers (publisher,pub_id)

            VALUES ("Super Computer Publishing",17);

Модификация записей UPDATE

UPDATE <имя_таблицы> SET <имя_столбца>=<значение>,...

         [WHERE <условие>]

Если задано ключевое слово WHERE и  условие, то команда UPDATE применяется  только к тем записям, для которых  оно выполняется. Если условие не задано, UPDATE применяется ко всем записям. Пример:

UPDATE publishers SET url="http://www.superpub.com" WHERE pub_id=17;

В качестве условия используются логические выражения над константами и  полями. В условиях допускаются: операции сравнения: > , < , >= , <= , = , <> , != . В SQL эти операции могут применяться не только к числовым значениям, но и к строкам ( "<" означает раньше, а ">" позже в алфавитном порядке) и датам ( "<" раньше и ">" позже в хронологическом порядке).

оперции проверки поля на значение NULL: IS NULL, IS NOT NULL

операции проверки на вхождение  в диапазон: BETWEEN и NOT BETWEEN.

операции проверки на вхождение  в список: IN и NOT IN

операции проверки на вхождение  подстроки: LIKE и NOT LIKE

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

UPDATE publishers SET url="url not defined" WHERE url IS NULL;

Эта команда находит в таблице publishers все неопределенные значения столбца url и заменяет их строкой "url not defined".

Удаление записей DELETE

DELETE FROM <имя_таблицы> [ WHERE <условие> ]

Удаляются все записи, удовлетворяющие  указанному условию. Если ключевое слово WHERE и условие отстутствуют, из таблицы  удаляются все записи. Пример:

DELETE FROM publishers WHERE publisher = "Super Computer Publishing";

Эта команда удаляет запись об издательстве Super Computer Publishing.

Выборка данных SELECT

Для извлечения записей  из таблиц в SQL определен оператор SELECT. С помощью этой команды осуществляется не только операция реляционной алгебры "выборка" (горизонтальное подмножество), но и предварительное соединение (join) двух и более таблиц. Это наиболее сложное и мощное средство SQL, полный синтаксис оператора SELECT имеет вид:

  SELECT [ALL | DISTINCT] <список_выбора>

           FROM <имя_таблицы>, ...

           [ WHERE <условие> ]

           [ GROUP BY <имя_столбца>,... ]

              [ HAVING <условие> ]

           [ORDER BY <имя_столбца> [ASC | DESC],... ]

Порядок предложений  в операторе SELECT должен строго соблюдаться (например, GROUP BY должно всегда предшествовать ORDER BY), иначе это приведет к появлению ошибок. Этот оператор всегда начинается с ключевого слова SELECT. В кострукции <список_выбора> определяется столбец или столбцы, включаемые в результат. Он может состоять из имен одного или нескольких столбцов, или из одного символа * (звездочка), определяющего все столбцы. Элементы списка разделяются запятыми.

Некоторые задачи нельзя решить с использованием только операторов сравнения. Например, мы хоти найти web-site издательтва "Wiley", но не знаем его точного наименования. Для решения этой задачи предназначено ключевое слово LIKE, его синтаксис имеет вид:

WHERE <имя_столбца> LIKE <образец> [ ESCAPE <ключевой_символ> ]

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

% (знак процента) - заменяет  любое количество символов

_ (подчеркивание) - заменяет  одиночный символ.

Попробуем найти искомый web-site:

SELECT publiser, url FROM publishers WHERE publisher LIKE '%Wiley%';

В соотвествии с шаблоном СУБД найдет все строки включающие в себя подстроку "Wiley". Другой пример: найти все книги, название которых начинается со слова "SQL":

 SELECT title FROM titles WHERE title LIKE 'SQL%';

В том случае, когда  надо найти значение, которое само содержит один из символов шаблона, используют ключевое слово ESCAPE и <ключевой_символ>. Литерал, следующий в шаблоне после ключевого символа, рассматривается как обычный символ, все последующие символы имеют обычное значение. Например, нам надо найти ссылку на web-страницу, о которой известно, что в ее url содержится подстрока "my_works":

SELECT site, url FROM wwwsites WHERE url LIKE '%my@_works%' ESCAPE '@';

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 Построение сложных запросов

 

2.1 Понятие запроса в SQL

 

Одним из ключевых понятий языка SQL является понятие запроса, уже упоминавшееся выше. Запрос представляет собой выражение на языке SQL, реализующее одну из требуемых функций языка – определение данных, манипуляция данными и другие. В отличие от процедурных языков, где для выполнения некоторой функции можно описать целую последовательность операций, в языке SQL каждое обращение к базе данных реализуется в виде одной единственной отдельной команды – запроса, после исполнения которого можно переходить к выполнению следующего запроса. [5, С.111]

Запрос является инструкцией, с помощью которой SQL обращается к базе данных. Запрос состоит из одной или более логических частей, которые называются предложениями. Предложения начинаются ключевым словом и состоят из ключевых слов и аргументов. Ключевое слово – используемые в выражениях языка SQL слова, имеющие специальное значение (например, конкретные команды языка – CREATE, DROP, SELECT). Ключевые слова не могут быть использованы ни для каких других целей, например, в качестве имени объекта базы данных.

В языке SQL можно выделить следующие основные ключевые слова:

Операторы определения  данных DDL

CREATE - Создает структуры для хранения данных

ALTER - Изменяет структуры данных или ограничения

Информация о работе Структура языка SQL