Структура языка SQL. 2
Содержание
Введение………………………………………………………… …………………..4
1.
SQL………………………………………………………………………
1.1
Таблицы SQL…………………………………………………
1.2 Структура языка SQL……………………………………………………..…8
1.3 Структура запросов SQL………………………………………………….....9
1.4 Операторы модификации данных…………………………………...…....17
1.5
Транзакции в SQL……………………………………
1.6
Защита данных……………………………………………
1.7
Обработка ошибок……………………………………
Заключение……………………………………………………
Список использованной литературы…………………………………………..30
Приложение
А……………………………………………………………………..
Введение
В настоящее время объемы информации все время возрастают. Наиболее удобным способом хранения информации, на основе опыта нескольких десятилетий, был признан способ хранения информации в виде баз данных.
База данных – это, прежде всего хранилище объектов данных, т.е. набора возможных понятий или событий, описываемых базой данных (БД), Вместе с этим основными функциями БД являются систематизация информации (знаний) и возможность взаимосвязи объектов между собой.
Любую структуру данных можно преобразовать в простую двумерную таблицу. Основная идея реляционного подхода состоит в том, чтобы представить произвольную структуру данных в виде простой двумерной таблицы или, как говорят, нормализовать структуру. И как следствие возникла необходимость использования универсального языка для доступа и управления данными в различных базах данных. Таким языком стал SQL.
Язык для взаимодействия с БД SQL появился в середине 70-х и был разработан в рамках проекта экспериментальной реляционной СУБД System R. Исходное название языка SEQUEL (Structered English Query Language) только частично отражает суть этого языка. Конечно, язык был ориентирован главным образом на удобную и понятную пользователям формулировку запросов к реляционной БД, но на самом деле уже являлся полным языком БД, содержащим помимо операторов формулирования запросов и манипулирования БД средства определения и манипулирования схемой БД. В языке отсутствовали средства синхронизации доступа к объектам БД со стороны параллельно выполняемых транзакций: с самого начала предполагалось, что необходимую синхронизацию неявно выполняет система управления базами данных СУБД [1, с.7].
После появления на рынке двух пионерских СУБД – SQL/DS (1981 год) и DB2 (1983 год) – он приобрел статус стандарта де-факто для профессиональных реляционных СУБД. В 1987 году SQL стал официальным международным стандартом языка баз данных, а в 1992 году вышла вторая версия этого стандарта.
Важной отличительной чертой SQL является его независимость от компьютерной среды (операционной системы и архитектуры). SQL является инструментом, предназначенным для обработки и чтения информации, содержащейся в компьютерной базе данных.
При создании языка запросов нового поколения разработчики старались сделать его простым и легким в освоении инструментом для обращения к БД. В итоге SQL стал слабо структурированным языком, особенно по сравнению с такими языками, как С или Pascal, и в то же время достаточно мощным и относительно легким для изучения [1, с.9].
Одним из наиболее важных шагов на пути к признанию SQL на рынке стало появление стандартов на этот язык. Обычно при упоминании стандарта SQL имеют в виду официальный стандарт, утвержденный Американским институтом национальных стандартов (American National Standards Institute — ANSI) и Международной организацией по стандартам (International Standards Organization— ISO). Однако существуют и другие важные стандарты SQL, включая SQL, реализованный в системе DB2 компании IBM, и стандарт X/OPEN для SQL в среде UNIX. Этот стандарт, незначительно пересмотренный в 1989 году, обычно называют стандартом «SQL-89», или «SQLI».
Пробелы в стандарте SQL-89 и различия между существующими диалектами SQL достаточно значительны, и при переводе приложения под другую СУБД его всегда приходится модифицировать. Эти отличия в большинстве своем устранены в стандарте SQL2.
1. SQL
SQL является инструментом, предназначенным для обработки и чтения данных, содержащихся в компьютерной базе данных. SQL, является языком программирования, который применяется для организации взаимодействия пользователя с базой данных.
На рисунке 1 изображена схема работы SQL.
Рисунок
1 - Схема работы SQL
Согласно этой схеме, в вычислительной системе имеется база данных, в которой хранится важная информация. Если пользователю необходимо прочитать данные из базы данных, он запрашивает их у SQL с помощью СУБД. SQL обрабатывает запрос, находит требуемые данные и посылает их пользователю. Процесс запрашивания данных и получения результата называется запросом к базе данных: отсюда и название — структурированный язык запросов [2, с.103].
Однако это название не совсем соответствует действительности. Cегодня SQL представляет собой нечто гораздо большее, чем простой инструмент создания запросов, хотя именно для этого он и был первоначально предназначен. Несмотря на то, что чтение данных по-прежнему остается одной из наиболее важных функций SQL, сейчас этот язык используется для реализации всех функциональных возможностей, которые СУБД предоставляет пользователю, а именно:
- Организация данных. SQL дает пользователю возможность изменять структуру представления данных, а также устанавливать отношения между элементами базы данных.
- Чтение данных. SQL дает пользователю или приложению возможность читать из базы данных содержащиеся в ней данные и пользоваться ими.
- Обработка данных. SQL дает пользователю или приложению возможность изменять базу данных, т.е. добавлять в нее новые данные, а также удалять или обновлять уже имеющиеся в ней данные.
- Управление доступом. С помощью SQL можно ограничить возможности пользователя по чтению и изменению данных и защитить их от несанкционированного доступа.
- Совместное использование данных. SQL координирует совместное использование данных пользователями, работающими параллельно, чтобы они не мешали друг другу.
- Целостность данных. SQL позволяет обеспечить целостность базы данных, защищая ее от разрушения из-за несогласованных изменений или отказа системы.
1.1 Таблицы SQL
В реляционной базе данных информация организована в виде таблиц, разделённых на строки и столбцы, на пересечении которых содержатся значения данных [1, с.215].
Основными объектами реляционной базы данных являются:
(TABLE) Таблица - Прямоугольная таблица, состоящая из СТРОК и СТОЛБЦОВ. Задать таблицу – значит указать, из каких столбцов она состоит.
(ROW) Строка - Запись, состоящая из полей – столбцов. В каждом поле содержится его значение, либо значение NULL – «пусто». Строк в таблице может быть сколько угодно. Физический порядок их расположения друг относительно друга неопределен.
(COLUMN) Столбец - Каждый столбец в таблице имеет собственные имя и тип.
1.2 Структура языка SQL
Все операторы языка SQL можно разделить на несколько типов:
Операторы манипулирования данных - позволяют управлять значениями, представляемыми в таблицах.
Операторы транзакций - определяют моменты времени в которые значения базы данных, измененные пользователями становятся актуальными (изменения сделанные одним пользователем вступают в силу для всех пользователей).
Операторы модификации данных - позволяют создавать/удалять базовые таблицы и изменять их структуру (добавлять столбцы, связи между таблицами).
Операторы защиты данных - позволяют авторизировать пользователей, давать им привилегии (разрешения на просмотр данных из одной или нескольких таблиц, изменение данных и т.д.).
Оператор запроса на получение данных - позволяет пользователю получить выбранные определенным образом, данные из одной или нескольких таблиц. Отдельной частью оператора запроса можно выделить оператор курсора - позволяет просматривать предварительно выбранные данные по одной строке.
Оператор ошибки - после выполнения последнего SQL запроса содержит код выполнения операции (код ошибки либо удачного выполнения).
Все используемые в языке SQL операторы представляют собой предложения, содержащие определенные операторы и их операнды. В некоторых операторах возможна вложенность нескольких операций [3, с.42].
Таким образом, пользователю необходимо сформировать текстовую строку, содержащую операторы SQL и с помощью функции используемого им языка программирования высокого уровня отправить этот запрос на SQL Server, хранящий базу данных. В результате от SQL Server придет ответ, содержащий запрошенные данные из одной или нескольких таблиц, удовлетворяющие условию запроса, отсортированные в нужном порядке, либо произведет запрашиваемые действия над данными.
1.3 Структура запросов SQL
Все
запросы на получение практически
любых данных из одной или нескольких
таблиц выполняются с помощью
единственного предложения SELE
В синтаксических конструкциях для обращения к БД используются следующие обозначения:
1)
звездочка (*) для обозначения
«все» – употребляется в
2) квадратные скобки ([]) – означают, что конструкции, заключенные в эти скобки, являются необязательными (т.е. могут быть опущены);
3)
фигурные скобки ({}) – означают, что
конструкции, заключенные в
4)
многоточие (…) – указывает на
то, что непосредственно
5) прямая черта (|) – означает наличие выбора из двух или более возможностей. Например, обозначение ASC|DESC указывает, можно выбрать один из терминов ASC или DESC; когда же один из элементов выбора заключен в квадратные скобки, то это означает, что он выбирается по умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции будет восприниматься как выбор ASC);
6) точка с запятой (;) – завершающий элемент предложений SQL;
7) запятая (,) – используется для разделения элементов списков;
8)
пробелы ( ) – могут вводиться
для повышения наглядности
9)
жирные прописные латинские
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.
Так
если требуется упорядочить
SELECT DISTINCT speed, ram
FROM Pc
ORDER BY ram DESC
или
SELECT DISTINCT speed, ram
FROM Pc
ORDER BY 2 DESC
Результат, приведенный ниже, будет одним и тем же.
Таблица 4 – 2-й результат запроса SELECT DISTINCT speed
| speed | ram |
| 600 | 128 |
| 750 | 128 |
| 900 | 128 |
| 450 | 64 |
| 500 | 64 |
| 450 | 32 |
| 500 | 32 |
Сортировку можно проводить по возрастанию (параметр ASC принимается по умолчанию) или по убыванию (параметр DESC). Сортировка по двум полям:
SELECT DISTINCT speed, ram
FROM Pc
ORDER BY ram DESC, speed DESC
даст следующий результат:
Таблица 5 – 3-й результат запроса SELECT DISTINCT speed
| speed | ram |
| 900 | 128 |
| 750 | 128 |
| 600 | 128 |
| 500 | 64 |
| 450 | 64 |
| 500 | 32 |
| 450 | 32 |
Горизонтальную выборку реализует предложение WHERE , которое записывается после предложения FROM. При этом в результирующий набор попадут только те строки из источника записей, для каждой из которых значение предиката равно TRUE. То есть предикат проверяется для каждой записи.
Предикаты представляют собой выражения, принимающие истинностное значение. Они могут представлять собой как одно выражение, так и любую комбинацию из неограниченного количества выражений, построенную с помощью булевых операторов AND, OR или NOT. Кроме того, в этих комбинациях может использоваться SQL-оператор IS, а также круглые скобки для конкретизации порядка выполнения операций [3, с.209].
Предикат в языке SQL может принимать одно из трех значений TRUE (истина), FALSE (ложь) или UNKNOWN (неизвестно). Исключение составляют следующие предикаты: NULL (отсутствие значения), EXISTS (существование), UNIQUE (уникальность) и MATCH (совпадение), которые не могут принимать значение UNKNOWN.
Правила комбинирования всех трех истинностных значений легче запомнить, обозначив TRUE как 1, FALSE как 0 и UNKNOWN как 1/2 (где то между истинным и ложным).
AND с двумя истинностными значениями дает минимум этих значений. Например, TRUE AND UNKNOWN будет равно UNKNOWN.
OR
с двумя истинностными
Отрицание истинностного значения равно 1 минус данное истинностное значение. Например, NOT UNKNOWN будет равно UNKNOWN.
Помимо этого используются предикаты сравнения.
Предикат сравнения представляет собой два выражения, соединяемых оператором сравнения. Имеется шесть традиционных операторов сравнения: =, >, <, >=, <=, <>.
Данные типа NUMERIC (числа) сравниваются в соответствии с их алгебраическим значением.
Данные типа CHARACTER STRING (символьные строки) сравниваются в соответствии с их алфавитной последовательностью. Если a1a2…an и b1b2…bn - две последовательности символов, то первая "меньше" второй, если а1<b1, или а1=b1 и а2<b2 и т.д. Считается также, что а1а2…аn<b1b2…bm, если n<m и а1а2…аn=b1b2…bn, т.е. если первая строка является префиксом второй. Например, 'folder'<'for', т.к. первые две буквы этих строк совпадают, а третья буква строки 'folder' предшествует третьей букве строки 'for'. Также справедливо неравенство 'bar' < 'barber', поскольку первая строка является префиксом второй.
Данные типа DATETIME (дата/время) сравниваются в хронологическом порядке.
Данные типа INTERVAL (временной интервал) преобразуются в соответствующие типы, а затем сравниваются как обычные числовые значения типа NUMERIC.
Пример. Получить информацию о компьютерах, имеющих частоту процессора не менее 500 Мгц и цену ниже $800:
SELECT * FROM Pc
WHERE speed >= 500 AND price < 800;
Запрос возвращает следующие данные:
Таблица 6 – Пример информационного запроса
| code | model | speed | ram | hd | cd | price |
| 1 | 1232 | 500 | 64 | 5 | 12x | 600.0 |
| 3 | 1233 | 500 | 64 | 5 | 12x | 600.0 |
| 7 | 1232 | 500 | 32 | 10 | 12x | 400.0 |
| 10 | 1260 | 500 | 32 | 10 | 12x | 350.0 |
Существуют так же и другие предикаты, например BETWEEN, IN, LIKE …
Имена столбцов, указанные в предложении SELECT, можно переименовать. Это делает результаты более читабельными, поскольку имена полей в таблицах часто сокращают с целью упрощения набора. Ключевое слово AS, используемое для переименования, согласно стандарту можно и опустить, т.к. оно неявно подразумевается.
Например, запрос:
SELECT ram AS Mb, hd Gb
FROM Pc
WHERE cd = '24x';
переименует столбец ram в Mb (мегабайты), а столбец hd в Gb (гигабайты). Этот запрос возвратит объемы оперативной памяти и жесткого диска для тех компьютеров, которые имеют 24-скоростной CD-ROM: