Понимание SQL
Шрифт:
ИМЕЙТЕ ВВИДУ: Следуя строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а индификатор>identifier> не должен быть длиннее 18-ти символов.
<underscore > | – |
<percent sign> | % |
<delimiter > | любое из следующих:, < > . :=+ " - | <> >=<=или <string> |
<string > | [любой печатаемый текст в одиночных кавычках] |
Примечание: В <string>, две последовательных одиночных кавычки (' ' ) интерпретируются как одна ('). <SQL term > окончание, зависящее от главного языка. (*только вложеный*)
Следующая таблица показывает функциональные элементы команд SQL и их определения:
ЭЛЕМЕНТ | ОПРЕДЕЛЕНИЕ |
<query > | Предложение SELECT |
<subquery > | Заключеное |
<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> рассматриваются отдельно в следующем разделе.
<comparison predicate> (предикат сравнения)
Синтаксис
<value expresslon> <relational op> <value expresslon> |
<subquery> <relatlonal op> ::= = | < | > | < | >= | <>
Если либо <value expression>=NULL, либо <comparison predicate >=неизвестно; другими словами, это верно если сравнение верно или невер-но если сравнение неверно.
<relational op> имеет стандартные математические значения для числовых значений; для других типов значений, эти значения определяются конкретной реализацией. Оба <value expression> должны иметь сравнимые типы данных. Если подзапрос<subquery> используется, он должен содержать одно выражение <value expression> в предложении SELECT, чье значение будет заменять второе выражение <value expression> в предикате сравнения<comparision predicate>, каждый раз когда <subquery > действительно выполняется.
<between predicate>
Синтаксис
< value expression > [NOT] BETWEEN < value expression >
AND < value expression >
< between predicate > - A BETWEEN B AND C, имеет такое же значение что и <predicate > - (A >=B AND <=C). <between predicate> для которого A NOT BETWEEN B AND C, имеет такое же значение что и NOT (BETWEEN B AND C). <value expression> может быть выведено с помощью нестандартного запроса <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> будет верен если выражение<value expression> представленное в списке значений<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>.