Что такое sql запрос в access. Выборка данных в БД Access с помощью sql запросов. Записи без подчиненных

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

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

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

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

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

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

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

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

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

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

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

Кемерово 2001

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

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

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

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 .

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

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

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

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

рукции SELECT.

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

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

Таблица 1

Средний балл

Медведев

Воробьев

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

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

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

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

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

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

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

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

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

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

FROM Экзамены

WHERE Оценка = 2;

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

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

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

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

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

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

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

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

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

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

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

Х LIKE “P###”

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

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

PARAMETERS тексты;

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

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

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

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

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

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

FROM Экзамены

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

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

Предложение 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 условие должно располагаться после 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 Функция SELECT …;

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

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

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

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


Сравнение Microsoft Access SQL и ANSI SQL Microsoft Access SQL в основном отвечает стандарту ANSI-89 (уровень 1) некоторые средства ANSI SQL не используются в Microsoft Access SQL Microsoft Access SQL использует зарезервированные слова и средства, не поддерживаемые ANSI SQL В Access 2000 (MS Jet 4.0) внесены расширения, приближающие язык к стандарту ANSI SQL-92 - режим доступен только при использовании MS OLE DB Provider для Jet


Синтаксис команды SELECT (Microsoft Access) SELECT [ предикат ] { * | таблица.* | [ таблица.] поле_1 [, [ таблица.] поле_2 [,...]]} FROM выражение [,...] Предложение FROM SELECT список Полей FROM выражение Выражение - выражение, определяющее одну или несколько таблиц, откуда извлекаются данные. Это выражение может быть именем отдельной таблицы, именем сохраненного запроса или результатом операции INNER JOIN, LEFT JOIN или RIGHT JOIN. INNER JOIN,LEFT JOIN RIGHT JOIN.


Аргументы инструкции SELECT Предикат (ALL, DISTINCT, DISTINCTROW или TOP) - одно из условий отбора. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL (отбираются все записи, соответствующие условиям, заданным в инструкции SQL).инструкции SQL DISTINCT - исключает записи, которые содержат повторяющиеся значения в отобранных полях. DISTINCTROW - опускает данные, основанные на целиком повторяющихся записях, а не отдельных повторяющихся полях. Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу или все поля всех таблиц. TOP n - возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. SELECT ]] FROM таблица 5 самых многочисленных кафедр: SELECT TOP 5 сотрудник.[Код кафедры], Count(сотрудник.ФИО) AS число_сотрудников FROM сотрудник GROUP BY сотрудник.[Код кафедры] ORDER BY Count(сотрудник.ФИО) DESC;


Аргументы инструкции SELECT Таблица - имя таблицы, из которой должны быть отобраны записи. WITH OWNERACCESS OPTION - используется в многопользовательской среде с составе защищенной рабочей группы, для предоставления пользователю, работающему с запросом, разрешений, соответствующих разрешениям владельца запроса. поле_1, поле_2 - имена полей, из которых должны быть отобраны данные. Если включить несколько полей, они будут извлекаться в указанном порядке. Псевдоним_1, псевдоним_2 - имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице. Выражение -имена одной или нескольких таблиц, которые содержат отбираемые данные Внешняя БазаДанных - имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных. SELECT сотрудник.ФИО, [оклад]*0.5 AS Премия FROM сотрудник; SELECT Avg(сотрудник.оклад) AS Средний_оклад FROM сотрудник;


Совместная обработка нескольких таблиц SELECT сотрудник.ФИО, предмет.[наименование предмета краткое] FROM сотрудник INNER JOIN (предмет INNER JOIN [владение предметами] ON предмет.[Код предмета] = [владение предметами].[код дисциплины]) ON сотрудник.Код = [владение предметами].[код сотрудника];




Конструкция Between...And выражение 1 BETWEEN выражение 2 AND выражение 3 (в Microsoft Access SQL выражение 2 может быть больше, чем выражение 3, а в ANSI SQL – нет). SELECT сотрудник.ФИО, сотрудник.оклад FROM сотрудник WHERE (((сотрудник.оклад) Between 1000 And 2000)); Запрос: SELECT сотрудник.ФИО, сотрудник.оклад FROM сотрудник WHERE (((сотрудник.оклад) Between 2000 And 1000)); не выдает ошибки и дает тот же ответ SELECT сотрудник.ФИО, сотрудник.оклад FROM сотрудник WHERE (((сотрудник.оклад) 15000)); SELECT сотрудник.ФИО, сотрудник.оклад FROM сотрудник WHERE (((сотрудник.оклад) Not Between 1000 And 2000));


Символы шаблона Разные символы шаблона используются с предикатом Like. Символ шаблона MS Access SQL ANSI SQL один символ? _ (подчеркивание) группа символов * % одиночный знак, входящий в список_знаков [ список_знаков] отсутствует одиночный знак, не входящий в список_знаков [! список_знаков] отсутствует Две последние возможности - только для Access В Access 2000 в режиме ANSI SQL-92 возможно использование подстановочных знаков ANSI. В одном запросе смешивать знаки нельзя SELECT сотрудник.ФИО FROM сотрудник WHERE (((сотрудник.ФИО) Like "Д*"));


Предложение GROUP BY SELECT список Полей FROM таблица WHERE условие Отбора где группируемые Поля - имена полей (до 10), которые используются для группировки записей. Порядок имен полей в аргументе группируемые Поля определяет уровень группировки для каждого из этих полей. Используйте предложение WHERE для исключения записей из группировки, а предложение HAVING для применения фильтра к записям после группировки. HAVING При использовании предложения GROUP BY все поля в списке полей инструкции SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов статистической функции SQL. Кафедры, на которых работает более 5 сотрудников: SELECT сотр.[Код кафедры], Count(сотр.ФИО) AS [Число_сотрудников] FROM сотр GROUP BY сотр.[Код кафедры] HAVING (((Count(сотр.ФИО))>5)); 5));">




Вложенный запрос. Предикат Exists. SELECT сотр.фирма, Count(сотр.сотр) AS число_аттест_сотр FROM сотр WHERE (((Exists (SELECT DISTINCT сотр.фирма, сотр.сотр FROM сотр INNER JOIN экз ON сотр.сотр = экз.сотр))False)) GROUP BY сотр.фирма; False)) GROUP BY сотр.фирма;"> False)) GROUP BY сотр.фирма;"> False)) GROUP BY сотр.фирма;" title="Вложенный запрос. Предикат Exists. SELECT сотр.фирма, Count(сотр.сотр) AS число_аттест_сотр FROM сотр WHERE (((Exists (SELECT DISTINCT сотр.фирма, сотр.сотр FROM сотр INNER JOIN экз ON сотр.сотр = экз.сотр))False)) GROUP BY сотр.фирма;"> title="Вложенный запрос. Предикат Exists. SELECT сотр.фирма, Count(сотр.сотр) AS число_аттест_сотр FROM сотр WHERE (((Exists (SELECT DISTINCT сотр.фирма, сотр.сотр FROM сотр INNER JOIN экз ON сотр.сотр = экз.сотр))False)) GROUP BY сотр.фирма;">








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








Удаление записей. Запрос на SQL (сгенерированный) DELETE DISTINCTROW студент.ФИО FROM студент WHERE (((студент.ФИО)="Бурлак Г. Н."));


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


Удаление записей. Запрос на SQL Запрос: DELETE * FROM студент WHERE студент.ФИО="Бурлак Г. Н."; дает аналогичный результат.



















35





41



В СУБД 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 не имеет своих средства управления выполнением программы.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то