Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

db / Лекции / 6 семестр / Языки запросов

.pdf
Скачиваний:
66
Добавлен:
23.03.2015
Размер:
1.14 Mб
Скачать

Лекции. Язык запросов SQL. 17 часов.

1 Язык запросов SQL

1.1 Введение в SQL(1-2)

1.1.1 Аннотация к лекции

Лекция представляет собой краткое введение в язык SQL.

Язык SQL является стандартным языком реляционных СУБД. Междуна-

родная организация стандартизации (ISO) и Американский национальный ин-

ститут стандартов (ANSI) уже более двадцати лет ведут работы по поддержа-

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

Таким образом, знание SQL открывает путь к успешному освоению и ис-

пользованию практически любой современной реляционной СУБД.

Цели лекции:

раскрыть значение и вклад языка SQL в развитие современных реляци-

онных БД;

познакомить слушателя с историей развития языка SQL;

перечислить основные возможности языка SQL;

перечислить основные понятия языка SQL (ключевые слова, предложе-

ния, типы данных и т.д.).

1.1.2 Краткая история развития SQL

Первая публикация описания языка SQL относится к 1974 году, когда в ис-

следовательской лаборатории компании IBM в штате Калифорния была разра-

ботана его первая версия, используемая в экспериментальной реляционной СУБД System/R. В то время язык назвали SEQUEL (Structured English Query Language — структурированный английский язык запросов). Затем язык был переименован в SQL. Исследовательский проект System/R был завершен в 1979

году. Он подтвердил возможность создания эффективных промышленных ре-

ляционных СУБД. (Андон Ф., 2006).

В 1977 г. фирмой Oracle балы выпущена промышленная реляционная СУБД с одноименным названием. С тех пор фирма Oracle является крупней-

шим поставщиком реляционных СУБД на базе SQL.

2

Одновременно с этим в середине 70-х годов в исследовательской лабора-

тории Калифорнийского университета в Беркли был открыт проект по созда-

нию экспериментальной реляционной СУБД, получившую название Ingress, на которой отрабатывались результаты научных исследований в области реляци-

онных БД. Затем в 1981 г. была выпущена промышленная версия СУБД Ingres.

Затем в 1986 г. СУБД Ingres была переведена на SQL.

В 1980 году компания IBM на основании опыта, полученного при разра-

ботке экспериментальной System/R, приступила к созданию собственной про-

мышленной СУБД реляционного типа, которая начала поставляться в 1982 году под названием SQL/DS. Затем в компании был разработан более совершенный продукт - DB2, поставки которого начались в 1985 году. Эта СУБД стала стра-

тегическим программным продуктом компании IBM. (Андон Ф., 2006)

Ксередине 80-х годов SQL уже общепризнан как язык реляционных СУБД, а его диалект, поддерживаемый СУБД DB2, фактически стал стандартом для управления реляционными базами данных. К этому времени реляционные базы данных господствовали среди СУБД других типов и считались основной технологией баз данных будущего.

Кначалу 80-х годов в связи с широким распространением реляционных СУБД появилась необходимость анализа возможной стандартизации языка для управления реляционными базами данных и разработки такого стандарта, если это будет признано целесообразным.

В с связи с широким распространением реляционных СУБД 1982 году американским национальным институтом стандартов (American National Standards Institute — ANSI) был создан специальный комитет (X3H2), перед которым была поставлена задача разработки стандарта языка для управления реляцион-

ными базами данных. Учитывая широкую распространенность SQL в промыш-

ленных СУБД и тот факт, что он фактически уже стал стандартом к тому вре-

мени, комитет остановился на этом языке. Взяв за основу его диалект, реализо-

ванный в СУБД DB2, комитет постарался его обобщить, учитывая реализован-

ные в других реляционных СУБД возможности. После четырех лет работы,

3

в 1986 году предложенный комитетом вариант SQL был официально утвержден как стандарт ANSI. В 1987 году он был принят в качестве стандарта Международной организацией стандартов (International Standards Organization

— ISO). Затем стандарт ANSI/ISO приняло правительство США как федераль-

ный стандарт в области обработки информации (Federal Information Processing Standard — FIPS). В 1989 году стандарт был незначительно изменен и получил название SQL-89 (или SQL1). (Андон Ф., 2006)

В 1992 году ANSI принял новый стандарт, который был назван SQL-92 (или SQL2). Далее комитет приступил к решительным изменениям в SQL, ко-

торые отразились в стандарте SQL-99 (или SQL3). Наконец, в 2003 году был опубликован последний стандарт — SQL-2003.

1.1.3 Возможности языка

В начале 70-х годов SQL являлся лишь языком запросов (ЯЗ). Он, по сути,

содержал только предложение SELECT, которое позволяло формулировать за-

просы для выборки данных из базы. Затем язык был дополнен двумя другими компонентами, необходимыми для работы с базами данных. Первый из них — средства для определения структуры базы данных, которые в терминологии теории баз данных называются языком определения данных (ЯОД). Второй — средства, позволяющие заполнять базу данными, изменять их и удалять. Этот компонент в теории баз данных называется языком манипулирования данными

(ЯМД). Также было принято решение, что весь интерфейс с базами данных должен обеспечиваться одним языком, вследствие чего SQL оброс множеством функций, необходимых для управления базами данных.

Основные возможности:

определение, переопределение и удаление таблиц базы данных и других

ееобъектов (доменов, представлений, индексов и т. д.);

указание физической организации данных;

поддержка ограничений целостности и непротиворечивости БД;

защита данных от несанкционированного доступа;

4

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

иудаление значений;

поиск данных в нескольких таблицах и упорядочение полученных ре-

зультатов;

организация резервного копирования и восстановления БД;

поддержка целостности транзакций;

поддержка пользовательских процедур и функций, расширяющих

функциональные возможности SQL.

SQL существует в двух формах:

в интерактивном SQL пользователь непосредственно вводит команды и получает результат;

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

1.1.4 Основы SQL

Язык SQL является нечувствительным к регистру букв. Все его фразы и выражения могут быть написаны как прописными, так и строчными буквами.

Например:

Пример 1

SELECT Номер, Наименование

FROM Товыры

WHERE Наименование = 'ШОКОЛАД';

Однако этот же запрос можно записать следующим образом:

Select Номер, Наименование from Товыры

where Наименование = ‘ШОКОЛАД’;

Строки символов, ссылающиеся на данные, необходимо записывать в та-

ком же виде, в каком они были введены в базу (см пример 1 – литерал ‘Масло’,

имена таблиц и столбцов).

5

Второе синтаксическое правило заключается в следующем — в любом ме-

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

Например, предыдущий запрос может быть записан и так:

Пример 2

SELECT Номер, Наименование FROM Товыры WHERE Наименование =

'ШОКОЛАД';

При описании языка мы будем часто пользоваться такими понятиями, как

ключевые слова, фразы и предложения.

Ключевое слово — слово, которое в SQL зарезервировано для специально-

го использования и является частью его синтаксиса. В приведенных выше при-

мерах ключевыми словами являются «Select Номер, Наименование». В зависи-

мости от предложения SQL ключевое слово может быть обязательным или не обязательным.

Фраза — часть предложения SQL, имеющая самостоятельный смысл, но не имеющая возможности независимой интерпретации. Любая фраза обязательно включает в себя ключевое слово, по которому она и называется, а также другие конструкции языка. Примером фразы может быть «Select Номер, Наименова-

ние». Она называется фразой SELECT. Другой пример — фраза «where Наиме-

нование = ‘ШОКОЛАД’», которая называется фразой WHERE.

Предложение (команда) — конструкция SQL, которая имеет возможность самостоятельной интерпретации. Предложения SQL состоят из фраз, одна из которых считается базовой и по ее имени называется предложение. Примером предложения является «SELECT Номер, Наименование FROM Товыры WHERE

Наименование = 'ШОКОЛАД';» Оно состоит из трех фраз: SELECT, FROM и WHERE. Базовой в этом предложении является фраза SELECT, поэтому и предложение называется предложением SELECT.

6

1.1.5 Типы данных SQL

Типы данных SQL.

Категория

Описание

Тип

 

 

 

Строковые типы

Строка символов постоянной длины

CHAR (количество_символов)

 

Строка символов переменной длины

VARCHAR (количество_символов)

 

Большая строка символов перемен-

CLOB

 

ной длины

 

 

Большой двоичный

BLOB

 

объект переменной

 

 

длины

 

Числовые точные

Целое число

INTEGER | INT

типы

 

 

Целое число. Количество разрядов

BIGINT

 

больше или равно INTEGER

 

 

Целое число. Количество разрядов

SMALLINT

 

меньше или равно INTEGER

 

 

Число с фиксированной запятой

{NUMERIC | DECIMAL | DEC}

 

(количество_разрядов – общее число

(кол-во разрядов, масштаб)

 

знаков, масштаб — знаков после за-

 

 

пятой)

 

Числовые неточ-

Число с плавающей запятой

REAL

ные типы

 

 

Число с плавающей запятой. Коли-

DOUBLE PRECISION

 

чество разрядов больше или равно

 

 

REAL

 

 

Число с плавающей запятой

FLOAT (кол-во разрядов)

Временные типы

Дата. Содержит год, месяц и день

DATE

 

Временная отметка. Содержит год,

TIMESTAMP (масштаб)

 

месяц, день, час, минуты и секунды

 

 

Время. Содержит час, минуты и се-

TIME (масштаб)

 

кунды (масштаб — количество

 

 

знаков в дробной части секунд).

 

 

Возможно указание временной зоны

 

 

Временной промежуток.

INTERVAL

Логический тип

Принимает логические значения

BOOLEAN

1.1.6 Литералы

Литералы – это простейшие выражения, являющиеся значениями соответ-

ствующих типов. Каждый тип данных имеет способ представления литералов своего типа. В SQL имеются следующие литералы:

символьных строк (пример: 'Символьная строка'),

двоичных строк (пример: X'1AFFD561'),

7

чисел (примеры: 27 -863 0.173 .8582 -9572.5619 11.54Е7 .94Е194 93Е-12 - 29.629Е27),

временные (DATE '2005-12-07' TIME 'HH:MI:SS' TIMESTAMP 'YYYY- MM-DD HH:MI:SS'),

логические (TRUE, FALSE, UNKNOWN).

1.1.7 Операторы и выражения

Операторы — это конструкции языка, указывающие операции над эле-

ментами данных и возвращающие в качестве результата новое значение. Эле-

менты данных, используемые в операторах, называются операндами или аргу-

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

вых слов. Например, оператор умножения представляется звездочкой (*), а

оператор проверки на неопределенное значение — ключевым словом IS NULL.

Есть два основных вида операторов. Унарные имеют только один операнд и обычно представляются в следующем формате:

операнд оператор

Бинарные оперируют двумя операндами и представляются таким образом:

операнд оператор операнд

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

итипом возвращаемого результата. Имеются операторы следующих типов:

строковые (||);

арифметические;

логические;

предикаты сравнения;

специальные предикаты;

операторы над множествами (таблицами).

1.1.8 Именование объектов

В соответствии со стандартом SQL, имена объектов базы данных могут со-

стоять из прописных и строчных букв латинского алфавита, цифр и символа подчеркивания (_), причем первым символом должна быть буква. Если нужно

8

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

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

1.1.9 Комментарии

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

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

емые символы. На выполнение команд SQL комментарии не влияют и могут располагаться между ключевыми словами, параметрами и в любом другом ме-

сте, где в соответствии с правилами языка должен быть разделитель.

Имеются два типа комментариев:

многострочный начинается с символов /*, за которыми следует одна или несколько строк комментария, и завершается символом *;

однострочный располагается в конце строки и начинается с символов -- за которыми следует текст комментария.

Предложение SQL может содержать комментарии обоих типов.

1.1.10 Итоги лекции

На лекции студенты изучили:

краткую историю развития SQL;

основные возможности SQL;

основные синтаксические правила SQL;

понятия ключевое слово, фраза и предложение;

типы данных SQL;

правила написания литералов;

операторы и выражения SQL;

правила именования объектов;

использование комментариев.

9

1.2 Простейшие запросы (3-4)

1.2.1 Аннотация к лекции

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

занные в стандарте SQL средства поиска и выборки данных.

Что мы будем подразумевать под словом «запрос»? Запрос – это команда,

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

ственно на экран компьютера, хотя в большинстве случаев ее можно также по-

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

1.2.2 О предложении SELECT

Все запросы в SQL состоят из единственной команды или, как принято го-

ворить в SQL, предложения. Структура этого предложения проста, элегантна,

однако оно обладает внушительными возможностями по выборке данных из ба-

зы. Это предложение называется SELECT. По отношению к нему мы также бу-

дем применять термин «команда», подразумевая, что это предложение выпол-

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

SELECT {* | [DISTINCT | ALL] список_выражений_выбора} [INTO список переменных]

FROM список_спецификаций_таблиц

[WHERE условие]

[GROUP BY список_выражений_группировки [HAVING групповое_условие]] [ORDER BY список_выражений_упорядочения];

10