Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7926
Скачиваний: 25

Далее мы будем обращаться к той же базе данных, которая использо-
валась нами на прошлом занятии. Предполагается, что база содержит две
таблицы. Первая носит название 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

о
Т
В конструкции 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

дите на вкладку Таблицы и запросы (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

Предложение 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

таблицы 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