Мартин Грубер - Понимание SQL (991940), страница 54
Текст из файла (страница 54)
Это будет случаться всякий раз, когда NULL значение сравнивается слюбым значением.Стандартные операторы Буля — AND, OR и NOT — могут использоваться с предикатом <predicate>. NOT верно = неверно, NOT неверно = верно, а NOT неизвестно =неизвестно. Резултаты AND и OR в комбинации с предикатами, показаны в следующих таблицах:ANDВерноверноВерноневерноНеверноНеизвестно неизвестноORВерноНеверноНеизвестноВерноверноверноверноНеверноневерноневерноневерноНеизвестнонеизвестноневернонеизвестноНеверно Неизвестноверноверноневернонеизвестнонеизвестно неизвестноЭти таблицы читаются способом на подобии таблицы умножения: вы объединяете верные, неверные, или неизвестные значения из строк с их столбцами, чтобына перекрестье получить результат.
В таблице AND, например, третий столбец (Неизвестно) и первая строка (Верно) на пересечении в верхнем правом углу дают результат — неизвестно, другими словами: Верно AND Неизвестно = неизвестно.Порядок вычислений определяется круглыми скобками. Они не представляютсякаждый раз. NOT оценивается первым, далее AND и OR. Различные типы предикатов<predicate> рассматриваются отдельно в следующем разделе.<comparison predicate> (предикат сравнения)Синтаксис<value expresslon> <relational op> <value expresslon> | <subquery><relatlonal op> ::= = | < | > | < | >= | <>Если либо <value expression> = NULL, либо <comparison predicate> = неизвестно;другими словами, это верно если сравнение верно или неверно если сравнение неверно.<relational op> имеет стандартные математические значения для числовых значений; для других типов значений, эти значения определяются конкретной реализацией.
Оба <value expression> должны иметь сравнимые типы данных. Если подзапрос<subquery> используется, он должен содержать одно выражение <value expression> впредложении SELECT, чье значение будет заменять второе выражение <valueexpression> в предикате сравнения <comparision predicate>, каждый раз когда<subquery> действительно выполняется.<between predicate>Синтаксис<value expression> [NOT] BETWEEN <value expression> AND <valueexpression><between predicate> — A BETWEEN B AND C, имеет такое же значение что и<predicate> — (A >= B AND <= C).
<between predicate> для которого A NOT BETWEENB AND C, имеет такое же значение что и NOT (BETWEEN B AND C). <valueexpression> может быть выведено с помощью нестандартного запроса <subquery>(*nonstandard*).<in prediicate>Синтаксис<value expression> [NOT] IN <value list> | <subquery>Список значений<value list> будет состоять из одного или более перечисленыхзначений в круглых скобках и отделяемых запятыми, которые имеют сравнимый с<value expression> тип данных.
Если используется подзапрос <subquery>, он долженсодержать только одно выражение <value expression> в предложении SELECT (возможно и больше, но это уже будет вне стандарта ANSI). Подзапрос <subquery> фактически, выполняется отдельно для каждой строки-кандидата основного запроса, изначения которые он выведет, будут составлять список значений <value list> для этойстроки. В любом случае, предикат <in predicate> будет верен если выражение <valueexpression> представленное в списке значений <value list>, если не указан NOT. ФразаA NOT IN (B, C) является эквивалентом фразы NOT (A IN (B, C)).<like predicate>Синтаксис<charvalue> [NOT] LIKE <pattern> [ESCAPE <escapechar>]<charvalue> — это любое *нестандартное* выражение <value expression> алфавитно-цифрового типа.
<charvalue> может быть, в сооветствии со стандартом, толькоопределенным столбцом <column spec>. Образец <pattern> состоит из строки <string>которая будет проверена на совпадение с <charvalue>. Символ окончания<escapechar> — это одиночный алфавитно-цифровой символ. Совпадение произойдет, если верны следующие условия:* Для каждого символа подчеркивания <underscore> в образце <pattern> котораяне предшесивует символу окончания <escapechar>, имеется один соответствующийему символ <charvalue>.* Для каждого <percent sign> в образце <pattern> который не предшествует<escapechar>, имеются нули или более соответствующие символы в <charvalue>.* Для каждого <escapechar> в <pattern> который не предшествует другому<escapechar>, нет никакого соответствующего символа в <charvalue>.* Для каждого иного символа в <pattern>, один и тот же символ устанавливаетсяу соответствующей отметке в <charvalue>.Если совпадение произошло, <like predicate> — верен, если не был указан NOT.Фраза NOT LIKE 'текст' эквивалентна NOT (A LIKE 'текст').<null predicate>Синтаксис<column spec> IS [NOT] NULL<column spec> = IS NULL, если NULL значение представлено в этом столбце.Это сделает <null predicate> верным если не указан NULL.
Фраза <column spec> ISNOT NULL имеет тот же результат, что и NOT(<column spec> IS NULL).<quantified predicate>Синтаксис<value expression> <relational op> <quantifier> <subquery> <quantifier>::= ANY | ALL | SOMEПредложение SELECT подзапроса <subquery> должно содержать одно и толькоодно выражение значения <value expression>. Все значения выведенные подзапросом<subquery> составляют набор результатов <result set>.
<value expression> сравнивается, используя оператор связи <relational operator>, с каждым членом набора результатов<result set>. Это сравнение оценивается следующим образом:* Если <quantifier> = ALL, и каждый член набора результатов <result set> делаетэто сравнение верным, <quantified predicate> — верен.* Если <quantifier> = ANY, и имеется по крайней мере один член из набора результатов <result set>, который делает верным это сравнение, то <quantified predicate>является верным.* Если набор результатов <result set> пуст, то <quantified predicate> верен, если<quantifier> = ALL, и неверен если иначе.* Если <quantifier> = SOME, эффект — тот же что и для ANY.* Если <quantified predicate> не верен и не неверен, он — неизвестен.<exists predicate>Синтаксис:EXISTS (<subquery>)Если подзапрос <subquery> выводит одну или более строк вывода, <existspredicate> — верен; и неверен, если иначе.SQL КОМАНДЫЭтот раздел подробно описывает синтаксис различных команд SQL.
Это даствам возможность быстро отыскивать команду, находить ее синтаксис и краткое описание ее работы.ИМЕЙТЕ ВВИДУ: Команды, которые начинаются словами EXEC SQL, а такжекоманды или предложения заканчивающиеся словом — <SQL term> могут использоваться только во вложенном SQL.BEGIN DECLARE SECTION(НАЧАЛО РАЗДЕЛА ОБЪЯВЛЕНИЙ)СинтаксисEXEC SQL BEGIN DECLARE SECTION <SQL term><host-language variable declarations>EXEC SQL END DECLARE SECTION<SQL term>Эта команда создает раздел программы главного языка для обьявления в нейглавных переменных, которые будут использоваться во вкладываемых операторахSQL. Переменная SQLCODE должна быть включена как одна из обьявляемых переменных главного языка.CLOSE CURSOR(ЗАКРЫТЬ КУРСОР)СинтаксисEXEC SQL CLOSE CURSOR <cursor name> <SQL term>;Эта команда указывает курсору закрыться, после чего ни одно значение не сможет быть выбрано из него до тех пор пока он не будет снова открыт.COMMIT (WORK)(ФИКСАЦИЯ (ТРАНЗАКЦИИ))СинтаксисCOMMIT WORK;Эта команда оставляет неизменными все изменения, сделанные в базе данных,до тех пор, пока начавшаяся транзакция не закончится, и не начнется новая транзакция.CREATE INDEX (*NONSTANDARD*)(СОЗДАТЬ ИНДЕКС) (*НЕСТАНДАРТНО*)СинтаксисCREATE [UNIQUE] INDEX <Index name> ON <table name> (<column list>);Эта команда создает эффективный маршрут с быстрым доступом для поискастрок содержащих обозначенные столбцы.
Если UNIQUE — указана, таблица не сможет содержать дубликатов (двойников) значений в этих столбцах.CREATE SYNONYM (*NONSTANDARD*)(СОЗДАТЬ СИНОНИМ) (*НЕСТАНДАРТНО*)СинтаксисCREATE IPUBLICl SYNONYM <synonym> FOR <owner>.<table name>;Эта команда создает альтернативное (синоним) имя для таблицы. Синоним принадлежит его создателю, а сама таблица, обычно другому пользователю. Используясиноним, его владелец может не ссылаться к таблице ее полным (включая имя владельца) именем. Если PUBLIC — указан, синоним принадлежит каталогу SYSTEM иследовательно доступен всем пользователям.CREATE TABLE(СОЗДАТЬ ТАБЛИЦУ)СинтаксисCREATE TABLE <table name> ({<column name> <data type>[<size>][<colconstralnt> ...] [<defvalue>]} .,..
<tabconstraint> .,..);Команда создает таблицу в базе данных. Эта таблица будет принадлежать еесоздателю. Столбцы будут рассматриваться в поименном порядке.<data type> определяет тип данных который будет содержать столбец. Стандарт<data type> описывается в Приложении B; все прочие используемые типы данных<data type>, обсуждались в Приложении C. Значение размера <size> зависит от типаданных <data type>.<colconstraint> и <tabconstraint> налагают ограничения на значения, которые могут быть введены в столбце.<defvalue> определяет значение (по умолчанию) которое будет вставлено автоматически, если никакого другого значения не указано для этой строки.
(См. Главу 17для подробностей о самой команде CREATE TABLE и Главы 18 И 19 для подробностей об ограничениях и о <defvalue>).CREATE VIEW(СОЗДАТЬ ПРОСМОТР)СинтаксисCREATE VIEW <table name> AS <query> [WITH CHECK OPTION];Просмотр обрабатывается как любая таблица в командах SQL. Когда командассылается на имя таблицы <table name>, запрос <query> выполняется, и его выводсоответствует содержанию таблицы указнной в этой команде.Некоторые просмотры могут модифицироваться, что означает, что команды модификации могут выполняться в этих просмотрах и передаваться в таблицу, на которую была ссылка в запросе <query>. Если указано предложение WITH CHECKOPTION, эта модификация должна также удовлетворять условию предиката<predicate> в запросе <query>.DECLARE CURSOR(ОБЬЯВИТЬ КУРСОР)СинтаксисEXEC SQL DECLARE <cursor name> CURSOR FOR <query><SQL term>Эта команда связывает имя курсора <cursor name>, с запросом <query>.
Когдакурсор открыт (см. OPEN CURSOR), запрос <query> выполняется, и его результат может быть выбран (командой FETCH) для вывода. Если курсор модифицируемый, таблица на которую ссылается запрос <query>, может получить изменение содержания спомощью операции модификации в курсоре (См. Главу 25 о модифицируемых курсорах).DELETE(УДАЛИТЬ)СинтаксисDELETE FROM <table name> {[WHERE <predicate>];} | WHERE CURRENT OF<cursor name><SQL term>Если предложение WHERE отсутствует, ВСЕ строки таблицы удаляются. Еслипредложение WHERE использует предикат <predicate>, строки, которые удовлетворяют условию этого предиката <predicate> удаляются.