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

9 . Формирование запросов средствами sql. Вложенные запросы. Группировка данных. Соединение таблиц. Объединение запросов. Примеры.

запрос на выборку содержимого одной таблицы имеет видSELECT [DISTINCT] описание_результата FROM источник [WHERE условие_выбора];

источника - таблица или представление. Условие выбора - выражение логического типа; его значение проверяется для каждой строки источника, результат--список, каждому элементу которого соответствует один столбец.

Пример: Получить среднюю зарплату, начисленную в январе 2003 года.SELECT AVG(salvalue) FROM salary WHERE month = 1 AND year = 2003;

Вложенные подзапросы

Такой … возможность позволяет объединять информацию из различных таблиц

Пример.Найти фамилии работников, которым не была начислена зарплата в январе 2003 года.

SELECT empname FROM emp WHERE NOT EXISTS(

SELECT * FROM salary

WHERE emp.empno = salary.empno AND month = 1 AND year = 2003);

Подзапросы можно указывать не только во фразе WHERE, но и в других конструкциях оператора SELECT

. Агрегирующие функции, которые можно (и должно) указывать при формировании выходных столбцов, работают не для всего запроса, а для одной группы.

Соединение таблиц

В операторе SELECT после ключевого слова FROM можно указать не одну, а несколько разделенных запятыми имен источников. Если при этом в условии WHERE не указать правила соединения этих таблиц, то мы получим полное соединение , или декартово произведение таблиц. Чаще всего используются следующие правила соединения:

1.Соединяются строки таблиц с одинаковыми значениями в паре атрибутов, где каждый элемент пары берется из своей таблицы (т.н. внутреннее соединение). пример такого соединения: таблица1 [INNER] JOIN таблица2 ON условиесоединеия

Найти имена тех работников, начисленная зарплата которых за ноябрь 2002 года превысила 1000.

SELECT empname

FROM emp JOIN salary ON emp.empno = salary.empno

WHERE month = 11 AND year = 2002 AND salvalue>1000;

2. Соединяются строки таблиц с одинаковыми значениями в паре атрибутов, и кроме того, добавляются строки первой таблицы, для которых не найдено соответствующих значений во второй таблице. Такое соединение называется левым внешним соединением, и для него используется специальное обозначение:

таблица1 LEFT OUTER JOIN таблица2 ON условиесоединеия

3. По аналогии с левым можно определить правое внешнее соединение. Перепишем предыдущий пример с использованием его возможностей:

SELECT empname, NVL(enddate, SYSDATE)-startdate AS stage

FROM career RIGHT OUTER JOIN emp ON career.empno = emp.empno;

Упорядочивание выходных строк

Мы можем выполнить сортировку строк выходного запроса, указав в нем фразу

ORDER BY {имястолбца | номерстолбца [ASC | DESC] }…

Объединение запросов

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

запрос {UNION [ALL] запрос }…

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

Для объединения запросов можно задавать фразу ORDER BY, INTERSECT (формальное пересечение с исключением повторяющихся строк) и MINUS (результирующее множество содержит все строки, входящие в состав первого запроса: но отсутствующие во втором). Формат этих операторов совпадает с форматом оператора UNION.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]