Файл: Е.А. Бессонов Access Запросы на языке SQL.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.05.2024

Просмотров: 40

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

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

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 эквивалентно определению свойства “Заголовки столбцов” в бланке свойств конструктора запросов.