Подстановочные знаки при сравнении строк


В данном случае речь идет о трех подстановочных знаках, приведенных в.
Таблица 8.7. Соответствие подстановочных знаков

Jet SQL

ANSI SQL

Примечание

?

(подчеркивание)

Любой одиночный символ

*

%

Произвольное количество символов

#

He имеет эквивалента

Любая цифра от 0 до 9

[список_знаков]

Не имеет эквивалента

Любой одиночный знак, входящий в
список знаков

[! список_знаков]

Не имеет эквивалента

Любой одиночный знак, не входящий в список знаков

Язык SQL Microsoft Jet поддерживает использование в операторе Like как подстановочных знаков ANSI SQL (_ и #), так и подстановочных знаков ядра Microsoft Jet (? и *). Однако подстановочные знаки ANSI SQL доступны только в режиме ANSI SQL-92, в противном случае они воспринимаются просто как строковые константы. И наоборот, в режиме ANSI SQL-92 подстановочные знаки Jet SQL трактуются как строковые константы. Таким образом, нельзя в одном запросе смешивать эти знаки.
Ниже перечислены важные правила установления совпадения оператором Like.

  • Восклицательный знак (!) в начале списка_знаков означает, что совпадение наступит, если в выражении будет найден любой знак, отсутствующий в списке. Восклицательный знак вне квадратных скобок соответствует самому себе.
  • Знак дефиса (-) можно использовать в начале (после восклицательного знака, если он есть) или в конце списка_знаков для установления соответствия с самим собой. В любом другом месте знак дефиса означает диапазон символов ANSI.
  • Если указан диапазон знаков, его границы должны следовать в возрастающем порядке (А— Я или 0—100). [А— Я] является правильным образцом, а [Я— А] — неправильным.
  • Квадратные скобки ([ ]) игнорируются; они рассматривается как пустая строка ("").

 

Зарезервированные слова DISTINCTROW и DISTINCT
Зарезервированные слова DISTINCTROW и DISTINCT в инструкции SELECT Jet SQL позволяют исключить из результирующего множества повторяющиеся строки. Разница между этими словами состоит в том, как при их использовании определяются повторяющиеся записи.
Если в инструкции SELECT используется слово DISTINCTROW, то для сравнения записей применяются все поля исходной таблицы, независимо от того, какие из этих полей включены в запрос.
Если в инструкцию SELECT входит слово DISTINCT, то для сравнения записей используются данные в строках результирующего множества запроса, т. е. только те поля, которые включены в запрос.
Замечание
Модификаторы могут использоваться не только в инструкции SELECT, но также и в запросах на добавление записей и на создание таблицы.
Для того чтобы понять, как влияет включение этих слов в запрос на его результат, построим запрос, который будет показывать, какие товары приобрел каждый клиент:

  1. Создайте новый запрос в базе данных "Борей". Для этого раскройте список запросов окна базы данных и нажмите кнопку Создать (New Query). В списке диалогового окна Новый запрос (New Query) выделите значение Конструктор (Design View) и нажмите кнопку ОК.
  2. Добавьте в запрос таблицы "Клиенты" (Customers), "Заказы" (Orders), "Заказано" (Orders Details) и "Товары" (Products). Access автоматически создает необходимые связи между таблицами.
  3. Перетащите поле "Название" (CompanyName) из списка полей таблицы "Клиенты" в первый столбец бланка запроса. Выделите ячейку Сортировка (Sort) и выберите значение По возрастанию (Ascending).
  4. Перетащите поле "Марка" (ProductName) из списка полей таблицы "Товары" (Products) во второй столбец бланка запроса. Задайте в этом столбце также сортировку по возрастанию.
  5. Нажмите на панели инструментов кнопку Запуск (Run) для выполнения запроса.

Вы должны получить результирующее множество, которое содержит 2169 записей. При этом те клиенты, которые не сделали ни одного заказа, в результирующее множество .не попадут, однако клиенты, которые заказывали один и тот же товар несколько раз, могут попасть в таблицу несколько раз. Теперь добавим в инструкцию SQI, SELECT слово DISTINCTROW для зтого:

  1. Выберите команду меню Вид, Режим SQL (View, SQL View) или щелкните по стрелке на кнопке Вид (View) на панели управления и выберите элемент Режим SQL (SQL View). Откроется диалоговое окно, в котором выведена инструкция SQL, соответствующая построенному запросу.
  2. Введите слово DISTINCTROW сразу после слова SELECT. Запрос должен выглядеть гак, как показано на.
  3. Нажмите кнопку Запуск (Run). Результирующее множество запроса будет включать 1695 записей.
  4. Снова выполните команду Вид, Режим SQL (View, SQL Mode) и замените в инструкции SQL СЛОВО DISTINCTRTOW СЛОВОМ DISTINCT.
  5. Нажмите кнопку Запуск (Run). Результирующее множество запроса содержит те же 1695 строк, что и при использовании ключевого слова DISTINCTROW.

В данном случае разницы между употреблением этих модификаторов нет (в других случаях может получиться иной результат). Однако при попытке редактировать данные в таблице вы убедитесь, что при использовании модификатора DISTINCT результирующий набор записей получается необновляемым, а модификатор DISTINCTROW допускает изменение данных в результирующем наборе.
Вместо того чтобы вносить эти модификаторы вручную в режиме SQL, можно просто установить соответствующие свойства запроса. Чтобы открыть диалоговое окно свойств запроса, щелкните правой кнопкой мыши по свободному полю в верхней панели окна Конструктора запроса и выберите из контекстного меню команду Свойства (Properties). Появляется диалоговое окно, представленное на .
Два свойства в этом окне определяют использование модификаторов DISTINCTROW и DISTINCT: Уникальные значения (Unique Values) и Уникальные записи (Unique Rows). Свойство Уникальные значения соответствует модификатору DISTINCT, a свойство Уникальные записи — модификатору DISTINCTROW. Если вы попробуете установить эти значения, то увидите, что Access не позволит установить значения Да (Yes) для обоих свойств. Если одно из них имеет значение Да (Yes), то для второго автоматически устанавливается значение Нет (No). Если оба свойства имеют значение Нет (No), запрос будет включать в результирующий набор все записи.
Замечание

Свойство Уникальные записи имеет смысл только для запроса, который строится по нескольким таблицам. Если запрос имеет только одну таблицу, значение этого свойства игнорируется.