Грубер Мартин
Шрифт:
Это - части команды, отделяемые с помощью разделителей<separator>, имеющих специальное значение в SQL. Некоторые из них являются специальными для определенных команд и будут описаны вместе с этими командами позже, в этом приложении. Перечисленное здесь, является общими элементы для всех описываемых команд. Функциональные элементы могут определяться в терминах друг друга или даже в собственных терминах.
Например, предикат<predicate>, наш последний и наиболее сложный случай, содержит предикат<predicate> внутри собственного определения. Это потому, что предикат<predicate > использующий AND или OR может содержать любое число предикатов<predicate> которые могут работать автономно.
Мы представляли вам предикат<predicate> в отдельной секции в этом приложении, из-за разнообразия и сложности этого функционального элемента языка. Он будет постоянно присутствовать при обсуждении других функциональных частей команд.
ЭЛЕМЕНТ | ОПРЕДЕЛЕНИЕ |
<separator> | <comment > | <space > | <newline > |
<comment > | – -< string> <newline > |
<space> | пробел |
<newline> | реализационно-определяемый конец символьной строки |
<identifier > | <letter>[{<letter or digit> | <underscore}... ] |
ИМЕЙТЕ ВВИДУ: Следуя строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а индификатор>identifier> не должен быть длиннее 18-ти символов.
<underscore > | – |
<percent sign> | % |
<delimiter > | любое из следующих:, < > . :=+ " - | <> >=<=или <string> |
<string > | [любой печатаемый текст в одиночных кавычках] |
Примечание: В <string>, две последовательных одиночных кавычки (' ' ) интерпретируются как одна ('). <SQL term > окончание, зависящее от главного языка. (*только вложеный*)
Следующая таблица показывает функциональные элементы команд SQL и их определения:
ЭЛЕМЕНТ | ОПРЕДЕЛЕНИЕ |
<query > | Предложение SELECT |
<subquery > | Заключеное в круглых скобках предложение SELECT внутри другого условия, которое, фактически, оценивается отдельно для каждой строки-кандидата другого предложения. |
<value expression> | <primary >| <primary> <operator> <primary > | <primary > <operator> <value expression> |
<operator > | любое из следующих: + - / * |
<primary> | < column name > |<literal > | <aggregate function > | <built-in constant > | <nonstandard function > |
<literal > | <string > | <mathematical expressio > |
<built-in constant> | USER | <implementation-dehned constant > |
<table name> | <identifier> |
<column spec> | [<table name> | <alias>.]<column name> |
<grouping column > | < column spec > | < integer> |
<ordering column> | <column spec> | <integer> |
<colconstraint > | NOT NULL | UNIQUE | CHECK (<predicate>)| PRIMARY KEY | REFERENCES <table name>[(<column name>)] |
<tabconstraint> | UNIQUE (<column list>) | CHECK (<predicate>) | PRIMARY KEY (<column list>) | FOREIGN KEY (<column list>) REFERENCES <table name>[(<column list>)] |
<defvalue> | ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ=<value expression > |
<data type> | Допустимый тип данных (См. Приложение B для описания типов обеспечиваемых ANSI или Приложение C для других общих типов.) |
<size> | Значение зависит от <data type>( См. Приложение B. ) |
<cursor name> | <identifier> |
<index name> | <identifier> |
<synonym> | <identifier>(*nonstandard*) |
<owner> | <Authorization ID> |
<column list> | <column spec> .,.. |
<value list> | <value expression> .,.. |
<table reference> | { <table name> [<alias>] } .,.. |
Следующее определяет список различных типов предиката<predicate >
описаных на следующих страницах:
<predicate> ::=[NOT]
{ < comparison predicate > | <in predicate > | <null predicate > | <between predicate> | <like predicate > | <quantified predicate> | <exists predicate > }
[ANDI OR <predicate>]
<predicate > - это выражение, которое может быть верным, неверным, или неизвестным, за исключением <exists predicate> и <null predicate>, которые могут быть только верными или неверными.
Будет получено неизвестно если NULL значения предотвращают вывод полученного ответа. Это будет случаться всякий раз, когда NULL значение сравнивается с любым значением. Стандартные операторы Буля - AND, OR, и NOT - могут использоваться с предикатом<predicate>. NOT верно=неверно, NOT неверно=верно, а NOT неизвестно=неизвестно. Резултаты AND и OR в комбинации с предикатами, показаны в следующих таблицах:
AND
AND | верно | неверно | неизвестно |
верно | верно | неверно | неизвестно |
неверно | неверно | неверно | неверно |
неизвестно | неизвестно | неверно | неизвестно |
OR
OR | верно | неверно | неизвестно |
верно | верно | верно | верно |
неверно | верно | неверно | неизвестно |
неизвестно | верно | неизвестно | неизвестно |
Эти таблицы читаются способом на подобии таблицы умножения: вы объединяете верные, неверные, или неизвестные значения из строк с их столбцами чтобы на перекрестье получить результат. В таблице AND, например, третий столбец (Неизвестно) и первая строка (Верно) на пересечении в верхнем правом углу дают результат - неизвестно, другими словами: Верно AND Неизвестно=неизвестно.
Порядок вычислений определяется круглыми скобками. Они не представляются каждый раз. NOT оценивается первым, далее AND и OR. Различные типы предикатов<predicate> рассматриваются отдельно в следующем разделе.