- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
Внутренние операторы SELECT, которые возвращают единственное (скалярное) значение для вывода или для сравнения в предикате
Локальные переменные
Именованные хранимые процедуры, триггеры или (в ESQL) переменные приложений, содержащие значения, которые могут изменяться в процессе выполнения
Идентификаторы функций
Идентификаторы внутренних или внешних функций в функциональных выражениях
CAST(значение AS тип-данных)
Функциональные выражения, явно преобразующие значение одного типа данных в другой тип данных
Условные выражения
Функции, объявляющие два или более взаимоисключающих условия для одного столбца, начинающиеся с ключевого слова CASE, COALESCE или NULLIF
Круглые скобки
Используются для группирования выражений. Операции внутри скобок выполняются перед операциями вне скобок. Когда используются вложенные скобки, вначале вычисляются значения самых внутренних выражений, затем вычисления перемещаются вверх по уровням вложенности
Предложение COLLATE
Может быть применено со значениями CHAR и VARCHAR, чтобы использовать строковые сравнения в указанной последовательности сортировки
Операторы SQL
Синтаксис SQL Firebird включает операторы для сравнения и вычисления значений столбцов, констант, переменных и выражений встраиваемого SQL для получения различных утверждений.
Приоритет операторов
Приоритет определяет порядок, в котором операторы и создаваемые ими значения вычисляются в выражении.
Когда выражение содержит несколько операторов одного и того же типа, операторы вычисляются слева направо, если только не существует конфликта, когда два оператора одного и того же типа воздействуют на одни и те же значения. Когда возникает конфликт, приоритет операторов определяется типом. В табл. 21.2 показаны приоритеты типов операторов Firebird от высшего к низшему.
Таблица 21.2. Приоритеты типов операторов
Тип оператора
Приоритет
Объяснение
Конкатенация
1
Строки объединяются до выполнения любых других операций
Арифметический
2
Арифметические операции выполняются после конкатенации строк, но перед выполнением сравнений и логических операций
Сравнение
3
Операции сравнения вычисляются после конкатенации строк и выполнения арифметических операций, но до логических операций
Логический
4
Логические операции выполняются после всех других операций.
Приоритет: когда условия поиска являются комбинированными, порядок вычислений определяется приоритетом используемых операторов, NOT вычисляется перед AND, а AND вычисляется перед OR. Круглые скобки могут использоваться для изменения порядка вычисления
Оператор конкатенации
Оператор конкатенации (и) соединяет две символьные строки и создает одну строку. Символьные строки могут быть константами или значениями, полученными из столбцов:
SELECT Last_name ||', ' || First_Name AS Full_Name FROM Membership;
! ! !
ПРИМЕЧАНИЕ. Firebird более требователен к переполнению строк, чем его предшественники. Он проверит длину входных столбцов и заблокирует конкатенацию, если результирующий размер потенциально может превысить лимит для VARCHAR (32 765 байтов).
. ! .
Арифметические операции
Арифметические выражения вычисляются слева направо за исключением случаев, когда возникает двусмысленность. В этих случаях арифметические операции вычисляются в соответствии с приоритетами, описанными в табл. 21.3. Например, умножение выполняется до деления, а деление выполняется до вычитания.
Арифметические операции всегда выполняются до сравнений и логических операций. Для изменения порядка вычислений сгруппируйте операции с помощью круглых скобок.
Таблица 21.3. Приоритеты арифметических операций
Оператор
Назначение
Приоритет
*
Умножение
1
/
Деление
2
+
Сложение
3
-
Вычитание
4
Следующий пример иллюстрирует, как сложное вычисление может быть сделано вложенным, для обеспечения того, чтобы выражение вычислялось в корректном, недвусмысленном порядке:
. . .
SET COLUMN_A = 1/((COLUMN_B * COLUMN_C/4) - ( (COLUMN_D / 10) + 28))
Сервер может определить синтаксические ошибки - такие как несбалансированные скобки или включенное приложение, которое не дает результата, - но он не может определить логические ошибки или двусмысленности, которые являются синтаксически корректными. Очень запутанные вложенные выражения теоретически должны работать. Для упрощения процесса объединения таких предикатов всегда начинайте с изоляции самой внутренней операции и продолжайте работать "изнутри наружу", проверяя предикаты на калькуляторе на каждом шаге.
Операторы сравнения
Операторы сравнения проверяют отношение между значением в левой части оператора и значением или диапазоном значений в правой части оператора. Каждая проверка дает результат, который может быть истиной или ложью. Правила приоритета, применимые в вычислениях, указаны в табл. 21.4.
Таблица 21.4. Приоритеты операторов сравнения
Оператор
Назначение
Приоритет
=
Равно, идентично
1
<>, !=, ~=, ^=
Не равно
2
>
Больше
3
<
Меньше
4
>=
Больше или равно
5
<=
Меньше или равно
6
!>, ~>, ^>
Не больше
7
!<, ~<, ^<
Не меньше
8
Сравнения, которым встречается NULL В левой или правой части оператора, всегда следуют правилам логики SQL, вычисляя результат сравнения как NULL и возвращая ложь, например:
IF (YEAR_OF_BIRTH < 1950)
Это сравнение вернет ложь, если YEAR_OF_BIRTH равняется 1950, больше него или имеет значение NULL.
Подробное обсуждение NULL см. в разд. "Обсуждение NULL".
Пары сравниваемых значений могут быть столбцами, константами или вычисляемыми выражениями[73], они должны быть вычислены в том же типе данных. Функция CAST() может быть использована для трансляции в тип данных, совместимый для сравнения.
Арифметические предикаты, использующие эти символы, не требуют пояснения. При этом символьные проверки также могут их использовать. Проверки, использующие сравнения = и <>, понятны. Следующий оператор использует оператор >=, чтобы вернуть все строки, где LAST_NAME равен тестируемой строке, а также те строки, где LAST NAME рассматривается в алфавитно-цифровом порядке, как "больше, чем":
SELECT * FROM EMPLOYEE
WHERE LAST_NAME >= 'Smith';
В таблице EMPLOYEE нет значений 'Smith', HO запрос вернет 'Stansbury', 'Steadman' и так далее вплоть до 'Young'. База данных Employee в этом примере использует набор символов NONE, в котором символы в нижнем регистре имеют приоритет перед символами в верхнем регистре. В нашем примере строка 'SMITH' не будет выбрана, потому что искомая строка 'SM' (83 + 77) будет меньше, чем 'SM' (83 + 109).
Наборы символов и последовательности сортировкиАлфавитно-цифровые последовательности определяются на двух уровнях: набор символов и последовательность сортировки. Каждый набор символов имеет свои собственные уникальные правила приоритетов. Когда используется альтернативная последовательность сортировки, то правила последовательности сортировки перекрывают правила набора символов.
Последовательность сортировки по умолчанию для каждого набора символов - та последовательность, чье имя соответствует имени набора символов, - является бинарной. Двоичная последовательность сортировки определяет возрастание по цифровым кодам символа в той системе, в которой он кодирован (ASCII, ANSI, Unicode и т.д.). Альтернативные последовательности сортировки обычно перекрывают порядок по умолчанию, чтобы соблюдать локальные или специальные правила, такие как нечувствительность к регистру или упорядочение по словарю[74].
Другие предикаты сравнения
Предикаты BETWEEN, CONTAINING, LIKE и STARTING WITH, представленные в табл. 21.5, имеют одинаковый приоритет при вычислениях в операторах сравнения, описанных
в табл. 21.4. Если они конфликтуют друг с другом, то вычисление осуществляется строго слева направо.
Таблица 21.5. Другие предикаты сравнения
Предикат
Назначение
BETWEEN ... AND ...
Значение попадает во включающий диапазон значений
CONTAINING

