Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db-shpora.doc
Скачиваний:
14
Добавлен:
08.11.2018
Размер:
1.44 Mб
Скачать

Сортировка результатов

Сортировка результатов осуществляется с помощью команды ORDER BY.

По умолчанию сортировка в SQL производится в порядке возрастания. Для явного указания порядка сортировки можно использовать ключевые слова ASC (по возрастанию) и DESC (по убыванию).

Листинг 14

SELECT Имя. Отдел

FROM СОТРУДНИК

ORDER BY Отдел DESC, Имя ASC;

Встроенные функции sql

В SQL имеется пять встроенных функций: COUNT, SUM, AVG, MАХ и MIN. Они выполняют различные действия над результатами оператора SELECT. Функция COUNT работает вне зависимости от типа данных столбца, а функции SUM, AVG, MAX и MIN оперируют только числовыми столбцами (Integer, Numeric и т. д.).

Группировать результаты можно, используя предложение GROUP BY.

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

Листинг 15

SELECT Название, SUM(МакТрудозатраты)

FROM ПРОЕКТ

WHERE ИдПроекта<1500;

Зато допустим оператор:

Для отбора строк в группе по определенному критерию служит конструкция HAVING. Например, если нас интересуют только те группы, в которых имеется более одной записи:

Листинг 17

SELECT Отдел, COUNT(*)

FROM СОТРУДНИК

GROUP BY Отдел

HAVING COUNT(*) > 1;

Вместе с ключевым словом GROUP BY можно использовать и предложение WHERE. Однако здесь имеет место неоднозначность. Если условие в предложении WHERE применяется до формирования групп, результат будет иным, чем когда это условие применяется к уже сформированным группам. Для устранения этой неоднозначности стандарт SQL устанавливает, что в случаях, когда предложения WHERE и GROUP BY используются одновременно, первым должно применяться условие, записанное в предложении WHERE. Рассмотрим, например, следующий оператор:

Листинг 18

SELECT Отдел, COUNT(*)

FROM СОТРУДНИК

WHERE ТабельныйНоМер < 600

GROUP BY Отдел

HAVING COUNT(*) > 1;

  1. Основы языка sql: чтение данных из нескольких таблиц с применением вложенных запросов

Чтение данных из нескольких таблиц с применением вложенных запросов. Чтение данных из нескольких таблиц может осуществляться посредством вложенных запросов или соединений. Если все данные, которые должны войти в результат, содержатся в одной таблице, то можно использовать вложенные запросы. Если результаты принадлежат двум или более таблицам, необходи­мо использовать операцию соединения.

Пример:

Требуется узнать имена сотрудников, проработавших в рамках любого из своих назначений более 115 часов. Имена сотрудников хранятся в таблице СОТРУДНИК, а количество отработанных ими часов – в таблице НАЗНАЧЕНИЕ.

SELECT DISTINCT Имя FROM СОТРУДНИК WHERE ТабельныйНомер IN (SELECT НомерСотрудника FROM НАЗНАЧЕНИЕ WHERE ФактТрудозатраты > 115)

Вложенность запросов может быть расширена до трех, четырех и более уровней.

  1. Основы языка sql: чтение данных из нескольких таблиц с помощью операции соединения

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

Основная идея здесь — создать новое отношение, связав между собой содержимое двух или более исходных отношений.

SELECT Имя, ФактТрудозатраты FROM СОТРУДНИК, НАЗНАЧЕНИЕ WHERE ТабельныйНомер = НомерСотрудника;

Смысл этого оператора заключается в том, что создается новая таблица с двумя столбцами, Имя и ФактТрудозатраты. Эти столбцы берутся соответственно из таблиц СОТРУДНИК и НАЗНАЧЕНИЕ при условии, что столбец ТабельныйНомер в таблице СОТРУДНИК равен столбцу НомерСотрудника в таблице НАЗНАЧЕНИЕ.

В стандарте SQL-92 введен альтернативный синтаксис соединения, ставший весьма популярным, поскольку его легче интерпретировать. Здесь вместо WHERE используются ключевые слова JOIN и ON:

SELECT Имя, ФактТрудозатраты FROM СОТРУДНИК JOIN НАЗНАЧЕНИЕ ON СОТРУДНИК.ТабельныйНомер = НАЗНАЧЕНИЕ.НомерСотрудника;

Внешние соединения. Строки, не удовлетворяющие условиям соединения, не будут включены в результат. Чтобы все строки таблицы вошли в результат соединения, можно использовать операцию внешнего соединения.

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

Правое внешнее соединение (right outer join) функционирует аналогичным образом, только в результат включаются все строки таблицы, находящейся справа от ключевого слова JOIN.

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