Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БД.doc
Скачиваний:
35
Добавлен:
23.09.2019
Размер:
1.93 Mб
Скачать

Типы данных

Типы данных в различных версиях SQL могут заметно различаться, что связано с набором типов данных, принятом в конкретной СУБД. В стандарте ANSI рекомендуется использовать символьные (например, CHAR, VARCHAR) и числовые (INT, DEC) типы данных. В СУБД FoxPro используется широкий спектр типов данных (различные формы символьных числовых типов, типы даты и времени и т.п.). Все они отражены в соответствующей реализации SQL.

Интерактивный и встроенный sql

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

Синтаксис

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

Текст ::= команда; ... команда;

Команда ::= фраза ... фраза

Фраза ::= Ключевое_слово аргумент аргумент ... аргумент

Подразделы sql

Согласно рекомендации ANSI, SQL состоит из следующих разделов: Язык Определения Данных (ЯОД или DDL), Язык Манипулирования Данными (ЯМД или DML), Язык Управления Данными (ЯМД или DCL). Последний раздел может включаться в ЯМД. Первый раздел служит для определения схем данных (таблиц), второй – для манипуляций данными, которые выполняются через запросы к базе данных.

Простейшие действия

Определение таблиц – это разовая работа, изменение структуры – эпизодическая, а манипулирование данными – деятельность постоянная. И если изменение содержания базы данных большой сложности не представляет, то выборка необходимой информации может быть довольно замысловатой. Именно на запросы расходуется наибольшее время работы с БД. Поэтому основу языка SQL составляют запросы к базе данных. Запросы определяются командой Select.

Простейшие запросы – отображение содержимого всей таблицы, проекция, перестановка атрибутов, выбор. Команда для них имеет следующий формат:

Select [Distinct] <список атрибутов> From <таблица> [Where <условие>];

Здесь <список атрибутов> – схема (перечень атрибутов) отношения, которое будет результатом выполнения команды. В список может включаться символ «*», который обозначает всю схему исходной таблицы с именем <таблица>. В результирующую выборку попадают атрибуты лишь из тех строк, для которых <условие> истинно. Фраза Where не обязательная, если она отсутствует, в выборку попадают атрибуты из всех строк. Заметим, что в результирующей выборке могут возникнуть повторяющиеся строки, если список атрибутов не содержит ключ. Для удаления дублирующихся строк служит вариант Distinct.

Пример

Выбрать содержимое всей таблицы продавцов (представлены два варианта):

Select * From Продавцы;

Select ном_прод, имя_прод, город, комиссия From Продавцы;

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

Select Distinct имя_прод, город From Продавцы;

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

Select дата, ном_пок, ном_зак From Заказы;

Выбрать продавцов из Москвы:

Select имя_прод, город From Продавцы Where город=’Москва’;

Конец примера

Предикат, определяющий условия выбора, может содержать обычные операции отношения (<, <=, =, <>, >=, >), операцию betweenand (истина, когда первый операнд не меньше второго и не больше третьего) и логические операции (and, or, not). Для задания множества служат круглые скобки, ограничивающие его определение. Множество может определяться как простым перечислением элементов, так и запросом. Последний вариант будет рассматриваться позже. Для определения принадлежности элемента множеству служит операция in. Для символьных значений допускается выбор по маске. Символ «%» маскирует любую цепочку в искомой строке, символ «_» – лишь один символ, фраза like определяет маску.

Пример

Выбрать продавцов из Москвы, у которых комиссионные меньше 0,1:

Select Имя_прод, Комиссия From Продавцы

Where Город=’Москва’ and Комиссия<0,1;

Выбрать продавцов как из Москвы, так и из Тулы (два варианта):

Select * From Продавцы

Where Город=’Москва’ or Город=’Тула’;

Select * From Продавцы

Where Город in (’Москва’, ’Тула’);

Выбрать продавцов, у которых комиссионные в интервале от 0,1 до 0,12, причем, в первом случае интервалы включаются, во втором – нет:

Select * From Продавцы

Where Комиссия between 0.1 and 0.12;

Select * From Продавцы

Where Комиссия between 0.1 and 0.12 and not Комиссия in (0.1, 0.12);

Выбрать продавцов, у которых первая или вторая буква фамилии – «М»:

Select * From Продавцы

Where Имя_прод like ‘М%’ or Имя_прод like ‘_м%’;

Конец примера

Согласно требованиям к реляционным базам данных, атрибуты должны иметь возможность принимать пустое значение. В SQL оно обозначается как null. Пустое значение может принимать поле любого типа. Для проверки атрибута на пустоту служит операция is null. Сравнение с пустым значением неопределенно (unknown): a=null. Неопределенное значение возникает и в результате проверки предиката принадлежности: a in (null). Обычно неопределенное значение интерпретируется как ложь, но не всегда: not ложь – истина, а not unknown unknown.

Использование not в SQL более свободно, чем в обычных языках программирования: допустимо и (not a is null), и (a is not null), и (not a in (…)), и (a not in (…)).