Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Назначение и синтаксис оператора




Оператор выбора данных SELECT

Оператор SELECT реализует все операции реляционной алгебры. В результате его выполнения формируется расчетная таблица, которая может включать данные из других таблиц или представлений (или запросов в СУБД Access) и расчетные поля.

Синтаксис оператора SELECT имеет следующий вид:

SELECT [ALL | DISTINCT] «список полей>|*)

FROM < перечень исходных отношений (таблиц) [<тип связи>]>

[WHERE <условие выборки записей или соединения>]

[GROUP BY <список полей группировки >]

[HAVING < условие выборки групп>]

[ORDER BY <список полей, по которым упорядочить вывод>]

Рассмотрим более детально основные фразы оператора SELECT.

Ключевое слово SELECT сообщает СУБД, что эта команда – запрос. Все запросы начинаются этим словом с последующим пробелом. Затем следует список перечисленных через запятую столбцов, которые выбираются запросом из таблиц, или символ '*' (звездочка) для выбора всей строки или выражения для расчетных полей. Любые столбцы, не перечисленные здесь, не будут включены в результирующее отношение, соответствующее выполнению команды.

Ключевое слово ALL (подразумевается по умолчанию) означает, что в результирующий набор строк включаются все строки, удовлетворяющие условиям запроса.

Ключевое слово DISTINCT означает, что в результирующий набор включаются только различные строки, то есть дубликаты строк результата не включаются в набор.

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

В фразе FROM задаются имена таблиц и представлений (запросов в СУБД Access), используемых в качестве источника информации. В случае если указано более одного имени таблицы, неявно подразумевается, что над перечисленными таблицами осуществляется операция декартова произведения. Таблицам можно присвоить имена-псевдонимы (алиасы), что бывает полезно для осуществления операции соединения таблицы с самой собою или для доступа из вложенного подзапроса к текущей записи внешнего запроса.

Для связывания таблиц используется фраза JOIN. Тип связи задается сло­вами: LEFT/RIGHT(в запрос входят все записи из таблицы, стоящей в зап­ро­се слева/справа), INNER(входят только записи с совпадающими ключами связи).

Пример задания базового запроса (выводит все поля базы) по базе строек.

Select Stroiki.Ns, Stroiki.Ds, Stroiki.Ss, Stroiki.Fs, Stroiki.M, Stroiki.Em, Podrjdhiki.Np, Zakazhiki.Nz FROM “stroiki.DB“ Stroiki

Inner Join “zakazhiki.db“ Zakazhiki ON (Stroiki.Kz = Zakazhiki.Kz)

Inner Join “podrjdhiki.DB“ Podrjdhiki ON (Stroiki.Kp = Podrjdhiki.Kp)

В результате выполнения запроса получается совокупность колонок, в за­головках которых могут находиться имена полей. Если нас не устраивают имена, формируемые по умолчанию, то можно назначить свои (псевдо­нимы), указав их после слова AS.

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

В фразе WHERE задаются условия отбора строк результата или условия соединения кортежей исходных таблиц, подобно операции условного соединения в реляционной алгебре.

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

Сравнения { =, <>, >,<, >=,<= }, которые имеют традиционный смысл.

Between A and В – принимает значения между А и В. Предикат истинен, когда сравниваемое значение попадает в заданный диапазон, включая границы диапазона.

Not Between A and В, который истинен тогда, когда сравниваемое значение не попадает в заданный интервал, включая его границы.

IN (множество) – истинен тогда, когда сравниваемое значение входит в множество заданных значений. При этом множество значений может быть задано простым перечислением или встроенным подзапросом.

NOT IN (множество), который истинен тогда, когда сравниваемое значение не входит в заданное множество.

LIKE и NOT LIKE. Предикат LIKE требует задания шаблона, с которым сравнивается заданное значение, предикат истинен, если сравниваемое значение соответствует шаблону, и ложен в противном случае. Предикат NOT LIKE имеет противоположный смысл.

В шаблон могут быть включены специальные символы:

символ подчеркивания (_) – для обозначения любого одиночного символа;

символ процента (%) для обозначения любой произвольной последовательности символов;

[n‑k]% – произвольная последовательность символов в интервале от n до k;

остальные символы, заданные в шаблоне, обозначают самих себя.

IS NULL – сравнение с неопределенным значением IS NULL.

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

<имя атрибута>IS NULL и <имя атрибута> IS NOT NULL.

Если в данном в данной строке указанный атрибут имеет неопределенное значение, то условие IS NULL принимает значение «Истина» (TRUE), а предикат IS NOT NULL – «Ложь» (FALSE), в противном случае условие IS NULL принимает значение «Ложь», а предикат IS NOT NULL принимает значение «Истина».

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

Таблица 1.8.3.1

Таблица истинности логических операций

А В Not A А And В A Or B
TRUE TRUE FALSE TRUE TRUE
TRUE FALSE FALSE FALSE TRUE
TRUE Null FALSE Null TRUE
FALSE TRUE TRUE FALSE TRUE
FALSE FALSE TRUE FALSE FALSE
FALSE Null TRUE FALSE Null
Null TRUE Null Null TRUE
Null FALSE Null FALSE Null
Null Null Null Null Null

 

В арифметическом выражении поле с неопределенным значением не трактуется как поле с нулевым значением и формируемый результат будет неопределенным!

EXIST и несуществования NOT EXIST – относятся к встроенным подзапросам.

В фразе GROUP BY <колонка>[,<колонка>...] задаются колонки (поля), по которым про­изводится группирование выходных данных. Все записи таблицы, для ко­торых значения колонок совпадают, отображаются в выборке единствен­ной строкой. Группирование удобно для получения некоторых сводных характеристик (суммы, число записей, среднее) группы.

В выражении могут исполь­зо­вать­ся соб­ственные агрегатные функции, действующие “по верти­кали”: среднее значение в группе (AVG),минимальное (MIN),максимальное (MAX),сумма (SUM),Количество строк или непустых значений полей, которые выбрал запрос (COUNT). Эта функция может иметь в качестве аргумента звездочку (COUNT (*)), что означает подсчет всех записей, попавших в выборку.

Агрегатные функции могут применяться как в выражении вывода результатов строки SELECT, так и в выражении условия обработки сформированных групп HAVING. В этом случае каждая агрегатная функция вычисляется для каждой выделенной группы. Значения, полученные при вычислении агрегатных функций, могут быть использованы для вывода соответствующих результатов или для условия отбора групп.

С функциями SUM и AVG могут использоваться только числовые поля. С функциями COUNT, MAX и MIN могут использоваться как числовые, так и символьные поля. При использовании с символьными полями МАХ и MIN и будут обрабатывать в алфавитном порядке. Нельзя использовать агрегатные функции в предложении WHERE, потому что условия оцениваются в терминах одиночной строки, а агрегатные функции – в терминах групп строк.

В фразе HAVING < условие отбора группы > задаются критерий отбора сфор­ми­ро­ван­ных в процессе выборки групп.

В условие выборки фразы HAVING, прямо можно использовать только спецификации столбцов, указанных в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно специфицировать только внутри спецификаций агрегатных функций COUNT, SUM, AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для всей группы строк. Аналогично обстоит дело с подзапросами, входящими в предикаты условия выборки раздела HAVING: если в подзапросе используется характеристика текущей группы, то она может задаваться только путем ссылки на столбцы группирования.

Результатом выполнения фразы HAVING является сгруппированная таблица, содержащая только те группы строк, для которых результат вычисления условия поиска есть TRUE. В частности, если раздел HAVING присутствует в табличном выражении, не содержащем GROUP BY, то результатом его выполнения будет либо пустая таблица, либо результат выполнения предыдущих разделов табличного выражения, рассматриваемый как одна группа без столбцов группирования.

Пример. Вывести число сотрудников, максимальную, среднюю, ми­ни­маль­ную и итого­вую зарплату по подразделениям (поле Podr) по таб­лице SOTRUDNIKI.

SELECT podr, Count(*),Min(zarpl), Avg(zarpl), Max(zarpl), Sum(zarpl)

From Sotrudniki Group By podr Order By podr

Самый простой запрос SELECT без необязательных частей соответствует просто декартову произведению. Например, выражение

SELECT * FROM Rl, R2

соответствует декартову произведению таблиц R1 и R2. Выражение

SELECT Rl.A, R2.B FROM Rl. R2

соответствует проекции декартова произведения двух таблиц на два столбца А из таблицы R1 и В из таблицы R2, при этом дубликаты всех строк сохранены, в отличие от операции проектирования в реляционной алгебре, где при проектировании по умолчанию все дубликаты кортежей уничтожаются.

В следующих примерах из [18, 19] используются базы данных:

1) «Поставки» с таблицами (ключевые поля подчеркнуты):

S – поставщики (Номер_поставщика, Фамилия, состояние, Город);

Р – детали (Номер_детали, Название, цвет, Вес, Город).;

SP – поставки деталей (Номер_поставщика, Номер_детали, Количество);

J – изделия (Номер_изделия, Название, Город);

SPJ поставка деталей для изделий – (Номер_поставщика, Номер_детали, Номер_изделия, Количество).

2) «Сессия» из [19]:

R1 – результаты сессия (ФИО, Дисциплина, Оценка);

R2 – список студентов (ФИО, Группа);

R3 – список учебных дисциплин по группам (Группы, Дисциплина);

R4 – результаты лабораторных работ (ФИО, Дисциплина, Номер_лаб_раб, Оценка).




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


Дата добавления: 2014-12-10; Просмотров: 646; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.03 сек.