Смекни!
smekni.com

Національний технічний університет „Харківський Політехнічний інститут”

Факультет „Компьютерні та інформаційні технології”

Кафедра „Обчислювальна техніка та програмування”

Реферат

З курсу „Організація баз даних”

Тема: можливості SQL-запитів у MicrosoftAccess

Виконав: ст. гр. xxxxxxxxxxxxxxxxx.

Перевірив: xxxxx

Харків

2006


Содержание:

1. Введение 3
2. Запросы на выборку 4
4
5
6
8
11
3. Запросы на добавление 11
4. Запросы на обновление 12
5. Запросы на удаление 13
6. Параметрические запросы 14
7. Управляющие запросы ядра MicrosoftJet 14
8. Формирование и выполнение запросов в реальном времени (инструментарий VisualBasicForApplications) 17
9. Выводы 20
10. Список использованной литературы 21

1. Введение

Как известно, в основном системы управления реляционными базами данных (СУРБД) делатся на два класса – серверные и пользовательские. MicrosoftAccess, являющаяся предметом рассмотрения данного реферата, принадлежит ко второму классу систем, т.к. из-за непроработанной системы совместного доступа к данным не может выступать в роли полноценной серверной СУРБД (хотя соответствующие драйверы ODBC существуют и работают). Также в пользу того, что Access принадлежит к пользовательским системам, говорит факт интегрированности хранилища данных (таблиц) и средств создания пользовательского интерфейса (хранимые запросы, формы, отчеты, программы)

Однако по другим своим возможностям, в частности, по возможностям выполнения сложных запросов SQL, Access намного превосходит другие программные продукты своего класса. К тому же, легкость объединения с другим ПО, поставляемым в комплекте OfficeProfessional – SQLServerDesktopEngine – делает Access вообще недосягаемой для конкурентов системой.

Данный реферат посвящен проблематике, неизбежно возникающей при проектировании БД – проектировании системы поиска и модификации существующих данных. Показано, как выполнять эти операции, используя для этого один лишь встроенный интерпретатор языка SQL – такой путь является наиболее универсальным, и, по прошествию некоторого времени – самым легким способом организовать любое требуемое представление имеющихся данных.


2. Запросы на выборку

Данный тип запросов является одним из наиболее часто применяемых не только в MSAccess, но и вообще во всех СУРБД.

Основные задачи таких запросов таковы:

а. Выбрать некоторые поля из таблицы

б. Отфильтровать содержимое таблицы по некоторым критериям

в. Объединить несколько разнородных таблиц, используя связи типа «один-к-одному», «один-ко-многим»

г. Сформировать из нескольких однородных таблиц один источник записей.

д. Сгруппировать данные таблицы и/или вычислить некоторые характеристики этих данных.

2.1. Особенности использования инструкций SELECT

Запросы на выборку всегда начинаются с предложения SQLSELECT (список полей) FROM (список таблиц), например:

SLECT Название, Город FROM заказчики

Однако даже такая конструкция имеет разветвления:

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

- SELECTDISTINCTROW – то же самое, что и DISTINCT, но для определения уникальности используются

- SELECTTOP [число или количество процентов]

В SQL-запросах можно объединять несколько таблиц, даже если они содержат разное количество записей (хотя, как правило, такое объединение будет бессмысленым). Для выбора всех полей из таблицы применяется символ *.

Примеры простейших SQL-запросов:

SELECT * From Заказчики – выбирает все записи и поля за таблицы «Заказчики».

SELECTDISTINCTГород FROM Заказчики – выбирает по 1 разу каждый город, в котором находится один или более заказчик.

SELECTTOP 10 PERCENT * FROM Заказчики – выбирает первые 10% записей в таблице.

Если же в запросе присутствует несколько таблиц, то в части FROM их необходимо перечислить через запятую. Если из таблиц в таком запросе выбираются не все поля, то выбираемые нужно вводить в формате [Имя_таблицы].[Имя_поля], например:

SELECT Table1.Field1, Table2.Field1 FROM Table1, Table2;

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

2.2. Использование критериев отбора

Допустим, у нас есть таблица «Заказчики» со следующими полями:

№п/п Название Город Адрес К_во_заказов

Если необходимо выбрать из нее не все записи, а только те, которые удовлетворяют некоторым условиям. Например, только тех из них, которые размещены в Харькове. Для этого используется инструкция WHERE. Условий может быть несколько, тогда они объединяются логическими операциями И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR). Для инвертирования части или всего условия (т.е. отбора тех записей, которые данному условию не удовлетворяют) используется операция NOT.

Общий синтаксис простого запроса с условием таков:

SELECT Список_полей FROM Список_Таблиц

WHERE (условие1) лог_оп (условие2) лог_оп (условие3);

Пример:

SELECT * FROM Заказчики WHERE (Город=’Харьков’);

SELECT * FROM Заказчики WHERE (Город=’Харьков’) AND (К_во_заказов > 5);

2.3. Объединение нескольких источников данных

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

Допустим, к нашей базе данных присоединена внешняя таблица «Реестр», в которой хранятся сведения обо всех субъектах предпринимательской деятельности в Украине. А нам надо просмотреть все сведения только о наших заказчиках. Опять-таки, всех. Для таких случаях существует инструкция JOIN – объединение таблиц по одному полю. Различают внутренние (INNER) и внешние (LEFT, RIGHT) объединения. Мы рассмотрим лишь внутренние – это наиболее жизненная ситуация.

Общий вид объединения таков:

SELECT (список_полей_главной_таблицы) FROM (Главная_таблица) <Вид_объединения> JOIN(Подчиненная_таблица) ON (Главная.Поле1 = Подчиненная.Поле1)

Итак, таблица «Реестр» имеет следующую структуру:

Название Код_ЕДРПОУ Расч_счет ИНН

Теперь присоединим ее к таблице «Заказчики»:

SELECT * FROM Заказчики INNERJOIN Реестр ON (Заказчики.Название = Реестр.Название)

В результате мы будем иметь источник записей с количеством записей, равным размеру таблицы «Заказчики», и содержащий все поля таблиц «Заказчики» и «Реестр». Так же, как и в конструкции WHERE, объединение может быть по нескольким полям, с использованием различных условий, однако следует иметь в виду, что использование нестандартных (неподдерживаемых конструктором запросов) действий может привести к непредсказуемым результатам.

Во избежание непонимания стоит заметить, что использование одной конструкции SQL практически никогда не налагает запрет на использование другой. Т.е. запрос типа

SELECT * FROM Заказчики INNERJOIN Реестр ON (Заказчики.Название = Реестр.Название)

WHERE (Город=’Харьков’) AND (К_во_заказов > 5);

будет воспринят MSAccess вполне нормально.

Возможна и другая ситуация.

Допустим, у нас есть таблица «Сотрудники_офиса» следующей структуры:

Таб_номер ФИО Телефон

Также есть таблица «Сотрудники_филиала» с точно такой же структурой. Необходимо в каком-нибудь итоговом отчете представить эти таблицы вместе. Для этого используется конструкция UNION. При ее использовании можно склеить сколько угодно таблиц. Точнее, таблицы необязательно должны иметь одинаковую структуру. Необходимо лишь, чтобы из всех таблиц выбиралось одинаковое количество полей, и чтобы эти поля были полностью эквивалентны.

Общая структура такого запроса такова:

SELECT Таблица1.Поле1, Таблица1.ПолеNFROM Таблица1

UNIONSELECT Таблица2.Поле1, Таблица2.ПолеNFROM Таблица2

UNIONSELECT ТаблицаK.Поле1,ТаблицаK.ПолеNFROM ТаблицаK;

В нашем случае это будет выглядеть так:

SELECT Сотрудники_офиса.* FROM Сотрудники_офиса

UNIONSELECT Сотрудники_филиала.*FROM Сотрудники_филиала

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

Иногда бывает необходимо объединить несколько таблиц (более 2) с помощью операции JOIN. Сделать это в рамках одного запроса весьма проблематично, однако не следует забывать, что MSAccess в состоянии использовать запросы как источник записей. Т.е. объедините две таблицы в одном запросе, а затем обхедините третью таблицу и запрос во втором.

2.4. Групповые операции и вычисляемые поля

Допустим, есть у нас таблица «Постоянные_клиенты». И нам, в зависимости от количества покупок надо дать им скидки – например, те, кто сделал более 5 покупок, получает скидку 6%. Исходная таблица имеет такой вид:

Номер ФИО Покупки

Чтобы выполнять подобные операции, не прибегая к искусству программирования, в запросах MicrosoftJet (именно так называется ядро баз данных Access) реализована возможность реализации вычисляемых полей.

Объявляются эти поля точно так же, как и обычные, в конструкции SELECT:

SELECT(список_обычных_полей), (операция_с_полями_или_ числа-ми) AS вычисляемое_поле FROM (список_таблиц);