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

GOSY / 1 блок-все-шпора(печать)

.pdf
Скачиваний:
37
Добавлен:
09.05.2015
Размер:
1.57 Mб
Скачать

представляются в виде, установленном по умолчанию, т.е. без дробной части, или с помощью другого синтаксиса, TTME WITHOUT TIME ZONE (p), где вместо р должно стоять количество цифровых позиций, находящихся справа от десятичной запятой. В предыдущем абзаце представлен пример данных типа

TTME WITHOUT TIME ZONE (3). В данных типа TIMESTAMP WITHOUT TIME ZONE (дата и время без часового пояса) хранится информация как о дате, так и о времени. У компонентов данных этого типа такие же значения длины и такие же ограничения, как и для данных типа DATE и TIME WITHOUT TIME ZONE, если не считать одного различия. Оно состоит в том, что по умолчанию в данных типа TIMESTAMP WITHOUT TIME ZONE длина дробной части равна шести цифрам, а не нулю. Если в значении типа TIMESTAMP WITHOUT TIME ZONE нет цифр дробной части, то длина этого значения равна 19 позициям, занимаемым в следующем порядке: десять позиций — датой, один пробел служит в качестве разделителя, и восемь позиций — временем.Тип данных TIME WITH TIME ZONE (время вместе с часовым поясом) в точности такой же как и TIME WITHOUT TIME ZONE, за исключением того, что в нем еще имеется информация о разнице между местным и всемирным временем (UTC, Universal Time), ранее известным как среднее время по Гринвичу (Greenwich Mean Time, GMT). Значение этой разницы может находиться в диапазоне от -12:59 до +13:00. Такая дополнительная информация занимает за цифрами времени шесть позиций: дефис в качестве разделителя, знак "плюс" или "минус", а затем разница в часах (две цифры) и минутах (также две цифры) и двоеточие между часами и минутами. Тип данных TIMESTAMP WITH TIME ZONE (дата и время вместе с часовым поясом) работает точно так же, как и TIMESTAMP WITHOUT TIME ZONE, за исключением того, что в нем еще имеется информация о разнице между местным и всемирным временем. Дополнительная информация занимает за датой и временем шесть позиций (о формате данных часового пояса см. в предыдущем разделе). Для поля с данными часового пояса и без дробной части требуется 25 позиций, а для поля с дробной частью нужно 26 позиций плюс количество цифр дробной части (это количество по умолчанию равно шести).

Интервальные типы данных тесно связаны с типами данных даты-времени. Интервал — это разница между двумя значениями даты-времени. SQL поддерживает два различных типа интервалов: год-месяц и день-время. Интервал год-месяц — это количество лет и месяцев между двумя датами. А интервал день-время — это количество дней, часов, минут и секунд между двумя моментами в пределах одного месяца.

Язык SQL состоит из ограниченного числа команд, специально предназначенных для управления данными. Одни из этих команд служат для определения данных, другие — для их обработки, а остальные — для администрирования данных. Чтобы соответствовать стандарту SQL:2003, в

191

состав реализации должны входить все основные возможности. Кроме того, в ее состав могут входить и расширения этого основного набора (которые также описаны спецификацией SQL:2003). Расширения пока оставим, вернемся к основам. Ниже приведена таблица основных команд SQL:2003.

К командам модификации данных (DML) относятся добавление, удаление и изменение (обновление) кортежа (записи).INSERT – добавление записи в таблицу. Синтаксис:

INSERT INTO <имя таблицы> [(<имя поля>.,..)] VALUES (<список выражений>) | <запрос>;

Под <запросом> подразумевается команда SELECT, результаты работы которой добавляются в указанную таблицу. В предложении VALUES указываются выражения, порождающие значения атрибутов новой записи таблицы. Типы значений выражений должны соответствовать типам полей таблицы. Если значения устанавливаются не для всех полей или порядок значений не соответствует тому порядку полей, который был установлен при создании таблицы, то после имени таблицы в скобках приводится список полей в соответствии со списком значений. Если в списке полей не указано обязательное поле таблицы (not null), то ему будет присвоено значение по умолчанию (default), если оно определено в командах CREATE TABLE или ALTER TABLE. Если в списке значений отсутствует хотя бы одно обязательное поле или нарушаются другие ограничения целостности, например, уникальность значения, то команда INSERT будет отвергнута.

Создание нового отношения (таблицы) выполняется с помощью команды

DDL CREATE TABLE. Команда CREATE TABLE используется для описания новой таблицы, еѐ атрибутов (полей) и ограничений целостности. Упрощѐнный синтаксис этой команды: CREATE TABLE <имя таблицы> ( {<имя поля> <тип данных> [(<размер>)] [<ограничения целостности поля>…]}..,..[, <ограничения целостности таблицы>.,..]);

Расшифровка элементов описания приведена в таблице 1.

Для обязательных полей устанавливается ограничение not null. Это означает, что при изменении значения этого поля или при добавлении новых записей таблицы это поле должно содержать допустимое значение. Ограничение not null можно наложить на поле только один раз, иначе возникает ошибка.

Таблица 1. Описание команды CREATE TABLE

Элемент

Описание

 

<имя поля>

Имя поля (столбца)

таблицы, обычный

 

идентификатор.

 

<тип

Тип данных поля. Можно использовать одно из

данных>

значений:

 

 

 

<размер>

Размер поля в символах (для текста и чисел).

<ограничени

Можно использовать следующие ограничения:

 

192

 

я

PRIMARY

KEY

– первичный ключ

целостности>

(обязательный и уникальный);

 

 

UNIQUE – уникальное значение поля в пределах

 

столбца таблицы;

 

 

 

[NOT] NULL – [не] возможность не указывать

 

значение поля;

 

 

 

 

CHECK (<условие>) – проверка условия для поля

 

(полей);

 

 

 

 

DEFAULT <выражение> – задание значения поля

 

по умолчанию;

 

 

 

 

REFERENCES <имя таблицы> [(<имя столбца>)]

 

– внешний ключ.

 

 

 

<ограничени

То же, что и для поля. Дополнительно

я

используется:

 

 

 

целостности

FOREIGN

KEY

[(<список

полей>.,..)]

таблицы>

REFERENCES <имя таблицы> [(<список полей>)] –

 

внешний ключ.

 

 

 

193

194

30.Язык SQL. Оператор выборки данных Select и примеры его использования.

Запрос – команда, которую вы даете вашей программе базы данных, и которая сообщает ей, чтобы она вывела определенную информацию из таблиц в память. Эта информация обычно посылается непосредственно на экран компьютера или терминала, которым вы пользуетесь, в большинстве случаев, ее можно также послать принтеру, сохранить в файле (как объект в памяти компьютера), или представить как вводную информацию для другой команды или процесса.

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

SQL (Structured Query Language) – это структурированный язык запросов к реляционным базам данных (БД). SQL является декларативным языком, основанным на операциях реляционной алгебры. Язык работы с базами данных должен предоставлять пользователям следующие возможности:создавать базу данных и таблицы с полным описанием их структуры; выполнять основные операции манипулирования данными (добавление, изменение, удаление данных); выполнять запросы, осуществляющие преобразование данных в необходимую информацию.

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

SELECT(ВЫБОР).

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

SELECT snum, sname, sity, comm FROM Salespeople;

SELECT – ключевое слово, которое сообщает базе данных, что эта команда - запрос. Все запросы начинаются этим словом, сопровождаемым пробелом.

snum, sname - это список столбцов из таблицы, которые выбираются запросом. Любые столбцы, не перечисленные здесь, не будут включены в вывод команды. Это, конечно, не значит, что они будут удалены или их информация будет стерта из таблиц, потому что запрос не воздействует на информацию в таблицах; он только показывает данные.

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

Salespeople В данном случае - это таблица Продавцов(Salespeople).

195

(;) Точка с запятой используется во всех интерактивных командах SQL, чтобы сообщать базе данных, что команда заполнена и готова выполниться. В некоторых системах наклонная черта влево (\) в строке, является индикатором конца команды.

Если необходимо видеть каждый столбец таблицы, имеется необязательное сокращение, которое используется. Звездочка (*) может применяться для вывода полного списка столбцов следующим образом:

SELECT *

FROM Salespeople;

Это приведет к тому же результату что и предыдущая команда. УДАЛЕНИЕ ИЗБЫТОЧНЫХ ДАННЫХ

DISTINCT (ОТЛИЧИЕ) – аргумент, который обеспечивает возможность устранять двойные значения из предложения SELECT.

SELECT DISTINCT snum FROM Orders;

Данное предложение покажет все возможные значения поля snum (только по одному разу).

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

Например, предположим, вы хотите видеть имена и комиссионные всех продавцов в Лондоне. Вы можете ввести такую команду:

SELECT sname, city FROM Salespeople; WHERE city = "LONDON";

Когда предложение WHERE представлено, программа базы данных просматривает всю таблицу по одной строке и исследует каждую строку чтобы определить верно ли утверждение. Следовательно, для записи Peel, программа рассмотрит текущее значение столбца city, определит что оно равно "London", и включит эту строку в вывод. Запись для Serres не будет включена, и так далее.

БУЛЕВЫ ОПЕРАТОРЫ

AND берет два Буля (в форме A AND B) как аргументы и оценивает их по отношению к истине, верны ли они оба.

OR берет два Буля (в форме A OR B) как аргументы и оценивает на правильность, верен ли один из них.

NOT берет одиночный Булев (в форме NOT A) как аргументы и заменяет его значение с неверного на верное или верное на неверное. NOT может использоваться для инвертирования значений Буля.

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

196

SELECT *

FROM Salespeople

WHERE city IN ( 'Barcelona', 'London' );

Оператор BETWEEN похож на оператор IN. В отличии от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.

SELECT *

FROM Salespeople

WHERE comm BETWEEN .10 AND .12;

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется, чтобы находить подстроки. Т.е. он ищет поле символа, чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы (wildkards) - специальные символы которые могут соответствовать чему-нибудь.

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

1)символ подчеркивания ( _ ) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.

2)знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.

IS [NOT] NULL:

field IS [NOT] NULL

– определяет, установлено ли значение поля. Все другие предикаты и операторы сравнения возвращают неопределѐнный результат (null), если хотя бы один из операндов имеет значение null.

Часто, будут иметься записи в таблице, которые не имеют никаких значений для каждого поля, например, потому что информация не завершена, или потому что это поле просто не заполнялось. SQL учитывает такой вариант, позволяя вам вводить значение NULL (ПУСТОЙ) в поле, вместо значения. Когда значение поля равно NULL, это означает, что программа базы данных специально промаркировала это поле как не имеющее никакого значения для этой строки (или записи). Это отличается от просто назначения полю, значения нуля или пробела, которые база данных будет обрабатывать также как и любое другое значение. Точно также, как NULL не является техническим значением, оно не имеет и типа данных. Оно может помещаться в любой тип поля. Тем ни менее, NULL в SQL часто упоминается как нуль.

197

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

Найдем все записи в таблице Заказчиков с NULL значениями в city столбце:

SELECT *

FROM Customers WHERE city IS NULL;

АГРЕГАТНЫЕ ФУНКЦИИ

Агрегатные функции предназначены для того, чтобы вычислять некоторое значение для заданного множества строк. Таким множеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице, или вся таблица. Для всех агрегатных функций, кроме COUNT(*), фактический(т. е. требуемый семантикой) порядок вычислений следующий: на основании параметров агрегатной функции из заданного множества строк производится список значений. Затем по этому списку значений производится вычисление функции. Если список оказался пустым, то значение функции COUNT для него есть 0, а значение всех остальных функций null.

Команда SELECT

SELECT возвращает данные из таблицы, вида или сохраненной процедуры. Различные инструкции SELECT выполняют следующие действия:

Любая инструкция SELECT содержит два обязательных параметра

(SELECT, FROM) и возможно другие параметры (WHERE, GROUP BY, HAVING, UNION, PLAN, ORDER BY). Параметры SELECT и FROM

обязательны и для sigleton, и для multi-row SELECT; все другие параметры перечисленные ниже факультативны. Следующая таблица объясняет назначение каждого параметра:

SELECT Список столбцов, которые возвращаются.

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

DISTINCT

FROM Определяет таблицы в которых ищутся значения.

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

IS NULL Этот предикат всегда принимает значения true или false. При этом значение "x IS NULL" равно true тогда и только тогда, когда значение x не определено. Значение предиката "x NOT IS NULL" равно значению "NOT x IS NULL".

198

BEETWEN…AND оператор BETWEEN похож на оператор IN. Но, в отличие от определения по числам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться, что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть последним по алфавитному или числовому порядку.

IN Оператор IN определяет набор значений, в который данное значение может или может не быть включено. В соответствии с нашей учебной базой данных, на которой вы обучаетесь по настоящее время, если вы хотите найти всех продавцов, которые находятся в Barcelona или в London, вы должны использовать следующий запрос (вывод показан на Рисунке 5.1):

SELECT *

FROM Salespeople WHERE city = 'Barcelona'

OR city = 'London';

Имеется и более простой способ получить ту же информацию:

SELECT *

FROM Salespeople

WHERE city IN ('Barcelona', 'London'); LIKE

EXISTS Значением этого предиката всегда является true или false, и это значение равно true тогда и только тогда, когда результат вычисления подзапроса не пуст

UNIQUE

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

NOT Операнды могут непосредственно предшествовать булеву NOT.

Это противоположно реляционным операциям, когда оператор NOT должен идти перед вводимым выражением. Например, если мы хотим устранить NULL из нашего вывода, мы будем использовать NOT, чтобы изменить на противоположное значение предиката:

SELECT *

FROM Customers WHERE city NOT NULL;

При отсутствии значений NULL (как в нашем случае), будет выведена вся таблица Заказчиков. Аналогично можно ввести следующее

SELECT *

FROM Customers

WHERE NOT city IS NULL;

что также приемлемо. Мы можем также использовать NOT с IN: SELECT *

199

FROM Salespeople

WHERE city NOT IN ('London', 'San Jose');

А вот другой способ подобного же выражения:

SELECT *

FROM Salespeople

WHERE NOT city IN ('London', ' San Jose');

AND

OR

ORDER BY позволяет упорядочивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов.

ASC задает возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию принята возрастающая последовательность сортировки.

AS

COUNT считает количество строк, которые вернул запрос

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

SUM суммирует значения данного поля; MIN Находит минимальное значение поля. MAX находит максимальное значение поля; AVG находит среднее значение поля;

GROUP BY Разделяет результаты запроса в группы содержащие все строки с одинаковыми значениями, основанными на списке столбцов. (Группирует возвращенные строки основываясь на общих значениях столбцов). Используется совместно с HAVING

HAVING Используется совместно с GROUP BY. Определяет условия, которые ограничивают группировку возвращаемых строк.

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

ORDER BY Определяет порядок сортировки строк возвращенных SELECT, по умолчанию в возрастающем порядке (ASC), или в убывающем порядке

(DESC).

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

Примеры Чтобы найти сумму всех покупок в таблице «Заказы», мы можем ввести следующий запрос:

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

200

Соседние файлы в папке GOSY