Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7926

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Далее мы будем обращаться к той же базе данных, которая использо-

валась нами на прошлом занятии. Предполагается, что база содержит две
таблицы. Первая носит название MUSIC, состоит из следующих полей: ID

 ARTIST Text(50), TITLE

 FORMAT Text(50),

PUBLISHER Text(50) — и предназначена для хранения сведений о

музыкальных альбомах. Структура второй таблицы, TRACKS, содержащей
информацию об отдельных композициях альбомов, описывается таким
перечнем полей: ID AutoNumber,

 Number,

Text(50) и TRACK_LENGTH

Например, чтобы получить полное содержимое таблицы MUSIC (т.е. все ее записи

со всеми полями), достаточно выполнить команду

SELECT

 FROM Music

Чтобы протестировать указанную команду, вы должны предварительно создать

таблицу с перечисленными выше полями и заполнить ее информацией о любимых
звукозаписях. Затем выполните следующие действия.

 Откройте базу данных, содержащую таблицу

2. В окне базы данных выберите элемент Запросы (Queries) списка Объекты (Objects).
3. Щелкните на кнопке Создать (New) панели инструментов.
4. В диалоговом окне Новый запрос (New Query) выберите режим Конструктор (Design

View) и щелкните на кнопке ОК.

5. Откроется диалоговое окно Добавление таблицы (Show Table). Щелкните на кнопке

Закрыть (Close). На экране останется

 окно Запрос на выборку (Query De-

signer) .

6. Выберите в строке меню главного окна Access команду

 SQL

SQL View).

7. Введите текст команды

 SELECT * FROM Music.

8. Чтобы выполнить команду SQL, выберите в строке меню

Run).

Далее в ходе этого занятия вы сможете, если не будет дополнительных указаний,

использовать данную инструкцию для тестирования всех примеров кода на языке

SQL. В некоторых случаях будут демонстрироваться и другие способы создания SQL-
кода, не требующие ввода текста в окне базы данных.

Не забывайте почаще сохранять результаты своей работы.

Работая над текстом запроса, можно сохранить его в любой момент — достаточно

выбрать команду меню

 (или

 как

Save As), если операция выполняется впервые).

Фильтрация данных с помощью предложения
WHERE

Предложение WHERE команды SELECT используется в тех случаях, когда необходи-

мо ограничить множество записей, возвращаемых запросом. Предложение WHERE, по-
мимо выражения SELECT, употребляется и в других конструкциях SQL. Сведения, ко-
торые приведены в этом разделе, в равной степени применимы к командам SELECT,
UPDATE И DELETE.

16-й час. Применение языка SQL 275


background image

о

Т

В конструкции SELECT предложение WHERE занимает место после FROM.

Синтаксис WHERE в контексте выражения SELECT таков:

SELECT

FROM
WHERE

 Оператор Значение [OR

ратор Значение

AND ИмяПоля One-

Предложение WHERE располагается после предложения FROM. За служебным словом

WHERE следует набор предикатов в формате ИмяПоля Оператор Значение. Количест-

во предикатов (выражений сравнения) не ограничено. В качестве аргумента Оператор

используется любой из обычных операторов сравнения. ИмяПоля — это наименование

одного из полей таблиц, имеющих отношение к запросу, а Значение — величина со-

ответствующего типа (символьные литералы заключаются в одинарные кавычки).

Предикату может предшествовать служебное слово NOT, обозначающее унарный

оператор отрицания. Предикаты "склеиваются" посредством логических операторов

конъюнкции (AND) и дизъюнкции (OR) (реже — других). Листинг 16.1 содержит не-

сколько примеров запросов, каждый из которых легко протестировать в окне Запрос

на выборку. Все они предназначены для получения данных из таблицы MUSIC.

Листинг

 Примеры использования команды SELECT

SELECT

 FROM Music

SELECT * FROM Music WHERE Artist =
SELECT * FROM Music WHERE Publisher = 'Elektra' AND

Artist

 <>

SELECT * FROM Music WHERE Artist LIKE
SELECT * FROM Music WHERE Artist

 <>

 AND

Artist LIKE

SELECT * FROM Music WHERE NOT (Artist LIKE

Анализ

Каждая строка листинга

 — это отдельный запрос. Строка 1 возвратит

все записи таблицы

 Запрос строки 2 предполагает отбор только тех

записей, которые имеют отношение к Элвису Пресли (Elvis Presley). В

строке 3 выполняется поиск строк данных о музыкальных альбомах

(выпущенных звукозаписывающей компанией Elektra) всех исполнителей,

кроме Натали

 (Natalie Merchant). Строка 5 содержит пример опе-

рации поиска по маске. Символ звездочки (*) в тексте искомого аргумента

обозначает любую последовательность символов (в том числе и нулевой

длины). Так, запрос строки 4 возвратит информацию о звукозаписях всех

исполнительниц по имени Natalie (может быть, даже Наташи Королевой).

Следующая команда предполагает поиск записей всех Элвисов, кроме зна-

менитого Элвиса Пресли (вероятно, собранный урожай сведений окажется

не слишком богатым, если только вы не ярый поклонник Элвиса

(Elvis Costello)). Наконец, запрос последней, 6-й, строки возвратит все за-

писи таблицы MUSIC, кроме тех, в которых упоминается любая из Natalie.

 применяемые в предложении

WHERE

SQL — довольно выразительный язык программирования. Реализация SQL, под-

держиваемая Access 2002, совместима со стандартом ANSI-89. Чтобы изменить версию

 на ANSI-92, выберите команду

 перей-

276

Часть V. Программирование и базы данных Access


background image

дите на вкладку Таблицы и запросы (Tables/Queries) и установите флажок Текущая
база данных (This Database). Чтобы реализация SQL была совместима с ANSI-92 по
умолчанию, на вкладке Другие (Advanced) диалогового окна

 Параметры из

списка Формат файла по умолчанию (Default File Format) выберите Access 2002. Выбе-
рите данную опцию, если планируете преобразовать базу данных в формат SQL-
сервер. При необходимости всю информацию, которая касается стандартов SQL, раз-
работанных ANSI, вы сможете найти по адресу http:  / / w w w .

 org.

В пределах предложения WHERE, помимо привычных логических операторов и опе-

раторов сравнения, допускается использование также других конструкций, обозначае-
мых служебными словами BETWEEN и IN. Оператор BETWEEN позволяет задать верх-

нюю и нижнюю границы диапазона изменения Значений поля, а оператор IN дает
возможность указать список искомых значений.

Оператор BETWEEN

Оператор BETWEEN, сопровождаемый служебным словом AND, используется в контек-

сте предложения WHERE для задания границ интервала изменения величины аргумента
(граничные значения включаются в интервал). Листинг 16.2 содержит короткий пример.

Листинг 16.2. Пример использования оператора BETWEEN

SELECT

 FROM Music

WHERE Artist BETWEEN

 AND

 Stones'

Единственная команда SELECT возвратит набор данных, содержащих сведе-

ния об альбомах исполнителей, имена которых — в алфавитном порядке —
попадают в интервал, простирающийся от Elvis Presley до Rolling Stones.

Оператор IN

Оператор IN позволяет задать набор искомых значений поля таблицы.
Синтаксис конструкции IN в контексте команды SELECT описывается
следующей формулой:

SELECT СписокПолей

FROM

WHERE

 IN

 Значение2,  . . . )

Легко привести пример использования оператора IN в команде поиска данных в

таблице

SELECT

 FROM Music WHERE Publisher IN

 'Elektra',

Анализ

Указанная команда SELECT вернет все строки данных, которые имеют

| отношение к звукозаписям, выпущенным компаниями Polygram, Elektra

и Capitol.

Логические операторы

Логические операторы конъюнкции (AND), дизъюнкции (OR) и отрицания (NOT)

действуют в SQL точно так же, как и в VBA. Операторы AND и OR бинарны, т.е. тре-

буют наличия двух операндов, a NOT — унарный оператор, воздействующий на един-
ственный аргумент. Примеры использования операторов AND и NOT приведены в лис-
тинге

16-й час. Применение языка SQL

277


background image

Предложение WHERE может содержать любое число предикатов, соединенных логи-

ческими операторами и сгруппированных с помощью круглых скобок. Операторы
SQL (что естественно) обладают определенным приоритетом выполнения. Однако за-
помнить значения приоритетов достаточно сложно. Изучите выражения SQL, приве-

денные ниже.

SELECT * FROM Music

WHERE Publisher =

 AND

 =

OR

 =

SELECT * FROM Music

WHERE Publisher =

 AND

 =

 OR_

Last Name =

В булевой логике оператор AND аналогичен умножению, a OR —
сложению. Поэтому приоритеты выполнения операторов таковы: первым
вычисляется AND, затем OR (если, конечно, не расставить скобки).

Оба выражения содержат почти одинаковый текст, но возвращают со-
вершенно разные результаты. В первом случае вначале вычисляется ло-
гическое выражение AND, соединяющее два предиката (Publisher =

 AND

 =

 а

 оператор OR. По-

этому будут найдены записи первого артиста (Joe Cocker) в издательстве

Capitol и записи Natalie Merchant во всех издательствах. Второй оператор
сначала выполняет действие в скобках, поэтому будут найдены записи

обоих артистов в одном издательстве — Capitol.

Намереваясь использовать в предложении WHERE несколько предикатов,

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

Предложение

 и вложенные команды

SELECT

В качестве аргумента Значение предложения WHERE может выступать как значение

простого типа (иллюстрируемое выше), так и результат выполнения вложенной ко-
манды SELECT. Подобно другим языкам программирования (например, VBA), SQL в
каждой конкретной

 имеет собственный синтаксический анализатор, спо-

собный разобрать написанный вами код буквально по "косточкам".

Вложенная команда SELECT может быть настолько же сложной, как и любая дру-

гая. Первой всегда выполняется наиболее глубоко "спрятанная" команда SELECT. Хо-

тя с формальной точки зрения вы вольны конструировать выражения любой степени

сложности, однако, выходя за "разумные" рамки одного уровня вложенности, вы об-
рекаете сервер базы данных на серьезные испытания.

Вложенная конструкция SELECT выступает в роли правого операнда предиката в

предложении WHERE. Приведем соответствующий пример:

SELECT

 FROM Music

WHERE Title IN

(SELECT

 FROM Tracks)

Чтобы понять смысл этого запроса, рассмотрение нужно начать с внутренней ко-

манды SELECT, которая предполагает выбор значений поля TRACK_TITLE всех записей

таблицы TRACKS. Внешний запрос подразумевает возврат всех полей таких записей

278

Часть V. Программирование и базы данных Access


background image

таблицы MUSIC, в поле TITLE которых содержится любое из значений, полученных в
результате выполнения вложенного запроса.

Необходимо высказать одно предостережение. Легко упустить из виду, что на са-

мом деле смысл данных столбца

 таблицы TRACKS не отвечает назначе-

нию столбца TITLE таблицы MUSIC, т.е., образно говоря, предпринимается попытка
сопоставить "шило" с "мылом". Выражение, корректное синтаксически, далеко не

всегда верно с логической точки зрения.

Исправим оплошность, построив более простое выражение, в котором значение

поля первичного ключа

 таблицы MUSIC сравнивается с величиной, хранящейся в

поле внешнего ключа MUSIC_ID таблицы TRACKS. В этом случае команда SQL примет
следующий вид:
SELECT

 FROM Music, Tracks

WHERE

 =

 AND

 LIKE_

 Title)

Новый термин

Первичный ключ

 (Primary Key) — это один или несколько столбцов табли-

цы, значения которых однозначно определяют уникальную запись табли-
цы. Первичный ключ одновременно служит и главным индексом таблицы.

Внешний ключ

 (Foreign Key) устанавливает правило, в соответствии с ко-

торым в качестве значений одного или нескольких полей одной таблицы
могут использоваться только такие комбинации величин, которые суще-

ствуют в первичном ключе другой таблицы.

Понятия первичного и внешнего ключей служат (извините за каламбур)

 к осмыслению основ теории реляционных баз данных.

Более подробную информацию о вложенных запросах вы сможете
получить, адресовав Помощнику Microsoft Office словосочетание поиска

Подчиненные запросы.

Если две или несколько таблиц в рамках предложения WHERE связаны операторами

сравнения однородных полей, принято говорить об их

 неявном объединении

 (implicit

join). Механизмы объединения таблиц более подробно рассмотрены ниже, в одно-

именном разделе этой главы.

Мы отнюдь не утверждаем, что вложенные запросы заведомо неэффективны и

вредоносны. Подчас они могут оказаться как раз тем инструментом, который необхо-

дим и целесообразен. Однако знайте, что подчиненные запросы — это не то средство,

к которому можно обращаться без особой нужды.

Сортировка данных

Конструкция выражения SELECT позволяет упорядочить возвращаемые наборы

данных по убыванию или возрастанию значений полей. Этой цели служит предложе-

ние ORDER BY, после которого указываются одно или несколько выражений вида

 разделенных символом запятой. Аргументы

ля указывают на поля таблиц, перечисленных в предложении FROM, а в качестве не-
обязательного параметра ПорядокСортировки допустимо использовать одно из слу-
жебных слов — ASC или DESC. ASC означает, что записи будут упорядочены по воз-
растанию величин, хранящихся в указанном поле, a DESC предполагает обратный по-
рядок сортировки — по убыванию значений поля. В результате выполнения

следующего запроса набор данных будет отсортирован в порядке убывания значений
поля ARTIST таблицы MUSIC, а записи с совпадающими значениями в поле ARTIST —
по возрастанию содержимого поля TITLE.

16-й час. Применение языка SQL 279