Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Field2 character varying (80) character set greek




CREATE TABLE myTable

(

FIELD1 CHARACTER (60), FIELD2 CLOB (100000)

);

Здесь оператор create table создает таблицу с именем myТаЫе, которая состоит из двух столбцов с именами fieldi и field2, типы столбцов указаны рядом с их именами.

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

Так, в следующем примере создается таблица, в которой столбец fieldi объявляется как строковый с набором символов, принятым по умолчанию, а столбец field2 — как строковый с греческим набором символов:

 

CREATE TABLE myTable

(

FIELDI CHARACTER (60),

FIELD2 CHARACTER VARYING (80) CHARACTER SET GREEK

);

Значения строкового типа в SQL-выражениях заключаются

В одинарные кавычки.

Например, 'Иванов Иван Иванович', 42345 рублей', 'тел. (812) 123-456. Пустая строка не со­держит ни одного символа и имеет вид: ' '. Строка, содержащая один или более пробелов, не является пустой.

Иногда бывает так, что строковый столбец в таблице содержит только числа (точнее, строки, содержащие цифры, знаки числа и разделительные точки). Чтобы использовать такие данные в опе­рациях с числами, необходимо привести данные одного типа к другому типу с помощью функции cast ().

Значения типа character и character varying (varchar) со­вместимы в том смысле, что они могут участвовать как операн­ды в строковых операциях и операциях сравнения.

 

Числа

Числовой тип данных может быть двух видов — точный и при­близительный.

Точные числовые типы позволяют точно выра­зить значение числа. Некоторые величины имеют очень большой диапазон значений, и в таких случаях достаточно ограничиться некоторым приближенным их представлением с учетом техниче­ских возможностей компьютера (размеров регистра).

К точным числовым относятся следующие пять типов:

integer — целое (без дробной части) число. Количество раз­рядов (точность) зависит от реализации SQL. В некоторых реализациях числа этого типа лежат в диапазоне от -2 147 483 648 до 2 147 483 647 (четырехбайтное целое число);

smallint — малое целое число. Количество разрядов зависит от реализации SQL, но не больше количества разрядов integer в этой же реализации. В некоторых реализациях чис­ла этого типа лежат в диапазоне от -32 768 до 32 767 (двух­байтное целое число);

bigint — большое целое число. Количество разрядов зависит от реализации SQL и превышает количество разрядов числа типа integer;

numeric (x, у) — число, в котором всего х разрядов (точ­ность), из которых у разрядов (масштаб) отводится для дроб­ной части. Если у не указано (numeric (х)), то для дробной части отводится количество разрядов, установленное в систе­ме по умолчанию. Если не указаны ни х, ни у (numeric), то принимаются обе эти величины, установленные по умолча­нию. Например, если указан тип numerc (6, 2), то макси­мальное значение числа равно 9999.99;

decimal (х, у) — десятичное число, в котором всего х раз­рядов, из которых у разрядов отводятся для дробной части. Если х или/и у не указаны, то принимаются значения по умолчанию. Этот тип очень похож на numeric. Отличие со­стоит в том, что если в decimal (x, у) указанные х и у меньше, чем допустимые реализацией SQL, то будут исполь­зоваться последние. Если х и у не указаны, то применяется система умолчаний.

Например, вы задали для столбца тип decimal (6, 2). Если реализация SQL позволяет, то в этот столбец можно ввести числа, превышающие 9999.99. В отли­чие от decimal (x, у), тип numeric (x, у) жестко задает диапазон возможных значений числовой величины.

К приблизительным числовым типам относятся следующие три типа:

real — вещественное число одинарной точности с плаваю­щей разделительной точкой (эта точка "плавает", появляясь в различных местах числа).

Например,5.25,5.257,5.2573. Точность представления числа зависит от реализации SQL и оборудования. Например, 32-битовый компьютер дает большую точность, чем 16-битовый;

double precision — вещественное число двойной точности с плавающей разделительной точкой. Точность представления числа зависит от реализации SQL и оборудования. Применя­ется для представления научных данных (например, результа­тов измерений) в широком диапазоне значений, т. е. как очень малых (близких к 0), так и очень больших;

float (x) — вещественное число с плавающей разделитель­ной точкой и минимальной точностью х, занимающее не бо­лее 8 байтов. Если компьютер может поддержать указанную точность, используя аппаратную одинарную точность, то сис­тема будет использовать арифметику одинарной точности. Если указанная точность, требует арифметики с двойной точ­ностью, то система будет использовать ее.

Данный тип следует применять, если предполагается возможность переноса базы данных на другую аппаратную платформу, отличающуюся раз­мерами регистров. Пример значения типа float: 5.318E-24 (т.е. 5.318, умноженное на 10 в степени -24). Такую же форму представления имеют и числа типа real и double PRECISION.

При создании таблиц целочисленные типы применяются для столбцов, содержащих разного рода идентификаторы, например, номера (коды) клиентов, товаров, заказов и т. п. Разумеется, ес­ли содержимое столбца должно быть целым числом (например, количество ящиков, бутылок, штук и т. п.), то тип этого столбца естественно определить как integer, smallint или bigint.

Допустим, в таблице Клиенты имеется столбец Код_клиента, со­держащий уникальные идентификаторы клиентов. Если количе­ство клиентов не превышает 32 000, то тип столбца можно опре­делить как smallint. Если в вашей таблице будут храниться сведения о сотнях тысяч клиентов, то тип столбца Код_клиента следует определить как integer.

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

Если вы не уверены, что применить: точные числовые типы или приблизительные, выбирайте точные (numeric, decimal). Они требуют меньше ресурсов и дают точ­ные результаты. Если в столбце предполагается хранить данные из очень широкого диапазона (и очень малые, и очень большие числа), то используйте приблизительные типы данных (float, real).

Обратите внимание, что строка, содержащая число (например, 42345.47'), является данным строкового, а не числового типа. Чтобы в SQL-выражениях сравнивать строковые и числовые данные, необходимо один из типов привести к другому с помо­щью функции cast ().

Логические данные

 

В этой части математической логики, основоположником кото­рой был английский математик Джон Буль, данные имеют толь­ко два значения — ИСТИНА и ЛОЖЬ, обозначаемые как true и false соответственно. Данные логического типа получаются в результате операций сравнения. Например, результатом вы­числения выражения 3 < 5 является ИСТИНА, а выражения 2 + 3 = 10- ЛОЖЬ.

В SQL тип данных boolean (булевский) имеет три значения — true, false и unknown. Значение unknown (неизвестное) было введено для обозначения результата, получающегося при срав­нении со значением null (неопределенное). Если пользователь еще не ввел в ячейку таблицы никакого значения, то эта "пус­тая" ячейка содержит значение null, интерпретируемое как неизвестное или неопределенное значение.

Результатом любой операции сравнения true или false с null или с unknown всегда является unknown.

В SQL-выражениях логические значения заключаются в кавыч­ки, например, 'TRUE' ИЛИ 'true'.

Дата и время

 

Тип data (дата) предназначен для хранения значений даты, эле­менты которых расположены в следующем порядке: год (4 цифры), дефис (-), месяц (2 цифры), дефис, день (2 цифры).

 

Основное SQL-выражение для выборки данных

 

Чтобы выбрать из таблицы базы данных требуемые записи, сле­дует, по крайней мере, указать столбцы и имя этой таблицы. Это требование было бы естественно сформулировать так:

 

ВЫБРАТЬ такие-то столбцы ИЗ такой-то таблицы;

 

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

 

SELECT списокСтолбцов FROM списокТаблиц;

Операторы select (выбрать) и from (из) в SQL-выражении, оп­ределяющем выборку данных, являются обязательными, т. е. ни один из них нельзя пропустить. SQL-выражение, содержащее только эти операторы, является основным выражением, опреде­ляющим запрос к базе данных на выборку данных. В результате выполнения этого запроса создается виртуальная таблица, со­держащая указанные столбцы и все записи исходной таблицы.

 

Примечание

Оператор select осуществляет проекцию отношения, указанного в выражении from, на заданное множество атрибутов (столбцов), указанное в выражении select. Так, например, если исходная таблица r содержит столбцы А1, А2,...An (другими словами, таб­лица представляет некоторое отношение R(A1, А2 An) над атрибутами (А1, А2, An), то оператор:

SELECT Al,A2,Ak FROM R;

реализует проекцию R[A1, A2, Ak] этого отношения на атрибуты А1, А2, Ak (k= 1,2,…n)

 

 

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

Список столбцов — это перечень имен столбцов, разделенных запятой, как они определены в таблице, указанной в выражении from. Разумеется, можно указать все или только некоторые столбцы. Если вы хотите получить все столбцы таблицы, то вме­сто списка столбцов достаточно указать символ (*). Если в вы­ражении from указано несколько таблиц, то в выражении select имена столбцов должны содержать префиксы, указывающие, к какой именно таблице они относятся. Префикс отделяется от имени столбца точкой. Например, выражение Клиенты.Адрес означает столбец Адрес из таблицы Клиенты.

 

Тривиальный запрос, возвращающий все данные (все столбцы и все записи) из одной таблицы, формулируется так:

 

SELECT * FROM имяТаблицы;

Основное SQL-выражение может быть дополнено другими опе­раторами, уточняющими запрос.Чаще всего употребляется оператор where (где), с помощью которого можно задать условие выборки запи­сей (строк таблицы). Таким образом, если выражение select задает столбцы таблицы, указанной в операторе from, то выра­жение where определяет записи (строки) из этой таблицы. Вы­ражение, определяющее запрос на выборку данных, находящих­ся в некоторой таблице, имеет следующий вид:

 

SELECT * FROM имяТаблицы WHERE условиеПоиска;

Условие, указанное в выражении where, принимает одно из двух логических значений: true (ИСТИНА) или false (ЛОЖЬ). Другими словами, это логическое выражение. При обработке запроса условие проверяется для каждой записи таблицы

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

Если выражение where не указано в SQL-выражении, то результатная таблица будет содержать все записи из таблицы, заданной в вы­ражении from. Таким образом, выражение where определяет фильтр записей. Фильтр что-то пропускает в результатную таб­лицу, а что-то отбрасывает.

Примечание

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

Сразу за оператором select до списка столбцов можно приме­нять ключевые слова all (все) и distinct (отличающиеся), которые указывают, какие записи представлять в результатной таблице. Если эти ключевые слова не используются, то подразу­мевается, что следует выбрать все записи, что также соответству­ет применению ключевого слова all. В случае использования distinct в результатной таблице представляются только уникальные записи. При этом если в исходной таблице находятся несколько идентичных записей, то из них выбирается только первая.

В Microsoft Access кроме ключевых слов all и distinct после select можно использовать ключевое слово тор с дополнитель­ными параметрами. Выражение ТОР n требует, чтобы в выборку данных попали только первые n записей, удовлетворяющих за­данному условию запроса. Это ограничение условия поиска нуж­ных записей, формулируемого в выражении where. Если исход­ная таблица очень большая, то distinct может ускорить получение ответа.

 

В Access можно использовать и выражение тор n percent, что­бы указать, что n выражается в процентах от общего количества записей. Не трудно понять, что использование такого выражения направлено не на ускорение поиска, а на получение таблицы, из­бавленной от лишних данных. Для этого в списке столбцов после соответствую­щего

Заголовки столбцов в результатной таблице можно переопреде­лить по своему усмотрению, назначив для них так называемые псевдонимы. Для этого в списке столбцов после соответствую­щего столбца следует написать выражение вида: as заголовок_столбца. Например:

 

SELECT ClientName AS Клиент, Address AS Адрес FROM Клиенты;

Псевдонимы также можно задать и для каждой таблицы после ключевого слова from. Для этого достаточно указать псевдоним через пробел сразу после имени соответствующей таблицы. Псевдонимы таблиц, более короткие, чем их имена, удобно ис­пользовать в сложных запросах. Например:

 

SELECT Т1.Имя, Т2.Адрес FROM Клиенты Т1, Контакты Т2;

Уточнения запроса

Основное SQL-выражение для выборки данных имеет вид:

 

SELECT списокСтолбцов FROM списокТаблиц;

Такой запрос возвращает таблицу, полученную из указанной в операторе from (или из декартового произведения указанных таблиц, если их несколько), путем выделения в ней только тех столбцов, которые определены в операторе select. Для выделения требуемых записей (строк) исходной таблицы используется выражение, следующее за ключевым словом (оператором) where. Оператор where является наиболее часто используемым, хотя и не обязательным в SQL-выражении. Именно из-за популярности его можно считать основным компонентом SQL-выражения. Кроме where, в SQL-выражениях используются и другие операторы, позволяющие уточнить запрос.

 

Для уточнения запроса на выборку данных служит ряд дополни­тельных операторов:

 

1. where (где) — указывает записи, которые должны войти в ре­зультатную таблицу (фильтр записей);

2. group by (группировать по) — группирует записи по значе­ниям определенных столбцов;

3. having (имеющие, при условии) — указывает группы запи­сей, которые должны войти в результатную таблицу (фильтр групп);

4. order by (сортировать по) — сортирует (упорядочивает) записи. Эти операторы не являются обязательными. Их можно совсем не использовать, или использовать лишь некоторые из них, или все сразу. Если применяются несколько операторов, то в SQL-выражении они используются в указанном в списке порядке.

 

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

 

SELECT список Столбцов FROM имя Таблицы

WHERE условие Поиска

GROUP BY столбец Группировки

HAVING условие Поиска

ORDER BY условие Сортировки;

Порядок перечисления операторов в SQL-выражении не совпа­дает с порядком их выполнения. Однако знание порядка выпол­нения операторов поможет вам избежать многих недоразумений. Итак, перечисленные операторы SQL-выражения выполняются в следующем порядке, передавая друг другу результат в виде таб­лицы:

 

1. from — выбирает таблицу из базы данных; если указано несколько таблиц, то выполняется их декартово произведение и результирующая таблица передается для обработки сле­дующему оператору.

2. where — из таблицы выбираются записи, отвечающие усло­вию поиска, и отбрасываются все остальные.

3. group by — создаются группы записей, отобранных с помощью оператора where (если он присутствует в SQL-выражении); каждая группа соответствует какому-нибудь значению столб­ца группирования. Столбец группирования может быть лю­бым столбцом таблицы, заданной в операторе from, а не только тем, который указан в select.

4. having — обрабатывает каждую из созданных групп записей, оставляя только те из них, которые удовлетворяют условию поиска; этот оператор используется только вместе с операто­ром group by.

5. select — выбирает из таблицы, полученной в результате применения перечисленных операторов, только указанные столбцы.

6. order by — сортирует записи таблицы. При этом в условии сортировки можно обращаться лишь к тем столбцам, которые указаны в операторе select.

 

Допустим, среди таблиц вашей базы данных имеется таблица клиенты, которая содержит столбцы с именами: Имя, Адрес, Сумма заказа и, возможно, какие-то другие Семантика этой таблицы тривиальна. В ней фиксируются данные о клиен­тах и денежные суммы, которые они заплатили вашей фирме, пользуясь ее услугами.

Предположим, нас интересуют не все данные этой таблицы, а только те, которые касаются клиентов, заплативших фирме более 500 (сейчас не важно, в какой валюте производились оп­латы). Точнее, нам нужны имена и адреса клиентов, которые заплатили фирме более 500 денежных единиц. Таким образом, нам необходимо получить не все, что содержится в таблице клиенты, а лишь некоторую ее часть, как по столбцам, так и по записям. Для этой цели подойдет следующее SQL-выражение

 

SELECT Имя, Адрес FROM Клиенты WHERE Сумма_заказа > 500;

Это SQL-выражение представляет собой запрос, который на ес­тественном языке выглядит приблизительно так:

 

ВЫБРАТЬ СТОЛБЦЫ Имя, Адрес ИЗ ТАБЛИЦЫ Клиенты ГДЕ Сумма_заказа > 500;

 

Здесь из таблицы Клиенты выбираются записи, в которых значе­ние столбца сумма заказа превышает 500. При этом в резуль­татной таблице будут представлены только два столбца таблицы:

Клиенты: Имя и Адрес

Столбец Сумма_заказа, имеющийся в исходной таблице, в дан­ном случае не выводится (отсутствует в результирующей табли­це). Впрочем, если бы вам потребовалось увидеть конкретные суммы, превышающие 500, то для этого было бы достаточно указать в списке столбцов, следующем за оператором Select, еще и столбец Сумма_заказа.

Следующее SQL-выражение создает виртуальную таблицу, со­держащую три столбца: Регион, Имя и Адрес. Из Таблицы Клиенты выбираются только те записи, в которых Сумма_заказа превы­шает 500, и они группируются по значениям столбцов Регион, Имя и Адрес.

 

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

 

 

SELECT Регион, Имя, Адрес FROM Клиенты

WHERE Сумма_заказа > 500

GROUP BY Регион, Имя, Адрес

ORDER BY Имя;

Оператор WHERE

 

Условия поиска в операторе where (где) являются логическими выражениями, т. е. принимающими одно из двух возможных значений — true (ИСТИНА) или false (ЛОЖЬ). Например, выражение Сумма_заказа > 500 является истинным (имеет зна­чение true), если в текущей записи таблицы значение столбца Сумма_заказа превышает 500. В противном случае это выраже­ние ложно (имеет значение false).

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

Напомню, что выражение, следующее за оператором where, воз­вращает одно из трех значений: true, false или null. При вы­полнении запроса (SQL-выражения) логическое выражение where применяется ко всем записям исходной таблицы. Если оно истинно для данной записи исходной таблицы, то эта запись выбирается и будет представлена в результатной таблице; в противном случае запись не попадет в результатную таблицу.

При составлении логических выражений используются спе­циальные ключевые слова. и символы операций сравнения, которые называют предикатами. Например, в выражении Сумма_заказа > 500 применен предикат сравнения (>).

Выражения с оператором where используются не только при вы­борке данных (т. е. с оператором select), но и при вставке, мо­дификации и удалении записей. Таким образом, материал данного раздела имеет значение, выходящее за границы рассматривае­мой темы о выборке данных.

Наиболее часто используются предикаты сравнения, такие как (=) (<). (>) (<>). (<=) и (>=) Однако имеются и другие.

Далее приведен список всех предикатов:

предикаты сравнения: (=), (<), (>), (о), (<=), (>=);

 

· between;

· in, not in;

· like, not like

· is null;

· all, some, any;

· exists;

· unique;

· distinct;

· overlaps;

· match;

· SIMILAR.

BETWEEN

Предикат between (между) позволяет задать выражение провер­ки вхождения какого-либо значения в диапазон, определяемый граничными значениями. Например:

 

WHERE Сумма_заказа BETWEEN 100 AND 750

Здесь ключевое слово and представляет собой логический союз И. Граничные значения (в примере это 100 и 750) входят в диапа­зон. Причем первое граничное значение должно быть не больше второго.

Эквивалентным приведенному является выражение с предика­тами сравнения:

 

WHERE Сумма_заказа >= 100 AND Сумма_заказа <= 750

Кроме данных числового типа, в выражениях с beetween можно использовать данные следующих типов: символьные, битовые, даты-времени. Так например, чтобы выбрать записи, в которых имена клиентов находятся в диапазоне от А до Ж, можно ис­пользовать такое выражение:

 

SELECT Имя, Адрес FROM Клиенты WHERE Имя BETWEEN 'A' AND 'Ж';

IN и NOT IN

Предикаты in (в) и not in (не в) применяются для проверки вхождения какого-либо значения в заданный список значений. Например, для выборки записей о клиентах из некоторых ре­гионов можно использовать такое выражение:

 

SELECT.Имя, Адрес FROM Клиенты

WHERE Регион IN ('Северо-запад', 'Ставропольский край', 'Иркутская обл');

 

 

Если требуется получить данные о всех клиентах не из Москвы и Северо-запада, то можно использовать предикат not in:

 

SELECT Имя, Адрес FROM Клиенты

WHERE Регион NOT IN ('Москва', 'Санкт-Петербург');

LIKE и NOT LIKE

Предикаты like (похожий) и not like (не похожий) применя­ются для проверки частичного соответствия символьных строк.

Например, столбец телефон в некоторой таблице содержит пол­ные номера телефонов, а вам требуется выбрать лишь те записи, в которых номера телефонов начинаются с 348 или содержат такое сочетание цифр.

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

Например, чтобы выбрать записи о клиентах, у которых номера телефонов начинаются с 348, можно использовать такое выра­жение:

 

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Телефон LIKE '348%';

Допустим, столбец Адрес содержит полный почтовый адрес (ин­декс, название города, улицы и т. д.). Если требуется вы­брать записи о клиентах, проживающих в Санкт-Петербурге, то для этого подойдет следующее выражение:

 

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Адрес LIKE '%Санкт-Петербург%';

Если хотим исключить всех клиентов, проживающих в Мо­скве, то воспользуйтесь таким выражением:

 

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Адрес NOT LIKE '%Москва%';

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

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

 

SELECT Имя, Адрес, Процент_скидки FROM Клиенты

WHERE Процент_скидки LIKE '20#%' ESCAPE '#';

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

 

IS NULL

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

 

SELECT Имя, Адрес, Регион FROM Клиенты

WHERE Адрес IS NULL;

Для получения записей, в которых столбец Адрес содержит не­которые определенные значения (т. е. отличные от null), можно использовать аналогичное выражение, но с логическим операто­ром not (не):

 

SELECT Имя, Адрес, Регион FROM Клиенты

WHERE Адрес IS NOT NULL;

Не следует использовать предикаты сравнения с null, такие как

Адрес = NULL.

Предикаты для вложенных запросов

В выражении where, кроме перечисленных предикатов, могут также использоваться выражения с оператором select.

Любое выражение, начинающееся с оператора select, является запро­сом к базе данных. Если в выражении встречается еще хотя бы один оператор select, то он задает запрос, вложенный в пер­вый. Вложенные запросы также называют подзапросами.

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

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

 

ALL, SOME, ANY

Предикаты all (все), soМe (некоторый), any (любой) в действи­тельности представляют собой кванторы, известные в математи­ческой логике как кванторы всеобщности и существования. all — квантор всеобщности, a some и any, являющиеся синони­мами в SQL, — кванторы существования. Заметим, что в пере­воде на русский слово any следовало бы понимать как квантор всеобщности ("любой" означает "все"), однако в английском языке есть различные варианты значений этого слова.

Применение ключевого слова all следует понимать как "для всех" или "для каждого". Ключевые слова some и any следует по­нимать как "хотя бы какой-нибудь один".

Как бы то ни было, в языке SQL ключевые слова some и any имеют одинаковый смысл, отличающийся от all.

Примечание

Выражения с ключевыми словами all, some (any) соответствуют логическим выражениям с кванторами и, как таковые, могут назы­ваться предикатами.

EXISTS

Обработка данных часто состоит из нескольких этапов. Так, снача­ла производится некоторая выборка данных, а затем выполняются какие-то манипуляции с ней.

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

Таким об­разом, полезно знать, содержит ли ответ на запрос какие-либо дан­ные. Для этого предназначен предикат exists ( существует).

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

 

UNIQUE

Предикат unique (уникальный) имеет такой же смысл, как и exists, но при этом для его истинности требуется, чтобы все записи в результатной таблице не только существовали, но и были уникальны (т. е. не повторялись).

 

DISTINCT

Предикат distinct (отличающийся, особый) почти такой же, как и unique. Отличие этих предикатов обнаруживается приме­нительно к значениям null.

Так, если в результатной таблице все записи уникальны (предикат unique истинен), то и предикат distinct тоже истинен (т. е. если все записи уникальны, то они и отличающиеся).

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

 

OVERLAPS

Предикат overlaps (перекрывает) используется для определе­ния, перекрываются ли два интервала времени.

Интервал време­ни можно задать двумя способами: в виде начального и конеч­ного моментов или в виде начального момента и длительности.

Далее приведены примеры задания интервала времени:

o (time 42:25:30', time ' 14: з0:00') — интервал, заданный начальным и конечным моментами;

o (TIME 42:45:00', INTERVAL '2' HOUR) — интервал, заданный начальным моментом и длительностью в часах.

 

Выражение с предикатом overlaps можно записать, например, так:

 

(TIME 42:25:30', TIME 44:30:00') OVERLAPS (TIME 42:45:00', INTERVAL '2' HOUR)

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

MATCH

Предикат match применяется для проверки сохранения ссылоч­ной целостности при модификации данных, т. е. при добавле­нии, изменении и удалении записей.

 

SIMILAR

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

Предположим, что в некоторой таблице имеется столбец ОС, со­держащий названия операционных систем. Нужно выбрать записи, соответствующие Windows NT, Windows XP и Windows 98. Тогда в выражении запроса можно использовать такой оператор where:

WHERE ОС SIMILAR TO '(Windows (NT|XP|98))';

Предикат впервые появился в SQL: 1999.

 

Оператор GROUP BY

Оператор group by (группировать по) служит для группировки записей по значениям одного или нескольких столбцов. Если в SQL-выражении используется оператор where, задающий фильтр записей, то оператор group by находится и выполняется после него.

Для определения, какие записи должны войти в группы, служит оператор having, используемый совместно с group by. Если оператор having не применяется, то груп­пировке подлежат все записи, отфильтрованные оператором where.

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

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

 

SELECT Регион, Сумма_заказа FROM Клиенты

GROUP BY Регион;

 

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

 

SELECT Регион, SUМ(Сумма_заказа) FROM Клиенты

GROUP BY Регион;

 

Здесь в выражении select указаны обычный столбец таблицы клиенты и итоговая функция sum (), вычисляющая сумму значе­ний столбца Сумма_заказа.

 

Поскольку группировка задана по столбцу Регион, то функция sum (Сумма_заказа) вычисляет сум­мы значений столбца Сумма_заказа для каждого значения столбца Регион.

Оператор grodp by собирает записи в группы и упорядочивает (сортирует) группы по алфавиту (точнее, по ASCII-кодам симво­лов).

Это обстоятельство следует иметь в виду перед тем, как принять решение об использовании оператора сортировки order by .

Оператор НАVING

Оператор having (имеющие, при условии) обычно применяется совместно с оператором группировки group by и задает фильтр записей в группах. Правила его формирования такие же, что и для оператора where.

Предположим, что из таблицы Клиенты требуется выбрать дан­ные о регионах и суммах заказов, сгруппированные по регионам и такие, в которых сумма заказа превышает 500. Иначе говоря, требуется сгруппировать данные с ограничением записей, вхо­дящих в группы. Запрос, выполняющий это задание, имеет вид:

 

SELECT Регион, Сумма_заказа FROM Клиенты

GROUP BY Регион, Сумма_заказа

HAVING Сумма_заказа > 500;

Если в SQL-выражении оператора group by нет, то оператор having применяется ко всем записям, возвращаемым операто­ром where. Если же отсутствует и where, то having действует на все записи таблицы.

 

Оператор ORDER BY

Оператор order by (сортировать по) применяется для упорядо­чивания (сортировки) записей. Если он используется в запросе, то в самом конце запроса.

Этот оператор сортирует строки всей таблицы или отдельных ее групп (в случае применения операто­ра group by). Если в выражении запроса оператора group by нет, то оператор order by рассматривает все записи таблицы как одну группу.

Вслед за ключевым словом order by указывает

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...