русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

WHERE EXISTS


Дата добавления: 2015-07-04; просмотров: 621; Нарушение авторских прав


(SELECT Оклад FROM Зарплата WHERE Оклад < Зп1.Оклад)

ORDER BY ФИО;

Для таблицы «Зарплата» из внешнего запроса определяется псевдоним

«Зп1», поскольку имя ее поля используется во вложенном запросе, в котором

фигурирует таблица с таким же именем и полями.

Для вложенных запросов, взаимодействующих с оператором EXISTS, нет

ограничений по количеству полей, поскольку сами извлекаемые данные опера-

тором никак не обрабатываются, его интересует лишь их принципиальное на-

личие или отсутствие.

 

Предложение UNION … SELECT. Иногда может возникнуть необходи-

мость объединить данные из нескольких источников, как показано на рис. 1.2.

 


 

Рис. 1.2. Объединение данных из двух источников

 

 

Для этой цели используется предложение UNION оператора SELECT (см.

выше общую форму оператора SELECT). В основном операторе SELECT вы-

полняется выборка, формирующая первый результирующий набор, затем, после

ключевого слова UNION помещается еще один оператор SELECT, форми-

рующий второй набор. При выполнении такого запроса оба набора объединя-

ются. Объединяться могут данные более чем двух источников. При этом пред-

ложение UNION … SELECT будет использовано несколько раз.

Количество и типы данных полей, формируемых каждым из запросов

SELECT, должны быть одинаковыми. Имена (псевдонимы) столбцов можно

задавать только в основном операторе SELECT. Если их задать в дополнитель-

ных операторах, Access их проигнорирует.

Пример 1.19. Есть две таблицы. Одна содержит данные о книгах, вторая – о

журналах:

 

 

Построим запрос, объединяющий данные из этих двух таблиц в результи-

рующий набор, содержащий поля «Заголовок», «Год» и «Тип».

SELECT НазваниеЖурнала + " / № " + STR(НомерЖурнала) AS Заголовок,



ГодЖурнала AS Год,

"Журнал" AS Тип

FROM Журнал

UNION SELECT НазваниеКниги + " / " + АвторКниги,

ГодИзданияКниги,

"Книга"

FROM Книга

ORDER BY Заголовок;


Результат работы запроса:

 

Предложение ORDER BY применяется не ко второму запросу, а к резуль-

тату объединения.

По умолчанию при слиянии двух наборов, Access объединяет строки, кото-

рые полностью совпадают. Если этого делать не нужно, следует использовать

ключевое слово ALL (… UNION ALL SELECT …).

 

Предложение INTO … Использование в операторе SELECT конструкции

вида

SELECT <поля> INTO <новая таблица>

позволяет поместить результат запроса в таблицу, которая будет для этого соз-

дана.

Пример 1.20.

SELECT ИДЖурнала, НазваниеЖурнала INTO ЖурналНовая

FROM Журнал;

Создается таблица с названием «ЖурналНовая» и в нее помещаются сле-

дующие данные:

 

Конструкция TRANSFORM … PIVOT. Данная конструкция предназначе-

на для создания перекрестных запросов (см. [1]). Общая форма:

TRANSFORM <выражение>

SELECT <предложение>

FROM <предложение>

GROUP BY <предложение>

PIVOT <имя поля>;

Конструкция TRANSFORM … PIVOT отсутствует в стандарте языка SQL.

Значения полей, перечисленных в предложении SELECT, образуют заго-

ловки строк таблицы. Эти же поля должны быть указаны в предложении

GROUP BY. Значения поля, указанного в предложении PIVOT, образуют заго-

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

TRANSFORM, размещаются в ячейках таблицы. Данное выражение должно

содержать групповую операцию.

 


Пример 1.21.

TRANSFORM Count(Подписка.Журнал) AS Количество

SELECT Список.Фамилия

FROM

(SELECT Клиент.КодКлиента, Клиент.Фамилия,

Журнал.КодЖурнала, Журнал.Название

FROM Журнал, Клиент

AS) Список

LEFT JOIN Подписка

ON (Список.КодЖурнала=Подписка.Журнал) AND

(Список.КодКлиента=Подписка.Клиент)

GROUP BY Список.Фамилия

PIVOT Список.Название;

Результат работы запроса:

 

Заголовки строк – фамилии клиентов, заголовки столбцов – названия жур-

налов, а содержимое таблицы – количество подписок данного клиента на дан-

ный журнал.

Этот запрос отличается от представленного в [1] при описании конструкто-

ра запросов тем, что в нем отображены все клиенты, независимо от того, под-

писаны ли они на какой-то журнал, и все журналы, независимо от того, подпи-

сан ли на них кто-то из клиентов.

Для получения такого результата был использован вложенный запрос, фор-

мирующий декартово произведение таблиц «Клиент» и «Журнал» (т.е. все воз-

можные их пары):

 

 


 

Результат вложенного запроса с помощью LEFT JOIN объединяется с дан-

ными из таблицы «Подписка», после чего выполняется группировка строк (по

фамилии и названию) и групповая операция Count().

Поскольку этот перекрестный запрос содержит вложенный запрос, его не-

возможно адекватно представить в режиме конструктора (вернее, конструктор

способен отобразить такой запрос, но не дает возможности его создать или от-

редактировать). Изменять его можно только в режиме SQL.

Для того чтобы все-таки реализовать то же самое, не прибегая к SQL, нуж-

но создать отдельный объект-запрос, выполняющий то же, что и вложенный за-

прос здесь, затем использовать его в качестве источника при построении нового

запроса.

 

Оператор INSERT INTO. Оператор добавляет новые записи в таблицу.

INSERT INTO имя_таблицы

[(имя_столбца[,имя_столбца …])]

VALUES (значение[, значение …])

Добавляет в таблицу строку, присваивая указанным полям перечисленные

значения.

INSERT INTO имя_таблицы

[(имя_столбца[,имя_столбца …])]

SELECT

Добавляет в таблицу строки, сформированные оператором SELECT.

Пример 1.22.



<== предыдущая лекция | следующая лекция ==>
Зарплата(Номер, ФИО, Оклад) | INSERT INTO


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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