Уроки по Sql

Режим sql в access – Как запустить SQL режим в MS Access?

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

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

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

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

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

В этой статье

Что такое SQL?

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

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

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

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

Что такое SQL?

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

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

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

SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';

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

Инструкции SELECT

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

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

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

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

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

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

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

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

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

Описание

Обязательное

SELECT

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

Да

FROM

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

Да

WHERE

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

Нет

ORDER BY

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

Нет

GROUP BY

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

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

HAVING

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

Нет

Термины SQL

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

Термин SQL

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

Определение

Пример

идентификатор

существительное

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

Клиенты.[НомерТелефона]

оператор

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

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

AS

константа

существительное

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

42

выражение

прилагательное

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

>= Товары.[Цена]

К началу страницы

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

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

SELECT field_1
FROM table_1
WHERE criterion_1
;

Примечания: 

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

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

Пример в Access

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

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

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

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

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

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

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

SELECT [E-mail Address], Company

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

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

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

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

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

FROM Contacts

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

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

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

WHERE City=»Seattle»

Это предложение 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 field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;

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

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;

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

К началу страницы

support.office.com

SQL — язык доступа и управления СУБД Access

Запросы составляются на основе SQL – инструкций

Автор: Владимир Ткаченко

Источник: Обучение в интернет

В СУБД Access применяются два типа запросов: QBE – запрос по образцу и SQL (Structured Query Language)- язык структурированных запросов. Запрос по образцу формируется путем заполнения специального бланка запроса в окне «Конструктора запросов». SQL – запросы создаются программистами из последовательности SQL – инструкций. SQL формируется, как правило, программистами на бланке запроса, который открывается командой «Конструктор запросов» на вкладке «Создание» и выбирается «Режим SQL» из меню Вид. Язык SQL предназначен для работы с данными, т.е. для создания, модификации и управления данными в реляционных БД.

Следует отметить, что существует несколько режимов запросов SQL (запросов в режиме ANSI-89 SQL и ANSI-92 SQL), которые соответствуют стандартам ANSI-89 SQL и ANSI-92 SQL.

Инструкции содержат описание набора данных на языке SQL. Инструкции SQL состоят из предложений (SELECT, FROM, WHERE и т.д.). Предложения на языке SQL состоят из терминов (операторов или команд, идентификаторов, констант и т.д.). Инструкция начинается оператором (одной из команд SELECT, CREATE, INSERT, UPDATE, DELETE и т.д. ) и заканчивается точкой с запятой. Основные операторы SQL: SELECT, FROM и WHERE.

Например, инструкция SQL:
SELECT Студенты.КодСтудента
FROM Студенты;
состоит из предложения «SELECT Студенты.КодСтудента» и предложения «FROM Студенты».

Предложение SELECT содержит оператор SELECT и идентификатор «Студенты.КодСтудента». Здесь полное имя поля «КодСтудента» предваряется именем таблицы «Студенты» базы данных. SELECT — определяет поле, которое содержит требуемые данные. Предложение FROM состоит из оператора FROM и идентификатора «Студенты». FROM — определяет таблицу, которая содержат поля, указанные в предложении SELECT.

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

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

Чтобы посмотреть SQL – запросы на выборку в СУБД Access 2003 или 2007 необходимо в активном окне проектирования запроса по образцу (рис. 1) выполнить команду Вид/режим SQL.


Рис. 1.

Получим инструкцию SQL (SELECT) на выборку данных из БД Access 2003 по критерию успеваемости студентов «Оценка=5» (рис. 2).


Рис. 2.

Как следует из инструкции SELECT (рис. 1), она описывает набор данных на языке SQL: SELECT — определяет имена полей, предваряемые именами таблиц, в которых содержатся данные; FROM — определяет таблицы и их взаимосвязи через ключевые поля таблиц (для этого используется конструкция INNER JOIN … ON), на основе которых отбираются данные; WHREME — определяет условия отбора полей; ORDER BY — определяет способ сортировки по возрастанию (по умолчанию выполняется сортировка по возрастанию) значений поля «Фамилия» таблицы «Студенты».

Как следует из инструкции на выборку данных из БД, язык SQL описывает, что необходимо получить из базы данных, при этом исполнение возлагается на СУБД, так как язык SQL не имеет своих средства управления выполнением программы.


www.lessons-tva.info

Режим SQL-запросов в Access, конструкции языка

Лабораторная работа № 4. Запросы (продолжение).

На это лабораторной мы продолжим знакомиться с построением запросов и рассмотрим еще один режим работы с запросами – режим SQL. Возможно из-за краткости описания лабораторной, не все будет сразу понятно. В таких случаях, посмотрите справку Access (она как обычно вызывается по клавише F1), где подробно описаны рассматриваемые конструкции языка SQL.

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

SELECT Book.Author FROM Book;

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

SELECT DISTINCT Book.Author FROM Book;

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

SELECT DISTINCT Book.Author FROM Book ORDER BY Book.Author;

SELECT DISTINCT Book.Author FROM Book ORDER BY Book.Author DESC;

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

SELECT Book_in_Lib.LibID, Book.Author, Book.Name

FROM Book INNER JOIN Book_in_Lib ON
Book.BookID = Book_in_Lib.BookID;

Здесь инструкция INNER JOIN указывает на то, что надо соединить таблицы по условию совпадения значений в столбцах Book.BookID = Book_in_Lib.BookID. Причем соединение должно быть «внутренним» — соответствующие значения должны встречаться как в одной, так и в другой таблице.

vunivere.ru

Е.А. Бессонов Access Запросы на языке SQL

Министерство образования Российской Федерации

Кузбасский государственный технический университет

Кафедра вычислительной техники

и информационных технологий

ACCESS

Запросы на языке SQL

Методические указания к лабораторной работе для студентов специальности “Экономика и управление на предприятиях ” по курсу “Автоматизация экономических расчетов ”

Составитель Е.А. Бессонов

Утверждены на заседании кафедры Протокол № 11 от 23.06.2000

Рекомендованы к печати методической комиссией специальности 060800 Протокол № 1 от 3.10.2000

Электронная копия хранится в библиотеке главного корпуса КузГТУ

Кемерово 2001

SQL

SQL (Structured Query Language – структурированный язык запро-

сов) с 1986г. является стандартным языком реляционных баз данных. В частности, он используется в приложениях Access и Excel. Стандарт языка SQL изложен в [1].

Запросы в MS Access сохраняются и реализуются с помощью языка SQL. Хотя большинство запросов можно создать графическими средствами (запросы по образцу), однако хранятся они в виде инструкций SQL. В ряде случаев (например в подчиненных запросах) можно использовать только язык SQL. В MS Access использован и ниже излагается диалект этого языка. Многочисленные примеры запросов на языке SQL можно найти в базе данных (БД) Борей (файл I:\Access \Sampapps\Nwind.mdb).

SQL заметно отличается от других языков программирования высокого уровня.

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

2.В SQL используется трехзначная логика. Наряду с традиционными логическими значениями TRUE и FALSE используется NULL (НЕИЗВЕСТНО или ОТСУТСТВИЕ ДАННЫХ).

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

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

FROM

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

FROM таблицы [IN внешняя_БД]

Таблицы — используемые таблицы/запросы и их взаимосвязи.

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

Пример

FROM Преподаватели

Если запрос строится на двух таблицах, то необходимо указать способ их объединения – один из следующих (предполагается , что читатель с ними знаком):

, декартово произведение; INNER JOIN внутреннее объединение; LEFT JOIN левое внешнее объединение; RIGHT JOIN правое внешнее объединение.

Сразу после способа объединения необходимо поместить фразу ON Таблица1.Ключ = Таблица2.ВнешнийКлюч

Ключ — имя ключевого поля со стороны 1.ВнешнийКлюч — имя связующего поля со стороны N.

Схема данных

На рисунке представлена схема объединения таблиц (схема данных), которая будет использоваться для большинства приводимых ниже примеров. Из рисунка, например, видно, что у таблицы “Экзаменаторы” поле “Предмет” является ключевым (выделено жирным шрифтом), а поле “Преподаватель” – внешним ключом для таблицы “Преподаватели”. Объединение между указанными таблицами – внутреннее с обеспечением целостности данных. Об этом свидетельствуют знаки 1 и ∞ на концах связующей линии (“Преподаватели” – главная таблица, а “Экзаменаторы” – подчиненная). При внешнем объединении можно увидеть на линии объединения таблиц стрелку, направленную к подчиненной таблице. Это значит, что в главной таблице будут показаны все записи, даже если им нет соответствующих записей в подчиненной. Например, можно получить список преподавателей и названий предметов. Если

некоторого преподавателя нет в таблице “Экзаменаторы”, то поле названия предмета этого преподавателя будет пусто, если используется объединение LEFT JOIN.

Пример

FROM Экзаменаторы INNER JOIN Экзамены ON Экзаменаторы.Предмет = Экзамены.Предмет

В предложении FROM перед зарезервированными словами INNER JOIN указывается имя таблицы со стороны 1 (в нашем случае таблица “Экзаменаторы”). Если в предложении FROM больше двух таблиц, то объединение двух таблиц можно заключить в круглые скобки и рассматривать его как одну таблицу при объединении с другими таблицами или объединениями. Таким способом можно описать объединение любого числа таблиц.

Пример

FROM Преподаватели INNER JOIN (Экзаменаторы

INNER JOIN Экзамены

ON Экзаменаторы.Предмет = Экзамены.Предмет)

ON Преподаватели.Преподаватель = Экзаменаторы.Преподаватель Описана вся схема данных (см. рисунок).

SELECT

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

SELECT поля

FROM таблицы;

Поля — множество выражений и имен полей, разделенных запятыми.Пример

SELECT Группа, Студент, Оценка FROM Экзамены;

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

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

Вприведенном примере в режиме таблицы запрос выдает таблицу

сзаголовками столбцов “Группа”, ”Студент”, ”Оценка” (именно в этом порядке). Иногда бывает желательно, чтобы заголовок отличался от

имени поля. В этом случае после имени поля следует поместить зарезервированное слово AS и заголовок (псевдоним), например:

SELECT Группа, Студент AS ФИО,Оценка

Вэтом случае вместо заголовка “Студент” появится “ФИО”. Если

взаголовке более одного слова, его необходимо заключить в квадратные скобки.

Если необходимо выдать все поля таблицы, то аргумент поля следует задать звездочкой или в виде “Таблица.*”.

Пример

SELECT Преподаватели.* FROM Преподаватели;

Выдаются все 5 полей из таблицы “Преподаватели”.

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

Пример

SELECT Avg([Оценка]) As [Средний балл] FROM Экзамены;

Запрос выдает одно число в столбце с заголовком “Средний балл”

– среднее арифметическое всех оценок студентов. Пример

SELECT Count([Преподаватель]) As [Число преподавателей] FROM Преподаватели;

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

Винструкции SELECT сразу после слова SELECT может быть за-

писан предикат – одно из слов ALL, DISTINCT, DISTINCTROW, TOP N [PERCENT].

Предикат ALL предписывает выдавать все записи, даже если они содержат повторы.

DISTINCT запрещает выводить записи, содержащие повторы в отобранных полях. Использование предиката DISTINCT эквивалентно установке значения “Да” свойства “Уникальные значения” в бланке свойств конструктора запросов.

DISTINCTROW влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц. Предикат игнорируется, если запрос содержит только одну таблицу. Предикат DISTINCTROW исключает записи, повторяющиеся полностью. Использование предиката DISTINCTROW эквивалентно установке значения “Да” свойства “Уникальные записи” в бланке свойств конструктора запросов.

Предикат Top N используется для возврата N записей, находящихся в начале или конце набора, отсортированного по возрастанию или убыванию значений этого поля. Сортировка определяется с помощью предложения ORDER BY, размещаемого после предложения FROM инст-

рукции SELECT.

После слов ORDER BY надо поместить имя поля и слово ASC (по возрастанию, не обязательно) или DESC (по убыванию). Следующая инструкция SQL позволяет получить список из 5 лучших студентов.

 

Успеваемость

Таблица 1

Предмет

Группа

Студент

Средний балл

1

1

Волков

2,4

1

1

Медведев

4,5

2

2

Белкин

5,0

2

2

Лисицын

2,1

1

1

Воробьев

3,3

3

1

Кротова

4,8

 

 

 

 

Пример

SELECT TOP 5 Студент, [Средний балл] FROM Успеваемость

ORDER BY[Средний балл] DESC;

Пример

SELECT DISTINCT [Студент] FROM Экзамены

ORDER BY [Студент];

Запрос выдает список студентов, отсортированный по возрастанию фамилий.

WHERE

После предложения FROM инструкции SELECT можно написать

предложение WHERE в форме WHERE условие

Условие — логическое выражение, которое вычисляется для каждой записи исходной таблицы.

Если условие истинно, то запись (совокупность полей в списке полей предложения SELECT) включается в результирующее множество, если ложно – не включается.

Пример

SELECT DISTINCT Группа, Студент

FROM Экзамены

WHERE Оценка = 2;

Создается список студентов – двоечников. Пример

SELECT [ФИО] FROM Преподаватели

WHERE [Должность]=”Доцент” OR [Степень]=”К.т.н.” ORDER BY [ФИО];

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

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

* любое количество любых символов;

# цифра;

?любой символ.

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

[A-F]символ в диапазоне от A до F включительно.[!A-F]символ не входит в диапазонA-F.

Пример

SELECT [ФИО] FROM Преподаватели

WHERE [ФИО] LIKE “B*” OR [ФИО] LIKE “Щ*”;

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

Пример

Х LIKE “P[A-F]###”

Написанному условию удовлетворяют строки из 5 символов, начинающиеся с буквы Р. За ней должна следовать буква из диапазона A-F.Строку должны завершать 3 цифры.

PARAMETERS

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

PARAMETERS тексты;

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

После каждого текста через пробел указывается тип данных. При выполнении запроса с параметрами не требуется открывать окно конструктора запросов и вносить изменения в условия отбора. Вместо этого пользователю предлагается ввести нужное условие во время выполнения запроса. Для каждого текста из предложения PARAMETERS на экране появляется диалоговое окно, где каждый текст из описания играет роль подсказки – что именно нужно ввести. В диалоговое окно следует ввести данное указанного типа.

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

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

Пример

PARAMETERS [Укажите начальную дату] DATETIME, [Укажите конечную дату] DATETIME;

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

Пример

PARAMETERS [Укажите группу] TEXT; SELECT Студент, Оценка

FROM Экзамены

WHERE [Группа]=[Укажите группу] And [Предмет]=1;

Запрос выдает оценки студентов указанной группы по предмету с кодом 1.

GROUP BY

Предложение GROUP BY поля объединяет группу записей в указанном списке (поля) полей в одну запись. Если инструкция SELECT содержит групповую функцию (например Avg или Sum), то для записи в результирующее множество будет вычислено значение – итог по группе записей. Так, например, если в таблице “Экзамены” сгруппировать записи по предмету, то с помощью функции Avg можно получить средний балл по предмету. Группировка по предмету и группе позволит получить средние баллы студенческих групп по указанному предмету.

GROUP BY не является обязательным предложением. Если оно присутствует в предложении SELECT, то располагается после предложения FROM.

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

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

Пример

SELECT Группа, Студент, Avg([Оценка]) AS [Средний балл] FROM Экзамены

GROUP BY [Группа],[Студент];

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

HAVING

Необязательное предложение HAVING условие должно располагаться после GROUP BY. Оно определяет, какие из сгруппированных записей войдут в результирующее множество.Условие в HAVING – обычное логическое выражение, как и в WHERE. WHERE и HAVING могут присутствовать в инструкции SELECT и одновременно. В этом случае WHERE отфильтровывает записи до группировки, а HAVING — сгруппированные записи (группы).

Пример

PARAMETERS [Введите название предмета] TEXT; SELECT Группа, Предмет, Avg([Оценка]) AS [Средний балл] FROM Экзаменаторы INNER JOIN Экзамены

ON Экзаменаторы.Предмет=Экзамены.Предмет

WHERE [Название предмета]=[Введите название предмета] GROUP BY Группа, Студент

HAVING Avg([Оценка])>=4,5 And Min([Оценка])>2;

Запрос возвращает список студентов с их средними баллами. В список входят студенты, не имеющие двоек и со средними баллами не ниже 4,5.

TRANSFORM

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

TRANSFORM Функция SELECT …;

PIVOT поле;

Функция — групповая функция SQL, обрабатывающая данные ячейки таблицыПоле — поле или выражение, значения из которого становятся заголов-

ками столбцов.

Запрос в режиме таблицы имеет столько столбцов, сколько различных значений принимает поле. Например, еслиполе выдает названия месяцев, то получится до 12 столбцов, заголовки которых упорядочены по возрастанию (Август, Апрель…Январь). После аргументаполе можно поместить предложение IN(список_значений). Фиксированные значения всписке_значений разделяются запятыми. При наличии предложения IN каждое значениеполя сравнивается со значениями всписке_значений. При совпадении в соответствующем столбце выводится результат вычисления функции. Фиксированные заголовки, которым не соответствуют реальные данные, можно использовать для создания дополнительных столбцов.

Использование предложения PIVOT эквивалентно определению свойства “Заголовки столбцов” в бланке свойств конструктора запросов.

studfiles.net

4.7. Запрос в Режиме sql

В Access запросы представляются в трех режимах: Конструктор, Режим таблицы и Режим SQL. Ранее уже упоминалось, что любой запрос является программой, написанной на языке структурированных запросов SQL. Этот язык является общепринятым стандартным языком запросов в реляционных БД. Он был разработан фирмой IBM для реляционной модели данных, предложенной Э.Ф. Коддом. Фактически программа на SQL представляет собой некоторую фразу-запрос к выборке данных на английском языке, записанную в определенной структуре, которую затем СУБД преобразует в требуемый результат. В данном пособии SQL не будет рассматриваться подробно, однако, вообще говоря, знание основных особенностей этого языка поможет лучше понять процесс выполнения запроса, а также при необходимости отредактировать его или даже построить более эффективный запрос.

Рис. 25. Режим SQL для запроса на просмотр с сортировкой

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

Например, после перехода к режиму SQL ранее сформированный мастером Простых запросов запрос «Клиенты» будет выглядеть так, как это показано на рис. 25. Как видно, текст SQL программы запроса достаточно прост и вполне доступен для понимания с первого раза. В первой строке после оператора SELECT (выбрать, англ.) указываются поля таблицы «Клиенты», которые выбраны для запроса. Во второй строке после оператора FROM (из, англ.) указывается таблица, из которой эти поля выбираются, а в третьей строке после оператора ORDER BY (упорядочить по, англ.) указано поле, по которому проводится сортировка результирующих записей.

Запрос с заданным критерием отбора записей «Контракты после 1 марта», в котором производится выборка по условию, имеет программу с аналогичной структурой. Однако в программу запроса (см. рис. 26) добавлена строка с условием, которое сформировано после оператора WHERE (где, англ.) и по которому из таблицы «Контракты» выбираются все записи с контрактами, заключенными после 1 марта 2001 года.

При задании запроса с группировкой записей и вычислением итоговых значений используется оператор группировки GROUP BY (группировать по, англ.) и соответствующая вычислительная операция Sum по числовым полям для сгруппированных данных (см. рис. 27).

Рис. 26. Режим SQL для запроса с условием на выборку записей

Рис. 27. Режим SQL для запроса с группировкой и вычислением

Если запрос строится на основе полей из нескольких связанных между собой таблиц, то это, естественно, усложняет программу, в которой нужно обеспечить определенное согласование отбираемых для запроса данных. В частности, в более сложном запросе «Товары Запрос», основанном на трех взаимосвязанных таблицах «Товары», «Контракты» и «Сотрудники», появляются операторы INNER JOIN (внутреннее объединение, англ.) для внутреннего объединения таблиц по связующему их полю и DISTINCTROW (отличающаяся запись, англ.) для ограничения выбираемых данных однозначными записями (см. рис. 28).

Перекрестный запрос всегда преобразует таблицу запроса к форме электронных таблиц Excel, поэтому первым оператором в таком запросе является оператор TRANSFORM (преобразовать, англ.), который определяет вычисляемые значения в ячейках результирующей таблицы запроса. После операторов выбора SELECT … FROM и оператора группировки GROUP BY следует оператор PIVOT (опора, англ.), где указывается поле, которое должно использоваться при создании заголовков столбцов для набора записей перекрестного запроса.

Рис. 28. Запрос в Режиме SQL на основе связанных таблиц

Рис. 29. Перекрестный запрос в Режиме SQL

Перечислим в заключение назначение некоторых основных операторов языка SQL:

SELECT – выбирает поля из таблиц по запросу;

FROM – указывает таблицу, из которой были выбраны поля;

WHERE – создает условие на выборку данных в записях;

ORDER BY – сортирует записи в заданном порядке;

GROUP BY – группирует совпадающие записи при выполнении итоговых запросов;

INNER JOIN – объединяет таблицы по связующим полям;

DISTINCTROW – исключает из результирующего набора повторяющиеся записи;

TRANSFORM – вычисляет выражения в перекрестных запросах;

PIVOT – определяет заголовки столбцов в таблице перекрестного запроса.

Просмотрите и проанализируйте в Режиме SQL другие созданные с помощью Конструктора либо Мастера запросы.

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

На основе запроса «Контракты» создайте в Режиме SQL программу запроса выборки из таблицы «Контракты» полей «Товар»,«Клиент»,

«Количество» с условием по количеству > 100, группировкой по полю «Клиент» и сортировкой по полю «Товар».

studfiles.net

Выборка данных в СУБД Access

Запросы на выборку данных в СУБД Access 2003 или 2007

Автор: Владимир Ткаченко

Источник: Обучение в интернет

В предыдущих статьях были рассмотрены вопросы создания базы данных «sql_training_st.mdb» с помощью инструкций SQL. Рассмотрена технология создания структуры таблиц базы данных «sql_training_st.mdb» на основе SQL запросов. Кроме того, с помощью SQL запросов было осуществлено заполнение таблиц СУБД ACCESS «sql_training_st.mdb».

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

Язык SQL состоит из четырех групп:

  • язык манипулирования данными DML;
  • язык определения данных DDL;
  • язык управления данными DCL;
  • язык управления транзакциями TCL.

К группе DML относятся четыре основных типа запросов SQL:

  • INSERT — предназначен для добавления одной или нескольких записей в конец таблицы;
  • UPDATE — предназначен для изменения уже существующих записей в столбцах таблицы или модификации данных в таблице;
  • DELETE — предназначен для удаления записей из таблицы;
  • SELECT — предназначен для выборки данных из таблиц.

Первые три типа SQL запросов (INSERT, UPDATE, DELETE), которые относятся к корректирующим запросам к базе данных, были рассмотрены на страничке «Запросы на изменение записей в таблицах с помощью SQL».

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

Для извлечения информации, хранящейся в базе данных БД Access 2003 или 2007, можно применить запрос SELECT на выборку данных из таблиц.

Составим следующий SQL запрос (инструкцию SQL) на выборку, для этого выберем режим SQL, выполнив команду Вид/Режим SQL. Вводим с клавиатуры следующую инструкцию SQL:

SELECT *
FROM Студенты;

Эта инструкция состоит из двух предложений «SELECT *» и «FROM Студенты». Первое предложение содержит оператор SELECT и идентификатор * («идентификатор *» означает вывод всех столбцов таблицы). Второе предложение содержит оператор FROM и идентификатор «Студенты».

FROM — определяет таблицу «Студенты», которая содержат поля, указанные в предложении SELECT. Следует отметить, что в запросе на выборку всегда присутствуют два оператора: SELECT и FROM. В зависимости от условий отбора в запросе на выборку могут присутствовать и другие операторы. На рисунке 1 представлен скриншот запроса на выборку данных.


Рис. 1. SQL запрос SELECT на выборку данных

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

Сохраняем запрос с именем «Студенты-запрос1». В результате выполнения команды «Сохранить» в «Области переходов» появится объект — «Запросы: Студенты-запрос1».

После сохранения запроса на выборку необходимо выполнить этот запрос, щелкая на пиктограмме «Выполнить». Результаты выполнения команды «Выполнить» представлены на рис. 2.


Рис. 2. Выборка данных из всех столбцов таблицы Студенты

Скачать sql_training_st.mdb


www.lessons-tva.info

Режим SQL-запросов в Access, конструкции языка, страница 2

Проверьте работу запросов, если INNER JOIN заменить сначала на LEFT JOIN, а потом на RIGHT JOIN. Посмотрите на результат и в справку Access, напишите, что означают эти конструкции.

Прим. Вместо ручного вписывания, например, LEFT JOIN, можно в конструкторе запросов выделить соответствующую связь между таблицами и, щелкнув правой клавишей, выбрать в контекстном меню пункт Параметры объединения.

В предложениях SELECT, условия, накладываемые на отбираемые записи, указываются после ключевого слова WHERE. Например, запрос на выборку книг, выпущенных с 1997 по 2000 год:

SELECT Book.Author, Book.Name, Book.Publisher, Book.Year

FROM Book

WHERE Book.Year Between 1997 And 2000;

Условие может быть описано в виде требования на принадлежность множеству, например, условие на то, что книжки выпущены издательствами «Питер» и «Азбука»

WHERE Publisher IN (“Питер”, “Азбука”)

В разделе WHERE может быть несколько условий и логических связок NOT, OR, AND. Чтобы не возникало неоднозначностей, лучше каждое из условий заключать в скобки.

Задание. Не используя конструктор запросов, напишите запрос, который выведет в обратном алфавитном порядке названия книг, выпущенных после 1999 года, фамилия автора у которых начинается с буквы «Г» или название издательства заканчивается буквой «а».

Запросы могут содержать вычисляемые поля или константы. Тогда нужно в секции FROM указать их название (задать псевдоним), удобнее это сделать, написав ключевое слово AS, хотя допустимо и пропускать его. Например, мы выводим список авторов и в столбце TODAY сегодняшнюю дату:

SELECT DISTINCT Book.Author, Date() AS TODAY

FROM Book;

Запросы можно делать и с группировкой. Например, нам надо посчитать, сколько каждое издательство выпустило книг. Мы группируем книги по названию издательства и считаем, сколько книг в каждой группе (считаем идентификаторы). Подсчет производится с помощью функции COUNT(). Она относится к разряду агрегатных, также как и функция нахождения среднего, минимума, максимума, суммы (AVG, MIN, MAX, SUM – соответственно). Самостоятельно разберитесь, как подобный запрос построить в конструкторе. А ниже просто приведена его запись в режиме SQL:

vunivere.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *