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

Автор работы: Пользователь скрыл имя, 25 Мая 2013 в 05:07, курсовая работа

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

Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Дональд Чэмбэрлин (Donald D. Chamberlin) и Рэй Бойс (Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (англ. cost-based optimizer), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.

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

Введение…………………………………………………………………………5
Основная часть…………………………………………………………………..8
1.SQL……………………………………………………………………………..8
1.1 Идентификаторы языка SQL……………………………………………10
1.2 Скалярные типы данных языка SQL……………………………………10
1.3 Логические данные (тип boolean)………………………………………11
1.4 Символьные данные (тип character)…………………………………….11
1.5 Битовые данные (тип bit)………………………………………………..12
1.6 Точные числовые данные (тип exact numeric)…………………………12
1.7 Округленные числовые данные (тип approximate numeric)…………..13
1.8 Дата и время (тип datetime)…………………………………………….14
1.9 Интервальный тип данных interval…………………………………….15
2. Структура языка SQL………………………………………………………..16
2.1 Структура запросов SQL…………………………………………………17
2.2 Операторы модификации данных………………………………………..26
2.3 Транзакции в SQL…………………………………………………………34
2.4 Защита данных…………………………………………………………….34
2.5 Обработка ошибок………………………………………………………...36
3. Таблицы SQL………………………………………………………………….38
3.1 Создание баз данных……………………………………………………...39
3.2 Создание таблиц (оператор CREATE TABLE)…………………………40
3.3 Удаление таблиц (оператор DROP TABLE)……………………………42
Заключение………………………………………………………………………43
Глоссарий………………………………………………………………………..46
Список используемой литературы…………………………………………….47
Приложение А…………………………………………………………………..48

Файлы: 1 файл

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

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

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

salary DECIMAL(7,2)

 

1.7 Округленные числовые  данные (тип approximate numeric)

 

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

FLOAT [precision]

REAL

DOUBLE PRECISION

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

 

1.8 Дата и  время (тип 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.

 

1.9 Интервальный тип данных 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).

 

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

 

Все операторы языка SQL можно разделить на несколько типов:

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

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

Операторы модификации данных - позволяют создавать/удалять базовые таблицы и изменять их структуру (добавлять столбцы, связи между таблицами).

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

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

Оператор ошибки - после выполнения последнего SQL запроса содержит код выполнения операции (код ошибки либо удачного выполнения).

Все используемые в языке SQL операторы представляют собой предложения, содержащие определенные операторы и их операнды. В некоторых операторах возможна вложенность нескольких операций [3, с.42].

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

2.1 Структура запросов SQL

 

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

В синтаксических конструкциях для обращения к БД используются следующие обозначения:

1) звездочка (*) для  обозначения «все» – употребляется в обычном для программирования смысле, т.е. «все случаи, удовлетворяющие определению»;

2) квадратные скобки ([]) – означают, что конструкции, заключенные  в эти скобки, являются необязательными  (т.е. могут быть опущены);

3) фигурные скобки ({}) – означают, что конструкции, заключенные в эти скобки, должны рассматриваться как целые синтаксические единицы, т.е. они позволяют уточнить порядок разбора синтаксических конструкций, заменяя обычные скобки, используемые в синтаксисе SQL;

4) многоточие (…) – указывает на то, что непосредственно предшествующая ему синтаксическая единица факультативно может повторяться один или более раз;

5) прямая черта (|) –  означает наличие выбора из  двух или более возможностей. Например, обозначение ASC|DESC указывает, можно выбрать один из терминов ASC или DESC; когда же один из элементов выбора заключен в квадратные скобки, то это означает, что он выбирается по умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции будет восприниматься как выбор ASC);

6) точка с запятой (;) – завершающий  элемент предложений SQL;

7) запятая (,) – используется  для разделения элементов списков; 

8) пробелы ( ) – могут вводиться  для повышения наглядности между  любыми синтаксическими конструкциями  предложений SQL;

9) жирные прописные латинские  буквы и символы – используются  для написания конструкций языка  SQL и должны (если это специально  не оговорено) записываться в  точности так, как показано-……..;

10) строчные буквы используются  для написания конструкций, которые должны заменяться конкретными значениями, выбранными пользователем, причем для определенности отдельные слова этих конструкций связываются между собой символом подчеркивания (_);

11) термины «таблица» и «столбец»  заменяют (с целью сокращения  текста синтаксических конструкций) термины «имя_таблицы», «имя_столбца», …, соответственно;

12) термин «таблица»  - используется для обобщения  таких видов таблиц, как базовая_таблица,  представление или псевдоним;  здесь псевдоним служит для  временного (на момент выполнения запроса) переименования и (или) создания рабочей копии базовой_таблицы (представления).

В дальнейшем все примеры приводятся для базы данных приведенной в  приложении А.

Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Простейший оператор SELECT выглядит:

SELECT * FROM PC;

Он осуществляет выборку всех записей из объекта  БД табличного типа с именем PC. При  этом столбцы и строки результирующего  набора не упорядочены. Чтобы упорядочить поля результирующего набора, их следует перечислить через запятую в нужном порядке после слова SELECT:

SELECT price, speed, hd, ram, cd, model, code

FROM Pc;

В таблице 1 приводится результат выполнения этого запроса.

 

Таблица 1 – Запрос SELECT

price

speed

hd

ram

cd

model

code

600.0

500

5

64

12x

1232

1

850.0

750

14

128

40x

1121

2

600.0

500

5

64

12x

1233

3

850.0

600

14

128

40x

1121

4

850.0

600

8

128

40x

1121

5

950.0

750

20

128

50x

1233

6

400.0

500

10

32

12x

1232

7

350.0

450

8

64

24x

1232

8

350.0

450

10

32

24x

1232

9

350.0

500

10

32

12x

1260

10

980.0

900

40

128

40x

1233

11


Вертикальную проекцию таблицы  РC можно получить, если перечислить  только необходимые поля. Например, чтобы получить информацию только о  скорости процессора и объеме оперативной  памяти компьютеров, следует выполнить  запрос:

SELECT speed, ram FROM PC;

который вернет следующие данные:

Таблица 2 – Запрос SELECT speed

speed

ram

500

64

750

128

500

64

600

128

600

128

750

128

500

32

450

64

450

32

500

32

900

128


Следует отметить, что вертикальная выборка может содержать дубликаты  строк в том случае, если она не содержит потенциального ключа, однозначно определяющего запись[3, с.116]. В таблице PC потенциальным ключом является поле code, которое выбрано в качестве первичного ключа таблицы. Поскольку это поле отсутствует в запросе, в приведенном выше результирующем наборе имеются дубликаты строк (например, строки 1 и 3). Если требуется получить уникальные строки (скажем, нас интересуют только различные комбинации скорости процессора и объема памяти, а не характеристики всех имеющихся компьютеров), то можно использовать ключевое слово DISTINCT:

SELECT DISTINCT speed, ram FROM Pc;

что даст такой результат:

Таблица 3 – 1-й результат запроса  SELECT DISTINCT speed

speed

ram

450

32

450

64

500

32

500

64

600

128

750

128

900

128


Помимо DISTINCT может применяться также ключевое слово ALL (все строки), которое принимается по умолчанию.

Чтобы упорядочить строки результирующего  набора, можно выполнить сортировку по любому количеству полей, указанных  в предложении SELECT. Для этого используется предложение ORDER BY , являющееся всегда последним предложением в операторе SELECT. При этом в списке полей могут указываться как имена полей, так и их порядковые позиции в списке предложения SELECT.

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