Kav-soft.ru

ПК Софт
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Sql ms access

Использование языка SQL в MS Access

Язык SQL не обладает функциями полноценного языка разработки, а ориентирован на доступ к данным, поэтому его включают в состав средств разработки программ. В этом случае его называют встроенным SQL. Стандарт языка SQL поддерживают современные реализации следующих языков программирования: PL/1, Ada, С, COBOL, Fortran, MUMPS и Pascal.

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

Различают два основных метода использования встроенного SQL: статический и динамический.

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

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

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

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

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

Описание и использование курсора в языке SQL выполняется следующим образом. В описательной части программы выполняют связывание переменной типа курсор (CURSOR) с оператором SQL (обычно с оператором SELECT). В выполняемой части программы производится открытие курсора (OPEN . ), сопровождаемое соответствующей обработкой, и, наконец, закрытие курсора (CLOSE ).

В реляционных СУБД для выполнения операций над отношениями используются две группы языков, имеющие в качестве своей математической основы теоретические языки запросов, предложенные Э. Коддом:

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

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

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

Особенности применения запросов SQL

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

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

Запрос к серверу выполняет передачу через ODBC команд SQL – серверу, например, Microsoft SQL Server. Запросы к серверу позволяют непосредственно работать с таблицами на сервере вместо их присоединения. Результатом выполнения запроса к серверу может быть загрузка записей или изменение данных.

Управляющий запрос создает или изменяет объекты базы данных, такие как таблицы Access или SQL Server.

Подчиненный запрос состоит из инструкции SQL SELECT, находящейся внутри другого запроса на выборку или запроса на изменение. Эти инструкции вводятся в строку «Поле» бланка запроса для определения нового поля или в строку «Условие отбора» для определения условия отбора поля. Подчиненные запросы используются для выполнения следующих действий:

— проверка в подчиненном запросе существования некоторых результатов с помощью зарезервированных слов EXISTS или NO EXISTS;

— поиск в главном запросе любых значений, которые равны, больше или меньше значений, возвращаемых в подчиненном запросе (с помощью зарезервированных слов ANY, IN или ALL);

— создание подчиненных запросов внутри подчиненных запросов (вложенных подчиненных запросов).

Язык SQL в Access может применяться при разработке экранных форм, отчетов, а также при создании макрокоманд и программ на VBA.

Связь языков QBE и SQL

В Access между языками QBE и SQL имеется тесная связь. Запросные таблицы (бланки, формы) на языке QBE, заполняемые пользователем, перед непосредственным выполнением преобразуются в выражения SQL. То есть язык SQL является внутренним стандартом на выполнение запросов. Такой механизм имеет преимущество, поскольку позволяет внутри системы Access унифицировать подготовку запросов к выполнению на локальном и удаленном компьютерах. В последнем случае SQL – сообщение реально передается к компьютеру – серверу запроса.

В Access запрос может находиться в одном из трех режимов (состояний): Конструктора, SQL и таблицы. Режим конструктора применяют для разработки нового запроса с чистого листа (без использования Мастеров или других средств) или для изменения макета существующего запроса. Режим SQL применяют для ввода или просмотра инструкций SQL. Режим таблицы применяют для работы с результатами выполнения запроса.

SQL в формах и отчетах

Основными источниками записей в экранных формах и отчетах являются таблицы и запросы. Во втором случае запросом может быть готовый запрос к БД или создаваемый при разработке формы или отчета.

SQL в макрокомандах

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

Макросы вызываются из окна БД или автоматически при наступлении определенных событий. Событием, по которому вызывается макрос, может быть, например, нажатие кнопки в области формы или открытие окна БД. Наряду с выполнение некоторых действий над объектами БД макросы могут вызывать другие макросы, программы на Visual Basic и внешние приложения.

Из множества макрокоманд с SQL непосредственно связаны две макрокоманды: ЗапускЗапроса SQL (Run SQL) и ОткрытьЗапрос (OpenQuery)

Макрокоманда ЗапускЗапроса SQL запускает запрос на изменение или управляющий запрос Access с помощью соответствующей инструкции SQL. Эта макрокоманда делает возможным выполнение действий в макросе без предварительного сохранения запросов. С помощью макрокоманды можно выполнять и сохраненные запросы.

Читайте так же:
Access vba циклы

Запросами на изменение являются инструкции SQL, реализующие следующие функции: добавление (INSERT INTO), удаление (DELETE), создание таблицы (SELECT…INTO) и обновление (UPDATE)

Управляющими запросами являются инструкции SQL, выполняющие следующие функции: создание таблицы (CREATE TABLE), изменение таблицы (ALTER TABLE), удаление таблицы (DROP TABLE), создание индекса (CREATE INDEX) и удаление индекса (DROP INDEX)

Единственным и обязательным аргументом макрокоманды ЗапускЗапроса SQL является инструкция SQL. Аргумент макрокоманды в виде текста SQL – инструкции вводится вручную в окне ввода макрокоманды или копируются из окна SQL, что часто удобнее.

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

В макрокоманде задаются три аргумента: имя запроса, режим и режим данных. Первый аргумент задает имя открываемого запроса и является обязательным. Второй аргумент задает режим открытия запроса («Таблица», «Конструктор» и «Просмотр»). Третий аргумент описывает режим ввода данных в запрос («Добавление», «Изменение» и «Только чтение»)

SQL в программах на VBA

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

В Access существуют следующие способы запуска программ VBA:

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

— вызов функции в выражении;

— вызов процедуры Sub в другой процедуре или в окне отладки;

— выполнение макрокоманды ЗапускПрограммы (RunCode) в макросе.

Функции применяются в выражениях, определяющих вычисляемые поля в формах, отчетах или запросах. Выражения используются для указания условий в запросах и фильтрах, а также в макросах, в инструкциях и методах VBA, а также в инструкциях SQL. В процедуру Sub можно включать общедоступные VBA – подпрограммы, вызываемые из других процедур.

Рассмотрим выполнение запроса к базе данных с помощью инструкций SQL в программе на Visual Basic для приложений.

В запросе производится отбор в базе данных записей, удовлетворяющих определенным условиям (запрос на выборку), либо выдается инструкция на выполнение указанных действий с записями, удовлетворяющими определенным условиям (запрос на изменение).

Существуют следующие способы выполнения запросов:

— вызов метода Execute (для выполнения запросов SQL на изменение);

— создание и выполнение специального объекта QueryDef;

— использование инструкции SQL в качестве аргумента метода OpenRecordset;

— выполнение метода OpenRecordset для существующего объекта QueryDef;

— вызов методов RunSQL и OpenQuery.

Метод Execute используется, если требуется выполнить такое изменение в БД, при котором не возвращаются записи. Например, операции вставки или удаления записей.

Объект QueryDef представляет собой сохраненное определение запроса в базе данных. Его можно рассматривать как откомпилированную инструкцию SQL.

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

Метод RunSQL выполняет макрокоманду ЗапускЗапроса SQL в программе VBA

Метод OpenQuery выполняет макрокоманду ОткрытьЗапрос (OpenQuery) в программе VBA. С его помощью можно открыть запрос в режиме таблицы, Конструктора или просмотра. При этом устанавливается один из следующих режимов работы с данными: добавление, изменение или только чтение.

Выбор варианта выполнения запроса определяется программистом с учетом особенностей решаемой задачи.

Перенос базы данных Microsoft Office Access в Microsoft SQL Server

Со временем в ходе может потребоваться перенос файл-серверной базы данных Microsoft Office Access (Access) в формат клиент-серверной СУБД. Обычно для этой цели используется ODBC. Однако для переноса в Microsoft SQL Server (MS SQL) СУБД Access и MS SQL имеют удобные специализированные средства.

Всего существует три способа переноса базы данных из Access в MS SQL. Рассмотрим их все на примере простой базы данных состоящей из двух таблиц и одного запроса.

Перенос базы данных средствами Access («Мастер преобразования в формат SQL Server»)

Для того чтобы начать перенос нужно нажать кнопку «SQL Server» в области «Перемещение данных» вкладки «Работа с базами данных».

В открывшемся окне нужно выбрать, куда будут перенесены данные.

Возможны два варианта:

  1. Экспорт в уже существующую базу данных MS SQL;
  2. Создание новой базы данных (по умолчанию).

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

Далее предстоит выбрать таблицы, которые будут перенесены.

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

Откроется «Мастер импорта и экспорта данных»

После нажатия кнопки «Далее» необходимо выбрать источник, из которого будут импортированы данные.

В раскрывающемся списке «Источник данных» необходимо выбрать «.Net Framework Data Provider for Odbc» (если не выбрано по умолчанию) и в строке Dsn в таблице указать имя созданного выше источника данных для базы данных Access. Строка подключения («Connection String») будет сформирована автоматически.

Далее необходимо указать в какую базу данных, какого экземпляра MS SQL импорт. Для этого после нажатия кнопки «Далее» выбираем в раскрывающемся списке «Назначение» либо «Microsoft SQL Server Native Client» (как показано на скриншоте ниже) либо «Microsoft OLE DB Provider for SQL Server», указываем нужную базу данных имя пользователя и пароль для подключения.

Далее будет показано окно, в котором нужно указать способ импорта. Для импорта из Access лучше оставить значение по умолчанию.

Затем нужно выбрать таблицы, которые будут импортированы. Как уже было отмечено выше, при использовании ODBC импорт запросов Accessне доступен. Поэтому, в отличие от предыдущего скриншота со списком объектов для импорта в этом списке будут исключительно таблицы.

С помощью флажков можно выбрать как все таблицы сразу (что и сделано в этом примере), так и некоторые из них в отдельности.

После нажатия на кнопку далее будет показано окно предупреждением. Его можно просто проигнорировать и нажать кнопку «Далее».

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

Далее отобразится завершающее окно с общей итоговой сводкой информации о предстоящем процессе импорта.

После нажатия на кнопку «Готово» процесс импорта будет выполнен. Если всё сделано правильно и импорт выполнен успешно, окно с информацией о выполнении импорта не будет содержать ошибок (см. скриншот ниже).

Для завершения работы мастера достаточно нажать кнопку «Закрыть».

Результат можно увидеть SQL Server Management Studio.

Перенос базы данных со стороны средствами ODBC

Этот способ является универсальным для экспорта данных из Access в любую другую СУБД. Достаточно только чтобы она поддерживала работу с ODBC.

Пример такого экспорта уже был ранее рассмотрен в статье «Работа с базой данных SQLite средствами Access»

Для MS SQL данный способ переноса базы данных из Access не желателен, так как экспортируются только таблицы с данными, а запросы экспортируются только в виде обычных таблиц.

Однако такая возможность переноса до сих пор имеется (версия 2014 не стала исключением). Поэтому, рассмотрим и её тоже.

Для начала создадим источник данных для работы с MS SQL (пусть это будет пользовательский DSN).

Укажем драйвер для источника.

После этого будет запущен процесс его создания и настройки.

Читайте так же:
Фильтр отчета access

Зададим имя источника данных и укажем имя экземпляра MS SQL, к которому требуется выполнить подключение.

Далее введём имя пользователя и пароль для подключения.

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

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

После нажатия кнопки «Готово» будет показано окно с итоговой информацией о создаваемом источнике данных.

Для того чтобы источник данных был окончательно создан, достаточно нажать кнопку «Ok». Но, лучше предварительно проверить его работоспособность, нажав на кнопку «Проверить источник данных».

Если всё сделано правильно, будет показано сообщение об успешной проверке.

Теперь, когда есть источник данных, можно приступать непосредственно к процессу переноса.В качестве примера экспортируем из базы данных единственный запрос «Contacts Запрос».

Для этого выделим его мышью и нажмём на кнопку «Дополнительно» в области «Экспорт» вкладки «Внешние данные». В раскрывшемся меню выберем «База данных ODBC».

Далее в диалоговом окне нужно ввести, как будет назваться экспортируемый объект (в данном случае запрос) после того, как он будет экспортирован.

В данном случае оставлено исходное значение.

После нажатия кнопки «Ok» необходимо выбрать созданный источник данных.

Затем ввести имя пользователя и пароль для подключения к серверу.

После нажатия кнопки «Ok» экспорт будет выполнен.

Однако, как уже говорилось выше, результат экспорта в случае запроса не корректный.

Вместо представления «Contacts Запрос» в базе данных MS SQL была создана одноимённая таблица.

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

Вместо него настоятельно рекомендуется использовать либо встроенный «Мастер преобразования в формат SQL Server» либо импортировать базу данных Access со стороны MS SQL его средствами.

Использование языка SQL MS ACCESS;

Язык структурированных запросов (SQL) является стандартным средством для работы с базами данных. Может использоваться как для интерактивной работы с БД, так и включаться в языки программирования. В CУБД Access SQL позволяет:

· создавать, модифицировать или удалять таблицы в базе данных Access;

· создавать или удалять ключи, индексы для таблиц в базе данных Access;

· вставлять, удалять или модифицировать записи таблиц;

· получать сводную информацию о данных в таблицах (число записей, суммы, средние, минимальные, максимальные значения и др.);

· осуществлять поиск и извлекать данные из одной или более таблиц по запросу.

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

SELECT список имен полей 1

FROM список имен таблиц

[WHERE условие]

[ORDER BY список имен полей 2]

[GROUP BY список имен полей 3]

SELECT, FROM, WHERE, ORDER BY, GROUP BY — ключевые слова;

список имен полей 1 набор имен полей, которые выбираются из одной или нескольких таблиц, указанных в списке имен таблиц, вычисляемых полей, агрегированных функций (например, count, sum, min, max, avg и т.д.). Для выбора всех полей из списка таблиц вместо перечисления их имен можно использовать символ «*». Если имя поля таблицы содержит пробел, т.е. состоит из нескольких слов, то это имя должно заключаться в квадратные скобки;

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

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

Все приведенные далее примеры основаны на использовании БД по библиографии, логическая структура которой приведена на рисунке 2.1.

Примеры:

SELECT * FROM Книга — выбор всех полей всех книг из таблицы «Книга» базы данных по библиографии.

SELECT Название, [Год издания] FROM Книга — выбор полей заголовков (Название ) и года издания (Год издания) всех книг из таблицы «Книга». Имя поля года издания указано в квадратных скобках (имеет пробел).

Таблица «Издательство» Таблица «Книга» Таблица «Автор»

Рис. 2.1. Структура и схема БД по библиографии

Для поиска информации, удовлетворяющей некоторому условию, в операторе SELECT используется раздел WHERE, который имеет следующий синтаксис:

SELECT список имен полей FROM список имен таблиц WHERE условие,

где условиеопределяет критерий поиска информации.

В условии используются имена полей, операции сравнения ( , >=, <>) и специальные операции сравнения IN, LIKE, BETWEЕN. Эти операции могут объединяться с помощью логических операций (And, Or) и задавать сложные условия поиска информации.

Примеры:

SELECT Название, [Год издания] FROM Книга

WHERE [Год издания] > 1991 определяет выбор названий книг, год выпуска которых позже 1991.

SELECT Фамилия, Имя FROM Автор

WHERE Фамилия = ”Иванов” определяет выбор полей имен и фамилий авторов из таблицы «Автор», фамилии которых совпадают с фамилией Иванов. Здесь символ “ используется для задания текстовых констант.

Операция IN сравнивает содержимое поля со списком заданных значений, определяющих критерий поиска информации.

Примеры:

SELECT Название, [Год издания] FROM Книга

WHERE [Год издания] IN (1995, 1996) определяет выбор названий и года издания книг, опубликованных в 1995 или в 1996 гг.

SELECT Фамилия, Имя, Город FROM Автор

WHERE Город IN (“Омск”, “Москва”, “Киев”) определяет выбор авторов, живущих в городах Омск, Москва или Киев.

Операция LIKE сравнивает содержимое поля со значением образца. Для записи образца используются строковые константы, символы шаблона и списки диапазона символов.

Символами шаблона являются: *, ?, #. Символ * соответствует цепочке символов, ? — соответствует одному символу, # — соответствует одной цифре.

Примеры:

Р* — возможные результаты поиска рука, Роза.

КИ? — возможные результаты поиска кий, кит.

12345# — возможные результаты поиска 123455, 123457.

Список диапазона заключается в квадратные скобки, первый и последний символы диапазона отделяются дефисом (-). Диапазон задается в возрастающем порядке.

Примеры:

SELECT Фамилия, Имя, Отчество FROM Автор

WHERE Фамилия LIKE ‘И*’ определяет выбор авторов, фамилии которых начинаются с буквы И.

SELECT Фамилия FROM Автор WHERE Фамилия LIKE [A-K] определяет выбор авторов, фамилии которых начинаются с букв от А до К.

SELECT Название FROM Книга

WHERE Название LIKE “*база данных*” AND [Год издания] = 1996 определяет выбор названий книг, выпущенных в 1996 году и в названии которых присутствует фраза «база данных».

Операция BETWEEN проверяет принадлежность значения поля диапазону значений и является включающим значением (выбираются записи, содержащие поле со значением, равным границе диапазона). Границы значений объединяются операцией AND.

Примеры:

SELECT Название, [Год издания] FROM Книга

WHERE [Год издания] Between #01.01.1994# And #30.06.1994# определяет выбор книг, изданных в первой половине 1994 года. Здесь символ # используется для задания констант типа дата.

SELECT [Название издат], адрес, телефон FROM Издательство

WHERE [Название издат] Between ‘Нау’ And ‘Фин’ определяет выбор информации об издательских фирмах, начальные буквы названий которых, расположенные в алфавитном порядке, находятся в диапазоне между ‘Нау’ и ‘Фин’.

Читайте так же:
Visual basic access

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

SELECT список имен полей FROM список имен таблиц [WHERE условие] ORDER BY имя поля 1 [ASC | DESC][, имя поля 2[ASC | DESC]] ,

где имя поля1, имя поля2 поля (из списка имен полей), по которым производится упорядочение. Опция ASCустанавливает порядок сортировкипо возрастанию (данный порядок установлен по умолчанию), DESC устанавливает порядок сортировки по убыванию. Упорядочение может вестись по нескольким полям (например, по фамилии, а затем по имени)

Пример:

SELECT Название FROM Книга

WHERE Название LIKE “*база данных*” AND [Год издания] = 1996

ORDER BY Название определяет выбор названий книг, выпущенных в 1996 году и в названии которых присутствует фраза «база данных», и упорядочивает названия в алфавитном порядке.

Для группировки записей используется раздел GROUP BY, синтаксис которого следующий:

SELECT список имен полей FROM список имен таблиц [WHERE условие] GROUP BY имя поля 1 [, имя поля 2],

где имя поля1, имя поля2 поля (из списка имен полей), по которым производится группировка записей. Порядок следования полей в этом предложении определяет уровни их группировки. Группировку можно производить для выражений (например, вычисляемых полей), тогда в списке полей этому выражению должно быть присвоено какое-нибудь имя. Для агрегированных функций (count, sum, min, max, avg и т.д.) группировка обязательна.

Пример:

SELECT Фамилия, [Год издания], Sum (Цена) AS [Стоимость]

FROM Книга, Автор

WHERE Автор.[Код автора]= Книга.[Код автора]

GROUPBY Фамилия, [Год издания]

ORDER BY Фамилия, [Год издания] определяет суммарную цену (Стоимость) книг года издания для каждого автора.

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

SELECT список имен полей FROM список имен таблиц WHERE список связей,

где список связей определяет, как таблицы в списке имен таблиц связаны между собой. Например, имя_таблицы1.имя_поля1 = имя_таблицы2.имя_поля2.

Примеры:

SELECT Книга.Название, Издательство. [Название издат]

FROM Книга, Издательство

WHERE Книга. [Код издат]= Издательство. [Код издательства] And

Издательство. [Название издат]=”Наука”

Этот запрос определяет выбор названий книг (Название) из таблицы «Книга» и названий издательств (Название издат) из таблицы издательств (Издательство). Раздел WHERE осуществляет следующее:

· определяет связь между таблицами (выбирается название книги и номер издательства «Код издат» из таблицы «Книга», по номеру издательства «Код издательства» в таблице издательств «Издательство» находится название издательства);

· задает условие для выбора книг, изданных только в издательстве «Наука».

Access SQL. Основные понятия, лексика и синтаксис

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

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

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

Это статья из цикла статей о языке SQL для Access. В ней описаны основы использования SQL для выборки данных и приведены примеры синтаксиса SQL.

В этой статье

Что такое SQL?

SQL — это язык программирования, предназначенный для работы с наборами фактов и отношениями между ними. В программах управления реляционными базами данных, таких как Microsoft Office Access, язык SQL используется для работы с данными. В отличие от многих языков программирования, SQL удобочитаем и понятен даже новичкам. Как и многие языки программирования, SQL является международным стандартом, признанным такими комитетами по стандартизации, как ISO и ANSI.

На языке SQL описываются наборы данных, помогающие получать ответы на вопросы. При использовании SQL необходимо применять правильный синтаксис. Синтаксис — это набор правил, позволяющих правильно сочетать элементы языка. Синтаксис SQL основан на синтаксисе английского языка и имеет много общих элементов с синтаксисом языка Visual Basic для приложений (VBA).

Например, простая инструкция SQL, извлекающая список фамилий контактов с именем Mary, может выглядеть следующим образом:

Примечание: Язык SQL используется не только для выполнения операций над данными, но еще и для создания и изменения структуры объектов базы данных, например таблиц. Та часть SQL, которая используется для создания и изменения объектов базы данных, называется языком описания данных DDL. Язык DDL не рассматривается в этой статье. Дополнительные сведения см. в статье Создание и изменение таблиц или индексов с помощью запроса определения данных.

Инструкции SELECT

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

таблицы, в которых содержатся данные;

связи между данными из разных источников;

поля или вычисления, на основе которых отбираются данные;

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

необходимость и способ сортировки.

Предложения SQL

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

Определяет поля, которые содержат нужные данные.

Определяет таблицы, которые содержат поля, указанные в предложении SELECT.

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

Определяет порядок сортировки результатов.

В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.

Только при наличии таких полей

В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.

Термины SQL

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

Сопоставимая часть речи

Имя, используемое для идентификации объекта базы данных, например имя поля.

глагол или наречие

Ключевое слово, которое представляет действие или изменяет его.

Значение, которое не изменяется, например число или NULL.

Сочетание идентификаторов, операторов, констант и функций, предназначенное для вычисления одного значения.

Основные предложения SQL: SELECT, FROM и WHERE

Общий формат инструкций SQL:

Access не учитывает разрывы строк в инструкции SQL. Несмотря на это, каждое предложение рекомендуется начинать с новой строки, чтобы инструкцию SQL было удобно читать как тому, кто ее написал, так и всем остальным.

Каждая инструкция SELECT заканчивается точкой с запятой (;). Точка с запятой может стоять как в конце последнего предложения, так и на отдельной строке в конце инструкции SQL.

Пример в Access

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

Читайте так же:
Оператор in в access

1. Предложение SELECT

2. Предложение FROM

3. Предложение WHERE

Эту инструкцию SQL следует читать так: «Выбрать данные из полей «Адрес электронной почты» и «Компания» таблицы «Контакты», а именно те записи, в которых поле «Город» имеет значение «Ростов».

Разберем пример по предложениям, чтобы понять, как работает синтаксис SQL.

Предложение SELECT

SELECT [E-mail Address], Company

Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора («[Адрес электронной почты]» и «Компания»).

Если идентификатор содержит пробелы или специальные знаки (например, «Адрес электронной почты»), он должен быть заключен в прямоугольные скобки.

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

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

Предложение FROM

Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).

В предложении FROM не указываются поля для выборки.

Предложение WHERE

Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город=»Ростов»).

Примечание: В отличие от предложений SELECT и FROM, предложение WHERE является необязательным элементом инструкции SELECT.

С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в следующих статьях:

Сортировка результатов: ORDER BY

Как и в Microsoft Excel, в Access можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, вы также можете указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL.

Предложение ORDER BY содержит список полей, для которых нужно выполнить сортировку, в том же порядке, в котором будут применена сортировка.

Предположим, например, что результаты сначала нужно отсортировать по полю «Компания» в порядке убывания, а затем, если присутствуют записи с одинаковым значением поля «Компания», — отсортировать их по полю «Адрес электронной почты» в порядке возрастания. Предложение ORDER BY будет выглядеть следующим образом:

ORDER BY Company DESC, [E-mail Address]

Примечание: По умолчанию Access сортирует значения по возрастанию (от А до Я, от наименьшего к наибольшему). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.

Дополнительные сведения о предложении ORDER BY см. в статье Предложение ORDER BY.

Работа со сводными данными: предложения GROUP BY и HAVING

Иногда возникает необходимость работы со сводными данными, такими как итоговые продажи за месяц или самые дорогие товары на складе. Для этого в предложении SELECT к полю применяется агрегатная функция. Например, если в результате выполнения запроса нужно получить количество адресов электронной почты каждой компании, предложение SELECT может выглядеть следующим образом:

SELECT COUNT([E-mail Address]), Company

Возможность использования той или иной агрегатной функции зависит от типа данных в поле и нужного выражения. Дополнительные сведения о доступных агрегатных функциях см. в статье Статистические функции SQL.

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

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

Предложение GROUP BY должно следовать сразу же за предложением WHERE или FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.

Продолжим предыдущий пример. Пусть в предложении SELECT агрегатная функция применяется только к полю [Адрес электронной почты], тогда предложение GROUP BY будет выглядеть следующим образом:

GROUP BY Company

Дополнительные сведения о предложении GROUP BY см. в статье Предложение GROUP BY.

Ограничение агрегированных значений с помощью условий группировки: предложение HAVING

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

Предположим, например, что к первому полю в предложении SELECT применяется функция AVG (которая вычисляет среднее значение):

SELECT COUNT([E-mail Address]), Company

Если вы хотите ограничить результаты запроса на основе значения функции COUNT, к этому полю нельзя применить условие отбора в предложении WHERE. Вместо него условие следует поместить в предложение HAVING. Например, если нужно, чтобы запрос возвращал строки только в том случае, если у компании есть несколько адресов электронной почты, можно использовать следующее предложение HAVING:

HAVING COUNT([E-mail Address])>1

Примечание: Запрос может включать и предложение WHERE, и предложение HAVING, при этом условия отбора для полей, которые не используются в статистических функциях, указываются в предложении WHERE, а условия для полей, которые используются в статистических функциях, — в предложении HAVING.

Дополнительные сведения о предложении HAVING см. в статье Предложение HAVING.

Объединение результатов запроса: оператор UNION

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

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

Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.

Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.

Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:

Предположим, например, что имеется две таблицы, которые называются «Товары» и «Услуги». Обе таблицы содержат поля с названием товара или услуги, ценой и сведениями о гарантии, а также поле, в котором указывается эксклюзивность предлагаемого товара или услуги. Несмотря на то, что в таблицах «Продукты» и «Услуги» предусмотрены разные типы гарантий, основная информация одна и та же (предоставляется ли на отдельные продукты или услуги гарантия качества). Для объединения четырех полей из двух таблиц можно использовать следующий запрос на объединение:

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

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

На самом деле любой запрос в MS Access реализуется с помощью языка SQL. Большинство запросов можно построить, пользуясь средствами, которые Access предоставляет в режиме конструктора, и в этом случае они будут храниться в виде инструкций SQL. Но некоторые типы запросов можно построить, только используя язык SQL.

Синтаксис инструкции SELECT в MS Access. Ядром языка SQL является инструкция SELECT. Она используется для отбора строк и столбцов из таблиц базы данных и содержит пять основных предложений. В общем случае ее синтаксис можно представить в следующем виде:

Читайте так же:
Sharepoint workspace 2020 что это

[WHERE ] [2] [GROUP BY ]

В MS Access реализованы важные средства расширения языка: инструкция TRANSFORM, позволяющая строить перекрестные запросы; предложение IN, с помощью которого задается связь с удаленной базой данных или указываются имена столбцов перекрестного запроса, и др. Синтаксис:

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

Первую часть имени (включая точку) можно опустить, если поле имеется только в одной из таблиц предложения FROM.

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

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

Пример 10.5. Следующее выражение задает ноле из таблицы [Товары], имя которого Наименование:

Предложение FROM. Задает таблицы или запросы, служащие источниками данных для создаваемого запроса. Синтаксис:

имя-запроса-на-выборку [[AS] псевдоним] I

[IN сспецификация источника>]

имя-запроса-на-выборку [[AS] псевдоним] I

имя-запроса-на-выборку [[AS] псевдоним] I

ON

Для каждой таблицы и запроса можно определить альтернативное имя. Оно используется как псевдоним вместо полного имени таблицы при задании имен столбцов в списке полей, условии объединения и предложении WHERE.

Пример 10.6. Следующий запрос отображает все поля таблицы Товары:

Пример 10.7. Следующий запрос отображает товары, цена которых больше 100 долл, и гарантийный срок которых 36 мес:

SELECT Товары.Наименование, Товары.Цена

WHERE Товары.Цена > 100 AND Товары.[Гарантийный срок] = 36;

Большие возможности языка SQL во многом основаны на его способности объединять информацию из нескольких таблиц или запросов.

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

Операция INNER JOIN используется для получения всех строк из обеих логических таблиц, удовлетворяющих условию объединения.

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

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

– выражение, в котором поля первой таблицы сравниваются с полями второй таблицы. В бланке запроса QBE в условии объединения используется только оператор равно (=). Запрос на основе объединения таблиц по неравенству ( , <>, =) можно создать только в режиме SQL.

Пример 10.8. Следующий запрос отображает сведения о складах фирмы Citii i nk:

SELECT Склады.Номерсклада, Склады.Адрес,

FROM Фирмы INNER JOIN Склады

ON Фирмы.Кодфирмы = Склады.Кодфирмы

WHERE Фирмы.Название = «Citilink»;

Пример 10.9. Запрос отображает список товаров, которые еще не продавались, с указанием наименования товаров и номеров складов, на которых они хранятся:

SELECT Товары.Наименование, Хранение.Номерсклада

FROM (Товары INNER JOIN Хранение

ON Товары.КодТовара = Хранение.КодТовара)

LEFT JOIN Продажи ON Хранение.ID = Продажи.ID

WHERE ((Продажи.Количество) Is Null);

Пример 10.10. Следующая операция возвратит все строки из таблиц «Товары» и «Хранение», для которых совпадают значения в поле КодТовара:

Товары INNER JOIN Хранение ON Товары.КодТовара =

Операция LEFT JOIN возвратит все строки из таблицы, полученной в результате предыдущей операции INNER JOIN, объединенные с теми строками из таблицы «Продажи», для которых выполняется условие объединения. Тогда в с троке товара, который не продавался, в поле [Количество проданного товара] будет значение Null, что будет являться условием отбора для искомого списка.

Предложение GROUP BY. В инструкции SELECT задает столбцы, используемые для формирования групп из выбранных строк. Синтаксис:

GROUP BY имя-столбца, .

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

Пример 10.11. Следующий запрос отображает общее количество проданного товара каждого наименования:

SELECT Товары.Наименование, Sum(Продажи.Количество)

FROM (Товары INNER JOIN Хранение

ON Товары.КодТовара = Хранение.КодТовара)

INNER JOIN Продажи ON Хранение.Ю=Продажи.ID

GROUP BY Товары.Наименование;

Предложение HAVING. Это специальная форма фразы WHERE. Она относится пе к отдельным строкам, а к группам: предикат во фразе HAVING всегда ссылается (посредством специальных библиотечных функций, таких как, например, SET) на свойства групп, а не строк, и на основе этого предиката группы целиком либо выбираются, либо отбрасываются. Синтаксис:

HAVING «условие отбора>

В случае отсутствия предложения GROUP BY условие отбора применяется ко всей логической таблице, определенной инструкцией SELECT.

Пример 10.12. Следующий запрос отображает общее количество проданного товара по дням с 10 по 20 декабря 2003 г.:

SELECT Продажи.Дата, Эит(Продажи.Количество)

GROUP BY Продажи.Дата

HAVING ((Продажи.Дата) Between #10.12.03# AND

Предложение ORDER BY. Задает порядок расположения строк, возвращаемых инструкцией SELECT. Синтаксис:

Оператор ORDER BY определяет сортировку результата выборки в порядке возрастания (ASC) или убывания (DESC) значений атрибута. В предложении ORDER BY можно указать несколько столбцов. Список сортируется сначала по значениям столбца, имя которого указано первым.

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

SELECT Товары.Наименование, Товары.Цена

ORDER BY Товары.Цена DESC;

Инструкция SELECT. Выполняет операции выбора и объединения для создания логической таблицы (набора записей) на базе других таблиц или запросов. Выше был рассмотрен синтаксис инструкции SELECT в общем виде. Рассмотрим его более подробно:

SELECT [ALL I DISTINCT I DISTINCTROW I TOP число

Предикаты ALL, DISTINCT, DISTINCTROW, TOP n или TOP n PERCENT уточняют окончательный набор записей запроса.

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

Предикат DISTINCT требует, чтобы запрос возвратил только строки, отличающиеся от всех остальных. Если инструкция SELECT содержит предикат DISTINCTROW, то в набор записей включаются только те строки, в которых конкатенация первичных ключей из всех таблиц, участвующих в формировании возвращаемых столбцов, является уникальной. В зависимости от того, какие столбцы представлены в наборе записей, иногда можно увидеть повторяющиеся строки, но даже в этом случае каждая строка запроса образована из уникальной (DISTINCT) комбинации строк (ROWS) базовых таблиц.

Чтобы результирующий набор содержал только первые п или первые п процентов записей, используйте предикат ТОР п или TOP п PERCENT. Параметр п должен быть целым числом, не превышающим 100, если используется ключевое слово PERCENT.

Пример 10.14. Следующий запрос отображает список 10 самых дорогих товаров:

SELECT ТОР 10 Товары.Наименование, Товары.Цена

ORDER BY Товары.Цена DESC;

Подчиненный запрос (вложенная выборка). Язык SQL позволяет использовать в условии отбора результаты другой выборки. Уровней вложенности может быть несколько.

Пример 10.15. Следующий запрос отображает список процессоров, цена которых ниже средней цены процессоров:

SELECT Товары.Наименование, Товары.Цена

WHERE ((Товары.Наименование) Like «проц*») AND

  • [1] В угловые скобки заключается обязательный элемент синтаксиса.
  • [2] В квадратные скобки заключаются один или несколько необязательных элементов, разделенных символом «вертикальная черта» (|).
  • [3] В фигурные скобки заключаются один или несколько элементов, разделенных символом «вертикальная черта». Следует выбрать один из перечисленных элементов.
  • [4] Запрос должен заканчиваться символом «точка с запятой».
голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector