Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
26.05.2015
Размер:
111.1 Кб
Скачать

SQL

Реализация в ACCESS

Сравнение 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

[AS псевдоним_1] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]} FROM выражение [, ...] [IN внешняяБазаДанных]

[WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ]

[WITH OWNERACCESS OPTION]

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

SELECT списокПолей FROM выражение [IN внешняяБазаДанных]

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

Аргументы инструкции SELECT

Предикат (ALL, DISTINCT, DISTINCTROW или TOP) - одно из условий отбора. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL (отбираются все записи, соответствующие условиям, заданным в инструкции SQL).

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

TOP n [PERCENT] - возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] 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 сотрудник.Код = [владение предметами].[код сотрудника];

Совместная обработка таблиц (левое соединение)

Список сотрудников, не имеющих детей:

SELECT DISTINCTROW сотрудник.ФИО FROM сотрудник LEFT JOIN дети ON сотрудник.Код = дети.Код_сотрудника WHERE (((дети.Код_сотрудника) Is Null));

Конструкция Between...And

выражение1 [NOT] 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 (((сотрудник.оклад)<1000 Or (сотрудник.оклад)>15000));

SELECT сотрудник.ФИО, сотрудник.оклад

FROM сотрудник

WHERE (((сотрудник.оклад) Not Between 1000 And 2000));

Символы шаблона

Разные символы шаблона используются с предикатом Like.

Символ шаблона

MS Access SQL

ANSI SQL

один символ

?

_ (подчеркивание)

группа символов

*

%

одиночный знак,

 

 

входящий в список_знаков

[список_знаков]

отсутствует

одиночный знак, не

 

 

входящий в список_знаков

[!список_знаков]

отсутствует

Две последние возможности - только для Access 2000.

В Access 2000 в режиме ANSI SQL-92 возможно использование подстановочных знаков ANSI.

В одном запросе смешивать знаки нельзя

SELECT сотрудник.ФИО

FROM сотрудник

WHERE (((сотрудник.ФИО) Like "Д*"));

Предложение GROUP BY

SELECT списокПолей FROM таблица WHERE условиеОтбора [GROUP BY группируемыеПоля]

где группируемыеПоля - имена полей (до 10), которые используются для группировки записей. Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей.

Используйте предложение WHERE для исключения записей из группировки, а предложение HAVING для применения фильтра к записям после группировки.

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

Кафедры, на которых работает более 5 сотрудников:

SELECT сотр.[Код кафедры], Count(сотр.ФИО) AS [Число_сотрудников] FROM сотр

GROUP BY сотр.[Код кафедры]

HAVING (((Count(сотр.ФИО))>5));

Задача

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

Соседние файлы в папке УСТАНОВ_ЛЕКЦИИ_БД