Контрольная работа: SELECT

Если необходимо выбрать из нее не все записи, а только те, которые удовлетворяют некоторым условиям. Например, только тех из них, которые размещены в Харькове. Для этого используется инструкция WHERE. Условий может быть несколько, тогда они объединяются логическими операциями И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR). Для инвертирования части или всего условия (т.е. отбора тех записей, которые данному условию не удовлетворяют) используется операция NOT.

Общий синтаксис простого запроса с условием таков:

SELECT Список_полей FROM Список_Таблиц

WHERE (условие1) лог_оп (условие2) лог_оп (условие3);

Пример:

SELECT * FROM Заказчики WHERE (Город=’Харьков’);

SELECT * FROM Заказчики WHERE (Город=’Харьков’) AND ( К_во_заказов > 5);

2.3. Объединение нескольких источников данных

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

Допустим, к нашей базе данных присоединена внешняя таблица «Реестр», в которой хранятся сведения обо всех субъектах предпринимательской деятельности в Украине. А нам надо просмотреть все сведения только о наших заказчиках. Опять-таки, всех. Для таких случаях существует инструкция JOIN – объединение таблиц по одному полю. Различают внутренние (INNER) и внешние (LEFT, RIGHT) объединения. Мы рассмотрим лишь внутренние – это наиболее жизненная ситуация.

Общий вид объединения таков:

SELECT (список_полей_главной_таблицы) FROM (Главная_таблица) <Вид_объединения> JOIN (Подчиненная_таблица) ON ( Главная.Поле1 = Подчиненная.Поле1)

Итак, таблица «Реестр» имеет следующую структуру:

Название Код_ЕДРПОУ Расч_счет ИНН

Теперь присоединим ее к таблице «Заказчики»:

SELECT * FROM Заказчики INNER JOIN Реестр ON (Заказчики.Название = Реестр.Название)

В результате мы будем иметь источник записей с количеством записей, равным размеру таблицы «Заказчики», и содержащий все поля таблиц «Заказчики» и «Реестр». Так же, как и в конструкции WHERE, объединение может быть по нескольким полям, с использованием различных условий, однако следует иметь в виду, что использование нестандартных (неподдерживаемых конструктором запросов) действий может привести к непредсказуемым результатам.

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

SELECT * FROM Заказчики INNER JOIN Реестр ON (Заказчики.Название = Реестр.Название)

WHERE (Город=’Харьков’) AND ( К_во_заказов > 5);

будет воспринят MSAccess вполне нормально.

Возможна и другая ситуация.

Допустим, у нас есть таблица «Сотрудники_офиса» следующей структуры:

Таб_номер ФИО Телефон

Также есть таблица «Сотрудники_филиала» с точно такой же структурой. Необходимо в каком-нибудь итоговом отчете представить эти таблицы вместе. Для этого используется конструкция UNION. При ее использовании можно склеить сколько угодно таблиц. Точнее, таблицы необязательно должны иметь одинаковую структуру. Необходимо лишь, чтобы из всех таблиц выбиралось одинаковое количество полей, и чтобы эти поля были полностью эквивалентны.

Общая структура такого запроса такова:

SELECT Таблица1.Поле1, Таблица1.Поле N FROM Таблица1

UNION SELECT Таблица2.Поле1, Таблица2.Поле N FROM Таблица2

UNION SELECT Таблица K .Поле1,Таблица K .Поле N FROM Таблица K ;

В нашем случае это будет выглядеть так:

SELECT Сотрудники_офиса.* FROM Сотрудники_офиса

К-во Просмотров: 408
Бесплатно скачать Контрольная работа: SELECT