Field2 character varying (80) character set greek
Стр 1 из 3Следующая ⇒ 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|