Описание критерия выборки содержимого строк результирующей таблицы



В качестве критерия выбора информации из таблиц списка FROM оператора SELECT выступает сложн_условие, записываемое после ключевого слова WHERE и имеющее следующий вид:

прост_условие или прост_условие AND сложн_условие или прост_условие OR сложн_условие

Типичными вариантами прост_условие являются следующие.

· Сравнение

полн_имя_столбца @ полн_имя_столбца_или_константа

где @ - один из операторов сравнения: (больше), (меньше), = ( не меньше), = (не больше), = (равно), (не равно), а полное_имя_столбца - имя столбца, конкретизированное при необходимости именем или синонимом имени таблицы, как это было описано выше.

· Сопоставление с образцом

полн_имя_столбца [NOT] LIKE образец

где образец имеет вид, описанный в таблице 3.

· Проверка на пустое значение в ячейке стодбца

полн _ имя _ столбца IS [NOT] NULL

При конструировании сложн_условие допустимо использование круглых скобок для управления порядком вычисления условий.

Примечание. Обратите внимание, что синтаксис сложн_условие существенно беднее синтаксиса в_выражение. Дело в том, что сложн_условие используется (в том числе и на физическом уровне организации БД) на этапе выборки из исходной (возможно, очень большой) таблицы (таблиц) необходимых строк в результирующую. Для сокращения времени прямого доступа к строкам таблиц они (таблицы) снабжаются ключами и индексами. Реальный эффект от использования ключей и индексов может быть достигнут только при условии, что запросы на поиск в таблицах используют в качестве критерия поиска только значения ячеек столбцов в чистом виде, а не в виде их комбинации в сложном выражении.

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

Упорядочивание и группирование строк результирующей таблицы

Для обеспечения структурированности в расположении строк результирующей таблицы в операторе SELECT используются конструкции GROUP BY и ORDER BY.

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

· Оператор SELECT может обеспечить вычисление агрегативных функций для групп строк результирующей таблицы. Для этого используется список полных имен столбцов в конструкции GROUP BY. Первое полное имя столбца в списке GROUP BY используется для разбиения строк результирующей таблицы на первичные группы, первичные группы разделяются на подгруппы вторым в списке полным именем столбца и так далее.

Оператор SELECT выводит значения агрегативных функций для самых малых подгрупп.

Примечание. Конструкция HAVING сложн_условие, как необязательная составная часть предложения GROUP BY, позволяет определять дополнительный (к WHERE сложн_условие) критерий выборки строк в группы. Этот дополнительный критерий применяется в режиме постпроцессорной обработки к таблице, полученной в результате использования критерия из конструкции WHERE.

Выборка из нескольких таблиц

В общем случае оператор SELECT языка SQL дает возможность выборки информации сразу из нескольких таблиц, перечисленных в списке FROM. На концептуальном уровне рассмотрения (уровне реляционной модели данных) такая выборка включает в себя два основных этапа:

1. построение промежуточной таблицы, представляющей собой декартово произведение таблиц из списка FROM (т.е. таблицы, строки которой представляют собой все возможные сочетания строк исходных таблиц);

    1. копирование в результирующую таблицу всех строк промежуточной, отвечающих критерию из WHERE сложн_условие (если таковой определен).

Примечание. Обратите внимание, что в данном примере нигде в операторе SELECT не потребовалось использовать полные имена столбцов различных таблиц. Объясняется это тем, что имена столбцов таблиц elements и materials различны, и поэтому неоднозначностей в именовании быть не может.
Примечание. Хотя концептуальная модель обработки оператора SELECT со списком FROM из двух и более таблиц подразумевает построение декартового произведения этих табллиц, в реальности этого не происходит в силу ограниченности синтаксиса сложн_условие из конструкции WHERE. Так, в нашем последнем примере запрос на выборку осуществлялся в 2 коротких этапа: 1) из таблицы elements (с использованием первичного ключа) прямым доступом извлекается строка с id=25; 2) из таблицы materials (опять с использованием первичного ключа) прямым доступом извлекается информация о материале steel (сталь). Очевидно, что такой оптимизированный подход несравненно более эффективен по сравнению с каноническим (через декартово произведение).

 


Дата добавления: 2021-04-15; просмотров: 38; Мы поможем в написании вашей работы!

Поделиться с друзьями:






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