02._Выборка_данных_из_базы_данных_с_использованием_языка_SQL. Выборка данных из базы данных с использованием языка sql
Скачать 238.5 Kb.
|
Предикаты условия поискаВ условии поиска могут использоваться следующие предикаты: предикат сравнения, предикат BETWEEN , предикат IN, предикат LIKE, предикат NULL, предикат с квантором и предикат EXISTS. Предикат IN определяется следующим образом: <предикат IN>::= <выражение> [NOT] IN (<значение> [,<значение>...] | .<подзапрос>) Значение предиката является истинным, когда значение левого операнда совпадает хотя бы с одним значением списка правого операнда. Использование ключевого слова NOT осуществляет отрицание результата. Подзапрос- это запрос, используемый в предикате условия поиска. Результатом выполнения подзапроса является единственный столбец. Предикат BETWEEN определяется следующим образом: <предикат BETWEEN>::= <выражение> [NOT] BETWEEN <выражение> AND <выражение> По определению результат x BETWEEN y AND z тот же самый, что результат логического выражения x>=y AND x<=z. Предикат LIKE имеет следующий синтаксис: <предикат LIKE>::= <имя столбца> [NOT] LIKE <шаблон>[ESCAPE Значение предиката LIKE является истинным, если шаблон является подстрокой заданного столбца. При этом, если раздел ESCAPE отсутствует, то при составлении шаблона со строкой производится специальная интерпретация символов-заместителей шаблона: символ подчеркивания (‘_’) обозначает любой одиночный символ, символ процента (‘%’) обозначает последовательность произвольных символов произвольной длины (может быть нулевой), парные квадратные скобки представляют любой символ, записанный в скобках. Если же раздел ESCAPE присутствует и специфицирует некоторый одиночный символ x, то пары символов ‘x_’ и ‘x%’ представляют одиночные символы ‘_’ и ‘%’ соответственно. Предикат NULL описывается синтаксическим правилом: <предикат NULL>::= <имястолбца> IS [NOT] NULL Значение ‘x IS NULL’ является истинным, когда значение x неопределено. Предикат EXISTS имеет следующий синтаксис: <предикат EXISTS>::= EXISTS <подзапрос> Значение предиката является истинным, когда результат вычисления подзапроса не пуст. Агрегатные функцииАгрегатные функции (функции множества) в запросе предназначены для вычисления некоторого значения для заданного множества строк. Таким множеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице, или вся таблица. В языке SQL определены следующие агрегатные функции: AVG - функция определения среднего значения; MAX - функция определения максимального значения; MIN - функция определения минимального значения; SUM - функция суммирования значений; COUNT - функция для подсчета числа строк или значений. Грамматика агрегатных функций следующая: <агрегатная функция>::= COUNT(*) | Вычисление функции COUNT(*) производится путем подсчета числа строк в заданном множестве. Функция типа distinct выполняет вычисления только над одним столбцом, а в вычислениях используются только уникальные значения столбца. При использовании функции типа all список значений формируется из значений арифметического выражения, вычисляемого для каждой строки заданного множества. Операции реляционной алгебрыБольшинство SQL-запросов требует одновременного обращения к нескольким таблицам. Часто такого рода запросы основываются на операциях реляционной алгебры, в частности, соединения, декартова произведения, объединения, пересечения и разности. При соединении двух таблиц по некоторому условию образуется результирующая таблица, строки которой являются конкатенацией (сцеплением) строк первой и второй таблиц и удовлетворяют этому условию. Операцию соединения можно реализовать с использованием обычного SQL-запроса типа SELECT-FROM-WHERE. По стандарту ANSI операция соединения таблиц может указываться явно в разделе FROM. Синтаксис раздела FROM в этом случае следующий: <раздел FROM>::= FROM <имя таблицы> [JOIN <имя таблицы> ON <условие соединения> ...] При выполнении декартова произведения двух таблиц производится таблица, строки которой являются конкатенацией строк первой и второй таблиц. Операцию декартова произведения можно реализовать с использованием SQL-запроса типа SELECT-FROM. По стандарту ANSI операция декартова произведения может указываться явно в разделе FROM с использованием ключевой фразы CROSS JOIN. При выполнении операции объединения двух таблиц производится таблица, включающая все строки, входящие хотя бы в одну из таблиц-операндов. При этом число столбцов и типы данных этих столбцов должны быть одинаковыми для всех операндов. Для объединения результирующих таблиц операторов SELECT используется ключевое слово UNION. Операция пересечения двух таблиц производит таблицу, включающую все строки, входящие в обе исходные таблицы. Таблица, являющаяся разностью двух таблиц, включает все строки, входящие в таблицу - первый операнд, такие, что ни одна из них не входит в таблицу, являющуюся вторым операндом. |