|
Программирование >> Проектирование интерфейса пользователя
SELECT * FROM Music LEFT JOIN Tracks On Music.Id = Tracks.Music Id В результате выполнения указанного запроса будут возвращены все записи таблицы MUSIC - даже те, для которых в таблице TRACKS нет соответствий. В последнем случае поля результата, относящиеся к таблице TRACKS, окажутся пустыми. Оператор RIGHT JOIN Конструкция RIGHT JOIN прямо противоположна по назначению оператору LEFT JOIN, рассмотренному выше. При использовании RIGHT JOIN возвращенный набор данных будет содержать все записи правой таблицы и только те строки левой, для которых в правой таблице имеются соответствия. Например: SELECT FROM Music RIGHT JOIN Tracks On Music.Id = Tracks.Music Id Результат выполнения запроса будет содержать все записи таблицы TRACKS, включая те, для которых отсутствуют ключевые значения в таблице MUSIC. Объединение запросов Два запроса SQL, возвращающие одинаковое число полей совместимых типов, разрешается объединять с помощью служебного слова UNION. Запросы не зависят от соседних, но выполняются вместе, как одна команда SQL, давая в результате единый набор данных. По умолчанию оператор UNION устраняет из возвращенного множества данных повторяющиеся строки. Чтобы в результат включались все записи, после оператора UNION необходимо добавить служебное слово ALL. Никто не запрещает вам использовать конструкции UNION, действующие как единственное выражение SELECT с оператором OR, хотя это не самый удачный выбор. Лучший вариант применения связан с необходимостью сочетания в одном возвращенном наборе данных, близких по природе, но расположенных в разных таблицах. Приведенный ниже пример возвращает значения столбца ID из таблиц MUSIC и TRACKS. SELECT Id FROM Music UNION SELECT Id FROM Tracks В результате будут получены все значения столбцов ID таблиц MUSIC и TRACKS. Конечно, этот пример нельзя назвать полезным с практической точки зрения - он просто демонстрирует технику работы. Но если предположить, что у вашего друга есть собственная фонотека (и своя таблица Access такой же структуры MUSIC) и вы хотели бы составить общий каталог записей, тогда UNION - как раз то, что нужно. Переименование столбцов результата Встречаются ситуации, когда бывает полезным объединить данные двух или более столбцов результата выборки в один столбец. Более детально рассмотрим столбец ARTIST таблицы MUSIC. Если необходимо отсортировать записи по фамилии исполнителя, без дополнительного кода сделать это будет довольно трудно. Невольно напрашивается вывод о необходимости разбиения столбца ARTIST на два - скажем, FIRST NAME и LAST NAME. Действительно, это достаточно гибкое решение. Но возникают удастся ли в дальнейшем получать такие же результаты (т.е. с корректно отформатированным полным именем исполнителя), как и прежде. Проблема решается с помощью средств переименования столбцов результата запроса. SQL позволяет объединять данные нескольких столбцов в один и присваивать ему новое имя посредством оператора AS. Предположим, что мы все-таки расчленили столбец ARTIST на два NAME NAME, предназначенных для хранения имен и фамилий. Тогда выражение запроса, возвращающего полные имена исполнителей, могло бы выглядеть так: SELECT First Name + + Last Name AS Artist FROM Music ORDER BY Last Name В новой редакции таблиц Ш31С уже нет столбца с именем 13Т - вместо него созданы столбцы FIRST NAME и LAST NAME. Приведенный выше запрос склеивает значения имен и фамилий в единое целое под привычным именем -ARTIST. Поскольку фамилии и имена хранятся отдельно, стало возможным использовать предложение ORDER BY Last Name. Оператор AS особо пригодится в тех случаях, когда результат отбора содержит вычисляемые значения или неудачно названные столбцы таблиц. Разбиение столбца ARTIST на две составляющие - пример, полезный сам по себе. В этом случае вы получаете более гибкие возможности упорядочения и поиска данных. Добавление записей Команда INSERT INTO позволяет добавлять записи в таблицу базы данных и допускает несколько способов применения. Все они рассмотрены ниже. Добавление данных в указанные поля Наиболее употребительный вариант использования команды INSERT INTO предусматривает добавление записи в существующую таблицу с указанием списка полей. Ниже приведена синтаксическая формула подобного выражения: INSERT INTO ИмяТаблицы (ИмяПоля! [, ИмяПоля2, ...]) VALUES (Значение! [, Значение2, ...]) В верхнем регистре набраны служебные слова SQL. После фразы INSERT INTO указывается имя таблицы, за которым следует список наименований полей, заключенный в круглые скобки. Список может содержать только те поля, в которые вы хотите занести значения (если поле помечено признаком обязательного заполнения, его имя должно присутствовать в списке. - Прим ев.). Количество значений, перечисленных в круглых скобках после служебного слова VALUES, и их типы должны соответствовать содержимому списка полей. Следующий пример иллюстрирует процедуру пополнения реестра музыкальной коллекции, рассматриваемой ранее, данными о новом приобретении - очередном компакт-диске Джонни Кэша (Johnny Cash). INSERT INTO Music (First Name, Last Name, Title, Eormat, Publisher) VALUES (Johnny, Cash, JOHNNY CASH AT FOLSOM PRISON AND SAN QUENTIN, CD, Columbia) После выполнения этой команды в таблицу MUSIC будет добавлена запись со следующими значениями поле11: EIRSTNAME = Johnny, LAST NAME = Cash,TITLE = JOHNNY CASH AT FOLSOM PRISON AND SAN QUENTIN, FORMAT = CD, PUBLISHER = Обратите внимание на то, что не указано имя поля пер- вичного ключа ID и соответствующего ему значения, поскольку это поле снабжено признаком автоматического заполнения Добавление полной строки данных Еще один распространенный вариант команды INSERT предполагает задание полного списка значений полей новой записи. Порядок перечисления значений должен соответствовать перечню полей таблицы, используемому при ее создании командой CREATE TABLE. Синтаксическая формула в этом случае становится более краткой ввиду отсутствия списка наименований полей. INSERT INTO ИмяТаблицы VALUES (Значение! [, Значение2, ...]) Порядок следования значений, указанных после служебного слова VALUES, и их типы должны соответствовать структуре таблицы. В качестве символического обозначения величины, заносимой в поле AutoNumber, используется литерал 0; Access самостоятельно позаботится о том, чтобы вычислить и сохранить в поле AutoNumber нужное значение. Например: INSERT INTO Music VALUES (О, Jewel, Kilcher, PIECES OF you, CD, Atlantic) Я всегда записываю текст SQL именно так, разбивая длинные команды на отдельные строки, соответствующие основным предложениям. Так, заголовок команды INSERT INTO удобно расположить в одной строке, предложение values - в следующей и т.д. Фраза INSERT INTO Music означает, что данные будут добавлены в таблицу MUSIC. После имени таблицы список полей не приводится - вместо него сразу следуют слово VALUES и полный список значений. Вызо шанды Insert с параметрами Версия SQL, которая реализуется в Access, допускает формат команды INSERT, содержащий параметры и предполагающий динамический интерактивный ввод их значений. Параметры размещаются в списке VALUES и обозначаются именами, заключенными в квадратные скобки. Возможность задания параметров поддерживается в обоих рассмотренных выше вариантах INSERT - со списком полей и без такового. Единственной синтаксической особенностью параметрической версии INSERT является наличие аргументов, взятых в квадратные скобки. Приведенные ниже примеры демонстрируют использование параметров в обоих вариантах INSERT - с заданием полной строки данных (листинг 16.4) и указанием списка имен полей (листинг 16.5). Листинг 16.4. Пример параметрической команды INSERT с заданием полной строки данных INSERT INTO Music VALUES (0, [Имя], [Фамилия] [Название], [Формат], [Компания] Листинг 16.5. Пример параметрической команды INSERT с указанием списка имен полей INSERT INTO Ivlusic (First Name, Last Name, Title, Format, Publisher) VALUES ([Имя], [Фамилия], [Название], [Формат], [Компания]) Анализ Команда INSERT листинга 16.4 содержит пять параметров. При ее выполнении система последовательно откроет пять диалоговых окон с за-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |