Access sql примеры. Как составлять SQL-запросы - подробные примеры

SQL - один из самых распространенных языков программирования, для создания и управления базой данных, а также для проведения разнообразных действий с самими данными.

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

Классификация команд языка SQL

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

    Команды для построения запросов.

    Команды встроенных процедур и функций.

    Команды триггеров и системных таблиц.

    Наборы комбинаций для работы с датой и строковыми переменными.

    Команды для работы с данными и таблицами.

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

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

Сферу использования SQL можно рассматривать с точки зрения офисного программного обеспечения, а именно MicrosoftAccess. Этот язык, а точнее, его разновидность — MySQL, позволяет администрировать базы данных в сети Internet. Даже среда разработки Oracle использует в основе своих запросов команды SQL.

Использование SQL в MicrosoftAccess

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

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

Рассмотрим конкретный пример:

SELECT Pe_SurName

WHERE Pe_Name = "Мэри";

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

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

Использование команд SQL в Oracle

Oracle - это, наверное, единственный серьезный конкурент Microsoft SQL Server. Именно данная среда разработки и управления постоянно приводит к совершенствованию функций программного продукта компании Microsoft, так как конкуренция - это двигатель прогресса. Несмотря на постоянное соперничество, команды SQL Oracle повторяют SQL. Стоит отметить, что хоть Oracle и считается практически полной копией SQL, логика этой системы и языка в целом считается проще.

Система Oracle при использовании определенного набора команд не имеет такой сложной структуры. Если рассматривать возможности данных сред разработки баз данных, Oracle не имеет сложной структуры вложенных запросов.

Такая разница позволяет во много раз ускорить работу с данными, но, в противовес, ведет к нерациональному использованию памяти, в некоторых отдельных случаях. Структура Oracle в основном построена на временных таблицах и их использовании. Как пример: команды SQL в данной системе строятся по аналогии со стандартами самого языка SQL, хотя незначительно и отличаются от него.

SELECTCONCAT(CONCAT(CONCAT(‘Сотрудник ‘, sname), CONCAT(SUBSTR(fname, 0, 1), SUBSTR(otch, 0, 1))), CONCAT(‘принятнаработу ‘, acceptdate)) FROM employees WHERE acceptdate > to_date(‘01.01.80′,’dd.mm.yyyy’);

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

Использование SQL в сети Internet

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

За хранение информации в Интернете, как и в других местах, отвечают непосредственно базы данных, а сайты являются системами управления. Как правило, сайты и их программный код организованы на разных языках программирования, но в основе баз данных лежит одна из разновидностей SQL, а именно язык создания баз данных, ориентированный под веб-интерфейсы MySQL.

Синтаксис и основной набор команд этого языка полностью копируют привычный всем SQL, но с некоторыми своими дополнениями, которые и дают ему отличие от Microsoft tSQL Server.

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

$link = mysqli_connect("localhost", "root", "", "tester");

if (!$link) die("Error");

$query = "create table users(

login VARCHAR(20),

password VARCHAR(20)

if (mysqli_query($link, $query)) echo "Таблица создана.";

elseecho "Таблица не создана: ".mysqli_error();

mysqli_close($link);

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

Синтаксис изменен под Вэб, но в основу положены команды MicrosoftSQLServer.

Построение запросов MicrosoftSQLServer

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

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

Select * from Person

Where P_BerthDay >= ‘01/01/2016’ and P_BerthDay<= ‘03/01/2016’

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

SelectP_Name - имя

P_SurName - фамилия

P_Patronimic - отчество

Where P_BerthDay >= ‘01/01/2016’ and P_BerthDay<= ‘03/01/2016’

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

Основные команды SQL для изменения данных

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

    Insert (пер. Вставить).

    Update (пер. Обновление).

    Delete (пер. Удалить).

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

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

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

Команда Insert

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

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

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

Insert into person

Select ‘Григорьев’,’Виталий’,’Петрович’,’01/01/1988’

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

Insertintoperson(P_Name, P_SurName ,P_BerthDay)

Values (‘Дэвид’, ‘Гук’,’02/11/1986’)

Такая команда заполнит только указанные ячейки, а все остальные будут иметь значение null.

Команда для изменения данных

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

Команда Update SQL имеет несложный синтаксис. Для правильного использования необходимо указать, какие данные, в какой колонке и в какой записи стоит изменить. Далее составить скрипт и выполнить его. Рассмотрим пример. Нужно изменить дату рождения Дэвида Гука, который внесен в таблицу сотрудников под номером 5.

Set P_BerthDay = ’02/10/1986’ where P_ID = 5

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

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

Команды для использования встроенных процедур и функций

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

Если судить логически, то нужно скопировать текст выборки и вставить в нужное место, но можно обойтись и более простым решением. Рассмотрим пример, когда на рабочем интерфейсе выведена кнопка для печати отчета, скажем в Excel. Эта операция будет выполняться по мере необходимости. Для таких целей служат встроенные хранимые процедуры. Команды в данном случае, заключаются в процедуру и вызываются с помощью команды SQLExec.

Предположим, что была создана процедура для вывода даты рождения сотрудников с ранее описанной таблицы Person. В таком случае нет необходимости писать весь запрос. Для получения необходимой информации достаточно выполнить команду Exec [имя процедуры] и передать необходимые для выборки параметры. Как пример можно рассмотреть механизм создания процедуры такого характера:

CREATEPROCEDUREPrintPerson

@DB smalldatetime

@DE smalldatetime

SELECT * from Person

FROM HumanResources.vEmployeeDepartmentHistory

WHERE P_BerthDay >= @DB and P_BerthDay <= @DE

ANDEndDateISNULL;

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

Организация целостности данных. Триггеры

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

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

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

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

Первым делом нужно описать служебную команду для создания триггеров:

Указываем, для какой операции с данными (в нашем случае это операция изменения данных).

Следующим шагом будет указание таблиц и переменных:

declare @ID int. @Date smalldatetime @nID int. @nDatesmalldatetime

DEclare cursor C1 for select P_ID, P_BerthDay from Inserted

DEclare cursor C2 for select P_ID, P_BerthDay from deleted

Задаем шаги выбора данных. После, в теле курсоров прописываем условие и реакцию на него:

if @ID = @nID and @nDate = "01/01/2016"

sMasseges "Выполнить операцию невозможно. Дата не подходит"

Стоит упомянуть о том, что триггер можно не только создать, но и отключить на время. Такую манипуляцию может провести только программист, выполнив команды SQL SERVER:

altertablePERSONdisabletriggerall - для отключения всех триггеров, созданных для данной таблицы, и, соответственно, altertablePERSONenabletriggerall - для их включения.

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

Вывод

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

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

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

Создание таблицы Power Design с помощью DDL

Все действия по определению базы данных, которые можно выполнять с помощью RAD-инструмента, такого как Access, можно также выполнять и с помощью SQL. В этом случае вместо щелчков мышью на элементах меню выполняется ввод команд с помощью клавиатуры. Те, кто предпочитает манипулировать графическими объектами, считают, что RAD-инструменты являются легкими и естественными для понимания и изучения. Другие же, кому больше нравится складывать слова в предложения, имеющие определенную логику, считают, что более легкими и естественными являются все-таки команды SQL. Так как некоторые вещи легко представить, используя объектную парадигму, а с другими легко справляться с помощью SQL, то полезно хорошо знать оба метода.

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

Использование языка SQL с приложением Microsoft Access

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

  1. Откройте базу данных, а затем выберите из списка Объекты опцию Запросы.
  2. В области задач, расположенной в правой части окна, выберите опцию Создание запроса в режиме конструктора. Отобразится диалоговое окно Добавить таблицу.
  3. Выберите любую из таблиц, щелкните на кнопках Добавить и Закрыть. Не обращайте внимание на курсор, который мигает в только что созданном окне Запрос.
  4. В главном меню Access выберите команду Вид Режим SQL. Отобразится окно редактора со стартовым оператором языка SQL SELECT.
  5. Удалите оператор SELECT, а затем введите необходимый оператор SQL.
  6. Закончив работу, щелкните на пиктограмме Сохранить. Access предложит ввести имя для только что созданного запроса.
  7. Введите имя запроса и щелкните на кнопке ОК.

Только что созданная команда будет сохранена и выполнена позже как запрос. К сожалению, Access не выполняет весь диапазон команд SQL. К примеру, оно не выполняет команду CREATE TABLE. Однако после создания таблицы можно выполнять практически любое необходимое преобразование с находящимися в ней данными.

Создание таблицы

При работе с полнофункциональной СУБД, например, такой, как Microsoft SQL Server, Oracle 9i или IBM DB2, в процессе создания таблицы с помощью SQL необходимо вводить ту же информацию, что и при создании таблицы с помощью какого-либо RAD-инструмента. Разница здесь в том, что RAD-инструмент помогает это делать, предоставив в ваше распоряжение диалоговое окно создания таблицы (или какую-либо подобную структуру) и не позволяя вводить неправильные имена полей, типы или размеры. SQL столько внимания вам не уделит. Работая с SQL, следует точно знать с самого начала, что именно надо делать. Необходимо ввести целый оператор CREATE TABLE, прежде чем SQL обратит на него внимание, не говоря уже о том, чтобы сообщить, нет ли в операторе каких-либо ошибок.

Следующая команда создает таблицу, идентичную созданной ранее:

CREATE TABLE PowerSQL
ProposalNumber SMALL INT
FirstName CHAR (15),
LastName CHAR (20),
Address CHAR (30),
City CHAR (25),
StateProvince CHAR (2),
PostalCode CHAR (10),
Country CHAR (30),
Phone CHAR (14),
HowKnown CHAR (30),
Proposal CHAR (50),
BusinOrCharity CHAR (1);

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

Помни:
Любые усилия, вложенные в изучение SQL, будут оправдываться в течение долгого времени, потому что быстро сходить со сцены этот язык не собирается. А усилия, вложенные в то, чтобы стать экспертом в среде разработки, вероятно, принесут меньшую отдачу. И каким бы прекрасным ни был последний RAD-инструмент, будьте уверены - в течение двух-трех лет его заменит более совершенная технология. Замечательно, если за это время вы сможете возместить усилия, вложенные в изучение данного инструмента! Если сможете, то пользуйтесь им. А если не сможете, то будет мудрее придерживаться старого и испытанного средства. Знание 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, может выглядеть следующим образом:

SELECT Last_Name
FROM Contacts
WHERE First_Name = "Mary";

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

Инструкции SELECT

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

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

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

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

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

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

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

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

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

Описание

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

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

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

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

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

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

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

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

Термины SQL

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

Термин SQL

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

Определение

Пример

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

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

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

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

оператор

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

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

константа

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

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

выражение

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

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

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

Основные предложения 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.

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

SELECT , Company

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

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

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

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

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

FROM Contacts

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

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

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

WHERE City="Seattle"

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

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

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

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

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

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

ORDER BY Company DESC,

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

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

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

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

Возможность использования той или иной агрегатной функции зависит от типа данных в поле и нужного выражения. Дополнительные сведения о доступных агрегатных функциях см. в статье Статистические функции 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(), Company

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

HAVING COUNT()>1

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

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

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

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

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

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

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

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

SELECT field_1
FROM table_1
UNION
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 см. в статье

Лабораторная работа №1

SQL : ИЗВЛЕЧЕНИЕ ДАННЫХ - команда SELECT

Цель работы:

  • познакомиться с SQL-инструкциями;
  • научиться в Access создавать простейшие SQL-запросы с помощью команды SELECT;

· использование операторов IN, BETWEEN, LIKE, IS NULL.

Задание №1. Создать запрос на выборку в режиме SQL всех значений полей ИМЯ и ФАМИЛИЯ из таблицы СТУДЕНТЫ.

SELECT ИМЯ, ФАМИЛИЯ

FROM СТУДЕНТЫ;

Задание №2 . Создать запрос на выборку в режиме SQL всех столбцов таблицы СТУДЕНТЫ.

SELECT *

FROM СТУДЕНТЫ;


Задание №3. Создать запрос на выборку в режиме SQL названий городов, где проживают студенты, сведения о которых находятся в таблице ЛИЧНЫЕ ДАННЫЕ.

SELECT DISTINCT ГОРОД

FROM [ЛИЧНЫЕ ДАННЫЕ];

Задание №4. Создать запрос на выборку в режиме SQL, выполняющий выборку имен всех студентов с фамилией Иванов, сведения о которых находятся в таблице СТУДЕНТЫ.

SELECT ФАМИЛИЯ, ИМЯ

FROM СТУДЕНТЫ

WHERE ФАМИЛИЯ="Иванов";

Задание №5 . Создать запрос на выборку в режиме SQL для получения имен и фамилий студентов, обучающихся в группе УИТ-22 на бюджетной форме обучения.

SELECT ФАМИЛИЯ, ИМЯ

FROM СТУДЕНТЫ

WHERE ГРУППА="УИТ-22" AND БЮДЖЕТ=true;

Задание №6 . Создать запрос в режиме SQL. на выборку из таблицы СДАЧА ЭКЗАМЕНОВ сведении о студентах, имеющих оценки только 4 и 5.

SELECT *

FROM [ СДАЧА ЭКЗАМЕНОВ ]

WHERE ОЦЕНКА IN (4,5);

Задание №7. Coздать зanpoc и режиме SQL на выборку сведений о студентах, имеющих экзаменационную оценку 3 по предмету ИОСУ.

SELECT *

FROM [ СДАЧА ЭКЗАМЕНОВ ]

WHERE ПРЕДМЕТ =" ИОСУ " And ОЦЕНКА Not In (4,5);

Задание №8. Создать запрос в режиме SQL на выборку записей о предметах, часы которых находятся в пределах между 100 и 130.

SELECT *

FROM ПРЕДМЕТЫ

WHERE ЧАСЫ BETWEEN 100 AND 130;


Задание №9. Создать запрос в режиме SQL на выборку из таблицы СТУДЕНТЫ сведений о студентах, фамилии которых начинаются, например, на букву «С».

SELECT *

FROM СТУДЕНТЫ

WHERE ФАМИЛИЯ LIKE " С *";

Вывод: В ходе лабораторной работы познакомились с SQL-инструкциями, научились в Access создавать простейшие SQL-запросы с помощью команды SELECT используя операторы IN, BETWEEN, LIKE.

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

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

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

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

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

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

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



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

Описание и использование курсора в языке SQL выполняется следующим образом. В описательной части программы выполняют связывание переменной типа курсор (CURSOR) с оператором SQL (обычно с оператором SELECT). В выполняемой части программы производится открытие курсора (OPEN <имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>...), сопровождаемое соответствующей обработкой, и, наконец, закрытие курсора (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. Эта макрокоманда делает возможным выполнение действий в макросе без предварительного сохранения запросов. С помощью макрокоманды можно выполнять и сохраненные запросы.

Запросами на изменение являются инструкции 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. С его помощью можно открыть запрос в режиме таблицы, Конструктора или просмотра. При этом устанавливается один из следующих режимов работы с данными: добавление, изменение или только чтение.

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