ТОП 10:

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



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

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

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

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

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

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

SELECT * FROMSpisok WHEREgrupa 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 ( * ) FROMSpisok;

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

SELECT COUNT ( * ) FROMSpisok WHEREkurs = 5;

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

SELECTAVG (stip) FROMSpisok;

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

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

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

SELECT SUM(stip) FROMSpisok WHEREgrup = 'cM>r AND kurs = 4;

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

SELECTslip, SUM(grup) FROMSpisok GROUP BY stip;

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

SELECT MAX(stip), MIN(stip), AVG(stip) FROMSpisok;

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

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

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

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

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

SELECT * FROMSpisokORDER BYfio ASC;

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

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

SELECTkurs, COUNT(DISTINCT 15 000) FROMSpisok GROUP BYkurs ORDER BY 2 ASC;

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

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

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

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

Spisok.fio
Sport.gimnast
Kultura.pevec

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

SELECTSport.fio , Kultura. pevec FROMSport, Kultura WHERESport.fio = Kultura.fio;

 

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

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

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

SELECTfirst.fio, second.fio, first.grup FROMSpisok first, Spisok second;

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

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

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

SELECT * FROMstip = (SELECTstip FROMSpisok WHEREfio = 'Canera');

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

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

(SELECT DISTINCTstip...)







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

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