Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

WHERE

FROM

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

Синтаксис:

SELECT списокПолей

FROM выражение [IN внешняяБазаДанных]

 

Аргументы инструкции SELECT, содержащей предложение FROM:

ВЫРАЖЕНИЕ – выражение, определяющее одну или несколько таблиц, откуда извлекаются данные. Это выражение может быть именем отдельной таблицы, именем сохраненного запроса или результатом операции INNER JOIN, LEFT JOIN, или RIGHT JOIN.

внешняяБазаДанных – Полное имя внешней базы данных, содержащей таблицы, указанные в аргументе выражение.

Предложение FROM должно присутствовать в каждой инструкции SELECT. Порядок следования имен таблиц в аргументе выражение не существенен. Следующий пример показывает, как отобрать данные из таблицы "Сотрудники":

SELECT Фамилия, Имя

FROM Сотрудники;

 

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

Синтаксис:

SELECT списокПолей

FROM выражение

WHERE условиеОтбора

 

Инструкция SELECT, содержащая предложение WHERE, состоит из трех частей:

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

Ядро базы данных Microsoft Jet отбирает записи, соответствующие условиям, перечисленным в предложении WHERE. Если не задавать предложение WHERE, запрос возвращает все строки таблицы. Если в запросе определить несколько таблиц и не включить предложение WHERE или JOIN, запрос будет возвращать скалярное произведение таблиц.

Предложение WHERE не является обязательным, однако, если оно присутствует, то должно следовать после предложения FROM. Например, можно отобрать всех сотрудников отдела продаж (WHERE Отдел = 'Продажи') или всех клиентов в возрасте от 18 до 30 лет (WHERE Возраст Between 18 And 30).

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

SELECT Фамилия, Оклад

FROM Сотрудники

WHERE Оклад > 810000;

 

Предложение WHERE может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.

 

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

SELECT [Любимый ресторан]

 

При указании аргумента условиеОтбора литералы даты символы дат должны вводиться в американском формате, даже если используется неамериканская версия ядра базы данных Jet. Например, дата 10 мая 1996 года записывается в России как 10.05.94, а в США как 5/10/94. Обязательно заключите даты в символы "решетки" (#), как показано в следующих примерах.

Для отбора записей с этой датой в российской базе данных необходимо использовать следующую инструкцию SQL:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = #5/10/96#;

 

Кроме того, можно применять функцию DateValue, которая поддерживает международные стандарты, заданные в Microsoft Windows. Например, для отбора записей в американской базе данных можно использовать следующий текст программы:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('5/10/96');

 

Для российской базы данных текст программы будет выглядеть так:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('10.5.96');

Объединяет записи с одинаковыми значениями в указанном списке полей в одну запись. Если инструкция SELECT содержит статистическую функцию SQL, например, Sum или Count, то для каждой записи будет вычислено итоговое значение.

Синтаксис:

SELECT списокПолей

FROM таблица

WHERE условиеОтбора

[GROUP BY группируемыеПоля]

 

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

Значения Null, которые находятся в полях, заданных в предложении GROUP BY, группируются и не опускаются. Однако статистические функции SQL не обрабатывают значения Null.

Если поле, включенное в предложение GROUP BY, не является полем типа Memo или объекта ActiveX, оно может содержать ссылку на любое поле, перечисленное в предложении FROM, даже если это поле не включено в инструкцию SELECT, при условии, что инструкция SELECT содержит по крайней мере одну статистическую функцию SQL. Ядро базы данных Jet не поддерживает группировку полей МЕМО или объекта ActiveX.

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

SELECT Сотрудники.Отдел, Sum(Сотрудники.Зарплата) AS Sum_Зарплата

FROM Сотрудники

GROUP BY Сотрудники.Отдел;

 

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

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

Синтаксис:

SELECT списокПолей

FROM таблица

WHERE условиеОтбора

GROUP BY группируемыеПоля

[HAVING условиеГруппировки]

Предложение HAVING является необязательным. Предложение HAVING похоже на предложение WHERE, которое определяет, какие записи должны быть отобраны. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING указывает, какие из полученных записей должны быть отобраны:

SELECT Сотрудники.Отдел, Sum(Сотрудники.Зарплата) AS Sum_Зарплата

FROM Сотрудники

GROUP BY Сотрудники.Отдел

HAVING (((Sum(Сотрудники.Зарплата))>3000));

 

Предложение HAVING может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.

 

 

Объединение таблиц

Существует 2 способа объединения таблиц:

 

Объединение записей из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения. Оно осуществляется с помощью 3 операторов: INNER JOIN, LEFT JOIN, RIGHT JOIN.
Синтаксис:
FROM таблица_1 INNER JOIN таблица_2 ON таблица_1.поле_1 оператор таблица_2.поле_2

ТАБЛИЦА_1, ТАБЛИЦА_2 – имена таблиц, записи которых подлежат объединению.

ПОЛЕ_1, ПОЛЕ_2 – Имена объединяемых полей. Если эти поля не являются числовыми, то должны иметь одинаковый тип данных и содержать данные одного рода, однако, поля могут иметь разные имена.

ОПЕРАТОР – любой оператор сравнения: "=," "<," ">," "<=," ">=," или "<>".

Операцию INNER JOIN можно использовать в любом предложении FROM. Это самые обычные типы связывания. Они объединяют записи двух таблиц, если связующие поля обеих таблиц содержат одинаковые значения. Операцию INNER JOIN можно использовать с таблицами "Начальники" и "Сотрудники" для отбора всех сотрудников каждого отдела.

SELECT Начальники.Фамилия, Начальники.Отдел, Сотрудники.Фамилия, Сотрудники.Отдел

FROM [Начальники] INNER JOIN Сотрудники ON Начальники.Отдел = Сотрудники.Отдел;

 

Попытка объединить поля Memo или объекта ActiveX приведет к возникновению ошибки. Допускается объединение двух числовых полей подобных типов, например, поле счетчика и поля с типом "Длинное целое". Однако нельзя объединить типы полей "С плавающей точкой (4 байт)" и "С плавающей точкой (8 байт)".

SELECT поля

FROM таблица_1 INNER JOIN таблица_2

ON таблица_1.поле_1 оператор таблица_2.поле_1 AND

ON таблица_1.поле_2 оператор таблица_2.поле_2) OR

ON таблица_1.поле_3 оператор таблица_2.поле_3)];

 

Операции JOIN могут быть вложенными; в таком случае используйте следующий синтаксис:

SELECT поля

FROM таблица_1 INNER JOIN

(таблица_2 INNER JOIN [(]таблица_3

[INNER JOIN [(]таблица_X [INNER JOIN...)]

ON таблица_3.поле_3 оператор таблица_X.поле_X)]

ON таблица_2.поле_2 оператор таблица_3.поле_3)

ON таблица_1.поле_1 оператор таблица_2.поле_2;

 

Операции LEFT JOIN или RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в LEFT JOIN или RIGHT JOIN.

Для отбора же всех начальников (в том числе тех, у которых нет ни одного сотрудника) или всех сотрудников (в том числе тех, которых нет начальника) следует использовать операцию LEFT JOIN или RIGHT JOIN, которая создает внешнее объединение.

Синтаксис:

FROM таблица_1 [ LEFT | RIGHT ] JOIN таблица_2

ON таблица_1.поле_1 оператор таблица_2.поле_2

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

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

 

2-й способ объединения таблиц заключается в простом последовательном присоединении к записям первой таблицы записей второй таблицы. Такое объединение осуществляется с помощью оператора UNION. Он создает запрос на объединение, который объединяет результаты нескольких независимых запросов или таблиц.

Синтаксис:

[TABLE] запрос_1 UNION [ALL] [TABLE] запрос_2 [UNION [ALL] [TABLE] запрос_n [... ]]

Ниже перечислены аргументы операции UNION:

ЗАПРОС_1 – инструкция SELECT, имя сохраненного запроса или имя сохраненной таблицы, перед которым стоит зарезервированное слово TABLE.

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

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

В каждом аргументе запрос допускается использование предложения GROUP BY или HAVING для группировки возвращаемых данных. В конец последнего аргумента запрос можно включить предложение ORDER BY, чтобы отсортировать возвращенные данные. В Microsoft Access аргументами операции UNION (запрос1, запрос2,...запросN) могут служить инструкция SELECT, имя сохраненного запроса Microsoft Access или имя сохраненной таблицы Microsoft Access с предшествующим зарезервированным словом TABLE.

<== предыдущая лекция | следующая лекция ==>
Distinct | Перекрёстные запросы
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 770; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.04 сек.