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

Автор работы: Пользователь скрыл имя, 03 Сентября 2011 в 18:18, курсовая работа

Краткое описание

Язык SQL является первым и пока единственным стандартным языком работы с базами данных, который получил достаточно широкое распространение.

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

Введение...................................................................................................................4
1.Типы данных языка SQL, определенные стандартом ISO...............................6
1.1. Идентификаторы языка SQL...........................................................................6
1.2. Скалярные типы данных языка SQL..............................................................6
1.3 Точные числовые данные (тип exact numeric)................................................8
2. Средства поддержки целостности данных......................................................13
2.1. Обязательные данные.....................................................................................13
2.2. Ограничения для доменов.............................................................................14
2.3. Целостность сущностей.................................................................................16
2.4. Ссылочная целостность.................................................................................17
2.5. Требования данного предприятия................................................................20
3. Определение данных.........................................................................................22
3.1. Создание баз данных......................................................................................23
3.2. Создание таблиц (оператор CREATE TABLE)............................................24
3.3. Модификация определения таблицы (оператор ALTER TABLE).............28
3.4. Удаление таблиц (оператор DROP TABLE)................................................29
3.5. Создание индекса (оператор CREATE INDEX)..........................................30
3.6. Удаление индекса (оператор DROP INDEX)...............................................32
4. Представления...................................................................................................33
5. Использование транзакций ..............................................................................34
6. Управление доступом к данным......................................................................37
Заключение.............................................................................................................40
Библиографический список..................................................................................43
Приложение............................................................................................................44

Содержимое работы - 1 файл

Базы данных- Структура языка SQL1.doc

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

    SELECT staffNo, COUNT(salary)

    FROM Staff;

    Ошибка  состоит в том, что в данном запросе отсутствует конструкция GROUP BY, а обращение к столбцу staffNo в списке выборки SELECT выполняется без применения агрегирующей функции. 

 

     6. Подзапросы.

    В этом разделе мы обсудим использование  законченных операторов SELECT, внедренных в тело другого оператора SELECT. Внешний (второй) оператор SELECT использует результат выполнения внутреннего (первого) оператора для определения содержания окончательного результата всей операции. Внутренние запросы могут находиться в конструкциях WHERE и HAVING внешнего оператора SELECT — в этом случае они получают название подзапросов, или вложенных запросов. Кроке того, внутренние операторы SELECT могут использоваться в операторах INSERT, UPDATE и DELETE. Существуют три типа подзапросов.

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

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

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

 

7. Многотабличные запросы.

    Если  необходимо получить информацию из нескольких таблиц, то можно либо применить  подзапрос, либо выполнить соединение таблиц. Если результирующая таблица запроса должна содержать столбцы из разных исходных таблиц, то целесообразно использовать механизм соединения таблиц. Для выполнения соединения достаточно в конструкции FROM указать имена двух и более таблиц, разделив их запятыми, после чего включить в запрос конструкцию WHERE с определением столбцов, используемых для соединения указанных таблиц. Помимо этого, вместо имен таблиц можно использовать псевдонимы, назначенные им в конструкции FROM. В этом случае имена таблиц и назначаемые им псевдонимы должны разделяться пробелами. Псевдонимы могут использоваться с целью уточнения имен столбцов во всех тех случаях, когда возможна неоднозначность в отношении того, к какой таблице относится тот или иной столбец. Кроме того, псевдонимы могут использоваться для сокращенного обозначения имен таблиц. Если для таблицы определен псевдоним, он может применяться в любом месте, где требуется указание имени этой таблицы.

 

8. Выполнение соединений

    Соединение  является подмножеством более общей комбинации данных двух таблиц, называемой декартовым произведением. Декартово произведение двух таблиц представляет собой другую таблицу, состоящую из всех возможных пар строк, входящих в состав обеих таблиц. Набор столбцов результирующей таблицы представляет собой все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы. Если ввести запрос к двум таблицам без задания конструкции WHERE, результат выполнения запроса в среде SQL будет представлять собой декартово произведение этих таблиц. Кроме того, стандарт ISO предусматривает специальный формат оператора SELECT, позволяющий вычислить декартово произведение двух таблиц:

SELECT [DISTINCT. | ALL] {* | columnList]

FROM tableNamel CROSS JOIN tаЫеName2

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

    1. Формируется декартово произведение  таблиц, указанных в конструкции  FROM.

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

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

    4. Если в исходном запросе присутствует  конструкция SELECT DISTINCT, из результирующей  таблицы удаляются все строки-дубликаты.  В реляционной алгебре действия, выполняемые на 3 и 4 этапах, эквивалентны операции проекции по столбцам, заданным в списке выборки SELECT.

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

    8.1 Внешние соединения

    При выполнении операции соединения данные из двух таблиц комбинируются с образованием пар связанных строк, в которых  значения сопоставляемых столбцов являются одинаковыми. Если одно из значений в сопоставляемом столбце одной таблицы не совпадает ни с одним из значений в сопоставляемом столбце другой таблицы, то соответствующая строка удаляется из результирующей таблицы. Стандартом ISO предусмотрен и другой набор операторов соединений, называемых внешними соединениями. Во внешнем соединении в результирующую таблицу помещаются также строки, не удовлетворяющие условию соединения. Чтобы понять особенности выполнения операций внешнего соединения, воспользуемся упрощенными таблицами Branch и PropertyForRent, содержимое которых представлено в таблице. 4 и 5. 

Обычное (внутреннее) соединение этих таблиц выполняется  с помощью сле-

дующего оператора SQL:

SELECT b.*, p.*

FROM Branchl b, PropertyForRentl p

WHERE b.bCity = p.pCity;

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

    Как можно видеть, в результирующей таблице запроса имеются только две строки, содержащие одинаковые названия городов, выбранные из обеих таблиц. Обратите внимание, что в исходных данных нет соответствия для отделения компании в Глазго и для объекта, сдаваемого в аренду в городе Абердин. Если в результирующую таблицу потребуется включить и эти не имеющие соответствия строки, то следует использовать внешнее соединение. Существуют три типа внешнего соединения: левое, правое и полное.  

    8.2Ключевые слова EXISTS и NOT EXIST.

    Ключевые  слова EXISTS и NOT EXISTS предназначены для  использования только совместно  с подзапросами. Результат их обработки  представляет собой логическое значение TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки ключевого слова EXISTS будет значение FALSE. Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS. Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов. Как правило, с целью упрощения во всех следующих за обсуждаемыми ключевыми словами подзапросах применяется такая форма записи:

(SELECT * FROM . . . ) 

    8.3 Комбинирование результирующих таблиц (операции UNION, INTERSECT и EXCEPT)

    В языке SQL можно использовать обычные  операции над множествами — объединение (union), пересечение (intersection) и разность (difference), — позволяющие комбинировать результаты выполнения двух и более запросов в единую результирующую таблицу.

    Объединением двух таблиц А и В называется таблица, содержащая все

    строки, которые имеются в первой таблице (А), во второй таблице (В) или в обеих этих таблицах одновременно,

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

    Разностью двух таблиц А и В называется таблица, содержащая все строки, которые присутствуют в таблице А, но отсутствуют в таблице В. Все эти операции над множествами графически представлены на рис. 1. На таблицы, которые могут комбинироваться с помощью операций над множествами, накладываются определенные ограничения. Самое важное из них состоит в том, что таблицы должны быть совместимы, по соединению — т.е. они должны иметь одну и ту же структуру. Это означает, что таблицы должны иметь одинаковое количество столбцов, причем в соответствующих столбцах должны размещаться данные одного и того же типа и длины. Обязанность убедиться в том, что значения данных соответствующих столбцов принадлежат одному и тому же домену, возлагается на пользователя. Например, мало смысла в том, чтобы объединять столбец с данными о возрасте работников с информацией о количестве комнат в сдаваемых в аренду объектах, хотя оба столбца будут иметь один и тот же тип данных — SMALLINT. 

    Три операции над множествами, предусмотренные  стандартом ISO, носят название UNION, INTERSECT и EXCEPT. В каждом случае формат конструкции с операцией над множествами должен быть следующим:

operator .[ALL] [CORRESPONDING [BY {columnl [, . . . ] }]]

    При указании конструкции CORRES POND ING BY операция над множествами выполняется для указанных столбцов. Если задано только ключевое слово CORRESPONDING, а конструкция 3Y отсутствует, операция над множествами выполняется для столбцов, которые являются общими для обеих таблиц. Если указано ключевое слово ALL, результирующая таблица может содержать повторяющиеся строки.

    Одни  диалекты языка SQL не поддерживают операций INTERSECT и EXCEPT, a в других вместо ключевого  слова EXCEPT используется ключевое слово MINUS.

 

     9.Изменение содержимого базы данных.

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

    •INSERT — предназначен для добавления данных в таблицу,

    •UPDATE — предназначен для модификации уже помещенных в таблицу данных.

    •DELETE — позволяет удалять из таблицы  строки данных. 

    9.1Добавление новых данных в таблицу (оператор INSERT).

    Существуют  две формы оператора INSERT. Первая предназначена для вставки единственной строки в указанную таблицу. Эта форма оператора INSERT имеет следующий формат:

INSERT INTO TableName [(columnList)]

VLUES (dateValueList)

    Здесь параметр TableName (Имя таблицы) может представлять либо имя таблицы базы данных, либо имя обновляемого представления (раздел 6.4). Параметр colunmList (Список столбцов) представляет собой список, состоящий из имен одного или более столбцов, разделенных запятыми. Параметр coIumnLisC является необязательным. Если он опущен, то предполагается использование списка из имен всех столбцов таблицы, указанных в том порядке, в котором они были описаны в операторе CREATE TABLE. Если в операторе INSERT указывается конкретный список имен столбцов, то любые опущенные в нем столбцы должны быть объявлены при создании таблицы как допускающие значение NULL — за исключением случаев, когда при описании столбца использовался параметр DEFAULT . Параметр dataValueList (Список значений данных) должен следующим образом соответствовать параметру columnList:

  • количество элементов в обоих списках должно быть одинаковым;

    •должно существовать прямое соответствие между позицией одного и того же элементав обоих списках, поэтому первый элемент списка data Valuebist считается относящимся к первому элементу списка columnList, второй элемент списка dataValuel/ist — ко второму элементу списка columnList и т.д.;

    •типы данных элементов списка dataValueList должны быть совместимы с типом данных соответствующих столбцов таблицы. 

    9.2 Модификация данных  в базе (оператор UPDATE)

    Оператор UPDATE позволяет изменять содержимое уже существующих строк указанной  таблицы. Этот оператор имеет следующий  формат:

UPDATE. TableName

SET calumnName1 = dataValue1 [,  columnName2 = dataValue2 …]

[WHERE searchCondition]

    Здесь параметр TableN&me представляет либо имя таблицы базы данных, либо имя обновляемого представления (см. раздел 6.4). В конструкции SET указываются имена одного или более столбцов, данные в которых необходимо изменить. Конструкция WHERE является необязательной. Если она опущена, значения указанных столбцов будут изменены во всех строках таблицы. Если конструкция WHERE присутствует, то обновлены будут только те строки, которые удовлетворяют условию поиска, заданному в параметре searchCondition. Параметры dataValuel, dataValue2t... представляют новые значения соответствующих столбцов и должны быть совместимы с ними по типу данных.

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