Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
317 Кб
Скачать
☆

1.2.5. Запрос sql

Запрос SQL - это запрос, создаваемый при помощи инструкций SQL. Примерами запросов SQL могут служить запросы на объединение, запросы к серверу, перекрестные и подчиненные запросы. В лабораторной работе рассматривается запрос на объединение.

Этот тип запроса комбинирует поля (столбцы) из одной или нескольких таблиц или запросов в одно поле в результатах запроса. Например, если шесть поставщиков ежемесячно посылают новые списки оборудования, то с помощью запроса на объединение эти списки можно объединить в один. А затем результаты поместить в новую таблицу, созданную с помощью запроса на создание таблицы, основанного на запросе на объединение. Запросы на объединение позволяют вводить в одно поле таблицы данные из соответствующих полей двух или нескольких таблиц или запросов. При запуске запроса на объединение возвращаются записи из соответствующих полей всех включенных в запрос таблиц или запросов.

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

  1. В окне базы данных выберите вкладку Запросы и нажмите кнопку Создать.

  2. В диалоговом окне Новый запрос выберите в списке пункт Конструктор и нажмите кнопку OK.

  3. Не добавляя таблицы или запросы, нажмите кнопку Закрыть в диалоговом окне Добавление таблицы.

  4. В меню Запрос выберите команду Запрос SQL и подкоманду Объединение.

  5. Введите инструкции SQL SELECT, которые комбинируются с помощью операции UNION, если не требуется возвращать повторяющиеся записи, или с помощью операции UNION ALL для возвращения всех записей, в том числе и повторяющихся.

Например, в следующем запросе на объединение отбираются все названия организаций и городов из таблиц «Поставщики» и «Клиенты» и выполняется сортировка по названием городов:

SELECT Название, Город

FROM Поставщики

UNION SELECT Название, Город

FROM Клиенты

ORDER BY Город;

Примечание. Все инструкции SELECT должны возвращать одинаковое число полей в том же порядке. Соответствующие поля должны иметь совместимые типы данных, с одним исключением: допускается объединение в одном поле значений полей типа «Числовой» и «Текстовый».

  1. Для выполнения сортировки в запросе на объединение добавьте вслед за последней инструкцией SELECT предложение ORDER BY. В предложении ORDER BY укажите поле, по которому проводится сортировка; это поле должно быть указано в первой инструкции SELECT.

  2. Для просмотра результатов запроса нажмите кнопку Вид на панели инструментов.

2. Оптимизация запросов

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

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

  • Индексируйте все поля, используемые для определения условий отбора в запросе, а также поля на обеих сторонах объединения или создайте связь между этими полями. При создании связей ядро базы данных Microsoft Jet создает индекс внешнего ключа, если он еще не создан; в противном случае, используется существующий индекс.

  • При описании полей таблицы выбирайте типы данных минимального размера, достаточные для содержащихся в поле данных. Кроме того, для полей, участвующих в объединении, следует выбирать одинаковые или совместимые типы данных, такие как тип «Счетчик» и числовой тип (если для свойства Размер поля (FieldSize) задано значение Длинное целое).

  • При создании запроса не добавляйте лишние поля в запрос. Снимите флажок Вывод на экран для полей, используемых в условиях отбора, если не предполагается вывод в запросе содержимого этих полей.

  • Если в качестве значения для свойства Источник записей (RecordSource) формы или отчета задана инструкция SQL, то следует сохранить ее как запрос, а затем указать в качестве источника записей имя запроса.

  • Старайтесь не использовать вычисляемые поля в подчиненных запросах. Необходимость расчета выражения при добавлении запроса с вычисляемыми полями в другой запрос замедляет выполнение запроса верхнего уровня. Если в результатах запроса необходимо присутствие выражений, то следует поместить их в элементе управления в форме или отчете.

  • При группировке записей по значениям полей, участвующих в объединении, определяйте условие группировки в ячейке Групповая операция для поля в той же таблице, в которой находится поле, для которого выполняются расчеты статистических функций. Например, если рассчитывается итоговое значение поля «Количество» в таблице «Заказано», а записи группируются по полю «КодЗаказа», то условие группировки следует определить для поля «КодЗаказа» в таблице «Заказано», а не для поля «КодЗаказа» в таблице «Заказы». Если условие группировки определить для поля «КодЗаказа» в таблице «Заказы», то сначала будут объединены все записи, а потом выполнен расчет статистических функций, вместо того, чтобы сделать наоборот, сначала проведя расчет, а потом объединив только необходимые поля.

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

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

  • Индексируйте поля, используемые для сортировки.

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

  • Старайтесь не использовать статистические функции по подмножеству, например функцию Dlookup, в запросе, в котором производится обращение к табличным данным. Статистические функции по подмножеству довольно специфичны для Microsoft Access, поэтому ядро базы данных Microsoft Jet не может оптимизировать использующие их запросы. Вместо этого добавляйте таблицу в запрос или создавайте подчиненный запрос.

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

  • Применяйте операторы Between...And, In и = к индексированным полям.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]