Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Специальные операторы в условиях

Поиск

Для формирования запросов применяются специальные операторы IN, BETWEEN, LIKE, IS NULL.

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

Пример. Выбрать из таблицы Sport всех студентов, которые получают именные стипендии в сумме 15 000 и 20 000 руб.:

SELECT * FROM Sport WHERE stip IN (15 000, 20 000);

Оператор BETWEEN по своим функциям похож на оператор IN. В нем задается граница для начального и конечного значений множества, а между ними расположено ключевое слово AND.

Пример. Выбрать из таблицы Spisok всех студентов, фамилии которых начинаются от буквы Е до буквы М:

SELECT * FROM Spisok WHERE grupa BETWEEN 'E' AND 'M';

Оператор BETWEEN чувствителен к порядку записей в таблице (они должны быть рассортированными).

Оператор LIKE применяется только для выборки значений из полей типа CHAR или VARCHAR с поиском подстрок в указанном поле.

Применяются два типа шаблонов:

• символ “подчеркивание” (_) — заменяет в строке один любой символ;

символ “процент” (%) — заменяет последовательность символов произвольной длины, включая и нулевую.

Оператор IS NULL возвращает в запросе записи с пустыми значениями.

Подведение итогов с помощью функций агрегирования

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

Таблица 1 АГРЕГАТНЫЕ ФУНКЦИИ SQL

Функция Действие функции
COUNT() SUM() AVG() MAX() MIN() Подсчет числа выбранных строк, исключая NULL-значение Суммирование всех выбранных значений данного поля Подсчет среднего значения для всех выбранных значений Вычисляет наибольшее из всех значений Вычисляет наименьшее из всех значений

Функции используются в командах языка SQL.

Синтаксис функций в команде SELECT:

SELECT функция (столбец_1 или *),..., функция (столбец_п)

FROM имя_таблицы;

В функциях AVERAGE, MIN, MAX, SUM значение NULL недопустимо для подсчетов.

Синтаксис функции COUNT:

SELECT COUNT (имя_столбца) FROM имя_таблицы;

Подсчитывается количество значений столбцов или записей, которые соответствуют выражению выбора (цифровые и символьные поля). Применение Маски (*) в качестве аргумента вместо имени столбца определяет все строки, удовлетворяющие критерию команды SELECT. Например, для подсчета количества всех строк в таблице Spisok подается команда:

SELECT COUNT (*) FROM Spisok;

Для подсчета количества строк по критерию отбора в команде SELECT используется предложение WHERE. Так, для возврата количества студентов 5-го курса подается команда:

SELECT COUNT (*) FROM Spisok WHERE kurs = 5;

Функция AVG возвращает среднее арифметическое значение для выделенных столбцов (в примере для столбца slip всех строк таблицы Spisok):

SELECT AVG (stip) FROM Spisok;

Функция SUM вычисляет и возвращает арифметическую сумму значений столбцов (только для цифрового поля). Синтаксис функции SUM:

SELECT SUM ([DISTINCT] выражение) FROM имя_таблицы;

Пример, Найти общую сумму стипендии по группе ФФ1 4-го курса:

SELECT SUM (stip) FROM Spisok WHERE grup = 'cM>r AND kurs = 4;

Для подсчета итогов по каждой группе из серии групп применяется предложение GROUP BY. Например, для подсчета суммы стипендии по каждой группе надо подать команду:

SELECT slip, SUM (grup) FROM Spisok GROUP BY stip;

Внутри одного выражения можно использовать несколько функций:

SELECT MAX (stip), MIN (stip), AVG (stip) FROM Spisok;

Формирование результатов запросов

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

Упорядочение выходных полей

Для вывода результатов в запросе в требуемой последовательности применяется команда ORDER BY. Сортировку можно задавать по значению одного или нескольких выбранных полей. Последовательность сортировки для каждого из столбцов задается ASC (по возрастанию) или DESC (по убыванию). Столбец, по значениям которого упорядочиваются возвращаемые строки, можно указывать именем столбца или его относительным порядковым номером.

Пример. Рассортировать все записи в таблице Spisok по алфавиту студентов:

SELECT * FROM Spisok ORDER BY fio ASC;

Выходные столбцы формируются в запросе, а не извлекаются непосредственно из базовой таблицы (их нет в таблице базы данных); они не имеют имен. Для ссылки на выходные столбцы в предложении ORDER BY используется порядковый номер выходного столбца из предложения SELECT. В этом случае в SELECT используются не имена столбцов для указания полей, а номера в выходных данных (это не номера в таблице базы данных).

Пример. Подсчитать количество отличников (по размеру стипендии — 15 000 руб.) на каждом курсе и вывести результат в порядке возрастания курса:

SELECT kurs, COUNT (DISTINCT 15 000) FROM Spisok GROUP BY kurs ORDER BY 2 ASC;

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

Запрос может быть сформулирован (получен) на основе данных из нескольких таблиц. Между элементами таблиц устанавливаются связи; имена соединяемых таблиц перечисляются через запятую в запросе в предложении FROM. Предикат запроса может ссылаться на любой столбец любой соединяемой таблицы. Полное имя столбца соединяемых таблиц составляют:

<имя_таблицы>. <имя_столбца>

Примеры записи столбцов.

Spisok.fio
Sport.gimnast
Kultura.pevec

Пример соединения таблиц. Установить связь между таблицами Sport и Kultura для выбора студентов, которые играют в футбол и занимаются сольным пением:

SELECT Sport.fio, Kultura. pevec FROM Sport, Kultura WHERE Sport.fio = Kultura.fio;

 

Команда SELECT в данном примере берет первую запись из таблицы Sport, в которой перечислены студенты, увлекающиеся футболом, и ищет в таблице Kultura, в которой перечислены студенты, занимающиеся сольным пением, фамилию этого же студента. В операциях соединения таблиц кроме равенства (эквисоединения) можно использовать любые операции сравнения в предложении WHERE.

6. ОБЪЕДИНЕНИЕ ТАБЛИЦЫ ПО ПРИНЦИПУ “САМА С СОБОЙ”

Смысл этой операции в том, что любую одну строку (запись) таблицы можно комбинировать (соединять) с любой другой строкой этой же таблицы и с копией этой строки. В одной таблице устанавливаются связи между различными записями, например поиск и выбор пар строк с общим значением поля. Для указания имен столбцов в команде SELECT в предложении FROM применяются временные имена полей — алиясы (псевдонимы), которые позволяют рассматривать одну таблицу в команде SELECT как две независимые таблицы: первая (first) и вторая (second). Алиясы определяются в предложении FROM. Записываются имя таблицы, пробел и имя алияса для данной таблицы, например FROM Spisok first, Spisok second. Соединение таблицы по принципу “сама с собой” покажем на примере соединения всех пар одинаковых фамилий в разных группах:

SELECT first.fio, second.fio, first.grup FROM Spisok first, Spisok second;

Вложение запросов

Один запрос может быть вложен в другой запрос. Запрос, который вкладывается, — это подзапрос, а в который вкладывается — основной (внешний). Подзапрос записывается в предложении WHERE, выполняется первым по отношению к внешнему, и используется для определения истинности или ложности предиката.

Пример. Уточнить размер стипендии студента Сапега:

SELECT * FROM stip = (SELECT stip FROM Spisok WHERE fio = 'Canera');

Выполнение запроса начинается с подзапроса: просматриваются все записи таблицы Spisok и выбираются все записи, для которых значение поля fio равно “Сапега”; для этих записей выбирается значение для поля stip, выбранное значение подставляется в предикат основного запроса в предложение WHERE вместо самого подзапроса (предложение будет иметь вид: WHERE stip = 9005). Подзапрос возвращает одно и только одно значение. Необходимо быть уверенным, что подзапрос выдает только одну строку. Далее выполняется основной запрос.

Для гарантии того, что результатом подзапроса является единственное значение (строка), рекомендуется использовать аргумент DISTINCT:

(SELECT DISTINCT stip...)



Поделиться:


Последнее изменение этой страницы: 2016-07-11; просмотров: 144; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.151.11 (0.006 с.)