Понятие данных, принципы построения информационных систем

Автор работы: Пользователь скрыл имя, 19 Января 2014 в 13:37, доклад

Краткое описание

Банк данных (БнД) в общем случае состоит из следующих компонентов: базы (нескольких баз) данных, системы управления базами данных, словаря данных, администратора, вычислительной системы и обслуживающего персонала. Вкратце рассмотрим названные компоненты и некоторые связанные с ними важные понятия.
База данных (БД) представляет собой совокупность специальным образом организованных данных, хранимых в памяти вычислительной системы и отображающих состояние объектов и их взаимосвязей в рассматриваемой предметной области.

Прикрепленные файлы: 1 файл

Понятие данных.docx

— 165.19 Кб (Скачать документ)

UNION ALL //всех однофамильцев, не удаляет дубликаты SELECT namest FROM students2 //если нет all удалит всех однофамильцев!!

SELECT namest FROM students 1 INTERSECT //выводит только однофамильцев SELECT namest FROM students2

SELECT namest FROM students 1

MINUS //все students 1 если ни один не входит в students2

SELECT namest FROM students2

 
Удаление повторяющихся данных. 
Удаление строк-дубликатов из результатов запроса

Для этих целей в команду выборки  введено ключевое слово DISTINCT, которое записывается сразу после SELECT.

Например, для того, чтобы удалить дубликаты  однофамильцев из предыдущего запроса, достаточно немного изменить его  текст: SELECT DISTINCT name_st FROM students

При большом ожидаемом количестве строк-дубликатов в результатах запроса использование DISTINCT позволяет существенно сократить размер выборки.

Например, команда SELECT DISTINCT mark FROM marks

при существующей пятибальной системе возвратит  максимум четыре строки, содержащих значения - 2,3,4,5. Порядок следования этих значений предсказать невозможно, поэтому при необходимости получить результаты запроса в отсортированном виде необходимо явно указать в его тексте параметры, необходимые для сортировки.

 
Функция count(). 
 
Оператор WHERE. Предикаты сравнения. 
 
Операторы в фразе WHERE (BETWEEN, IN, LIKE, EXIST ит.д.). 
Логические выражения раздела WHERE

 

Синтаксически логическое выражение раздела WHERE определяется как булевское выражение. Основой логического выражения являются предикаты. Предикат позволяет специфицировать условие, результатом вычисления которого может быть true, false или unknown. В языке SQL:1999 допустимы следующие предикаты:*

predicate ::= comparison_predicate  
            | between_predicate

            | null_predicate  
            | in_predicate  
            | like_predicate

            | similar_predicate

            | exists_predicate  
            | unique_predicate  
            | overlaps_predicate

            | quantified_comparison_predicate  
            | match_predicate  
            | distinct_predicate

Предикат сравнения

Этот предикат предназначен для спецификации сравнения  двух строчных значений. Синтаксис предиката следующий:

comparison_predicate ::=  
               row_value_constructor comp_op row_value_constructor

 

comp_op ::= = | <> (“неравно”)| < | >  
          | <= “меньше или равно”| >= “больше или равно”

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

Предикат between

Предикат  позволяет специфицировать условие  вхождения в диапазон значений. Операндами являются строки:

between_predicate ::= 
               row_value_constructor [ NOT ] BETWEEN 
               row_value_constructor AND row_value_constructor

Все три строки-операнды должны иметь одну и ту же степень. Типы данных соответствующих значений строк-операндов должны быть совместимыми.

Предикат null

Предикат null позволяет проверить, являются ли неопределенными значения всех элементов строки-операнда:

null_predicate ::= row_value_constructor IS [ NOT ] NULL

Предикат in

Предикат  позволяет специфицировать условие  вхождения строчного значения в  указанное множество значений. Синтаксические правила следующие:

in_predicate ::= row_value_constructor [ NOT ] IN in_predicate_value

 

in_predicate_value ::= table_subquery 
                     | (value_expression_comma_list)

Предикат like

Формально предикат like определяется следующими синтаксическими правилами:

 

like_predicate ::= source_value [ NOT ] LIKE pattern_value 
                          [ ESCAPE escape_value ]

 

source_value  ::= value_expression

 

pattern_value ::= value_expression

 

escape_value ::= value_expression

 

Все три операнда (source_value, pattern_value и escape_value) должны быть одного типа, либо типа символьных строк, либо типа битовых строк*. В первом случае значением последнего операнда должна быть строка из одного символа, во втором – строка из восьми бит. Второй операнд, как правило, задается литералом соответствующего типа. В обоих случаях значение предиката равняется true в том и только в том случае, когда исходная строка (source_value) может быть сопоставлена с заданным шаблоном (pattern_value).

Предикат similar

Формально предикат similar определяется следующими синтаксическими правилами:

 

similar_predicate ::= source_value [ NOT ] SIMILAR TO pattern_value 
                          [ ESCAPE escape_value ]

 

source_value  ::= character_expression

 

pattern_value ::= character_expression

 

escape_value ::= character_expression

 

Все три операнда (source_value, pattern_value и escape_value) должны быть типа символьных строк. Значением последнего операнда должна быть строка из одного символа. Второй операнд, как правило, задается литералом соответствующего типа. В обоих случаях значение предиката равняется true в том и только в том случае, когда шаблон (pattern_value) должным образом сопоставляется с исходной строкой (source_value).

Основное  отличие предиката similar от рассмотренного ранее предиката like состоит в существенно расширенных возможностях задания шаблона, основанных на использовании правил построения регулярных выражений. Регулярные выражения предиката similar определяются следующими синтаксическими правилами:

regular_expression ::= regular_term 
                     | regular_expression vertical_bar regular_term

 

regular_term ::= regular_factor | regular_term regular_factor

 

regular_factor ::= regular_primary

                 | regular_primary * 
                 | regular_primary +

 

regular_primary ::= character_specifier

                  | % 
                  | regular_character_set 
                  | ( regular_expression )

 

character_specifier ::= non_escape_character | escape_character

 

regular_character_set ::= _ 
         | left_bracket character_enumeration_list right_bracket  
         | left_bracket ^ character_enumeration_list right_bracket  
         | left_bracket : regular_charset_id : right_bracket

 

character_enumeration ::= character_specifier 
                        | character_specifier - character_specifier

 

regular_charset_id ::= ALPHA | UPPER | LOWER | DIGIT | ALNUM

 

Поскольку в  синтаксических правилах регулярных выражений  символы “|”, “[“ и “]”, используемые нами в качестве метасимволов в BNF, являются терминальными символами, они изображены как vertical_bar, left_bracket и right_bracket соответственно.

Предикат exists

Предикат exists определяется следующим синтаксическим правилом:

 

exists_predicate ::= EXISTS (query_expression)

 

Значением условия EXISTS (query_expression) является true в том и только в том случае, когда мощность таблицы-результата выражения запросов больше нуля, иначе значением условия является false.

 

Предикат unique

 

Этот предикат позволяет сформулировать условие  отсутствия дубликатов в результате запроса:

unique_predicate ::= UNIQUE (query_expression)

Результатом вычисления условия UNIQUE (query_expression) является true в том и только в том случае, когда в таблице-результате выражения запросов отсутствуют какие-либо две строки, одна из которых является дубликатом другой. В противном случае значение условия есть false.

Предикат overlaps

 

Этот предикат служит для проверки перекрытия во времени двух событий. Условие определяется следующим синтаксисом:

 

overlaps_predicate ::= row_value_constructor OVERLAPS 
                           row_value_constructor

 

Степень каждой из строк-операндов должна быть равна 2. Тип данных первого столбца  каждого из операндов должен быть типом даты-времени, и типы данных первых столбцов должны быть совместимы. Тип данных второго столбца каждого  из операндов должен быть типом даты-времени  или интервала. При этом:

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

Предикат сравнения с квантором

Этот предикат позволяет специфицировать квантифицированное сравнение строчного значения и  определяется следующим синтаксическим правилом:

quantified_comparison_predicate ::= row_value_constructor 
                   comp_op { ALL | SOME | ANY } query_expression

 

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

 

Обозначим через x строку-первый операнд, а через S – результат вычисления выражения запроса. Пусть s обозначает произвольную строку таблицы S. Тогда:

    • Условие x comp_op ALL S имеет значение true в том и только в том случае, когда S пусто, или значение условия x comp_op s равно true для каждой строки s, входящей в S. Условие x comp_op ALL S имеет значение false в том и только в том случае, когда значение предиката x comp_op s равно false хотя бы для одной строки s, входящей в S. В остальных случаях значение условия x comp_op ALL S равно unknown.
    • Условие x comp_op SOME S имеет значение false в том и только в том случае, когда S пусто, или значение условия x comp_op s равно false для каждой строки s, входящей в S. Условие x comp_op SOME S имеет значение true в том и только в том случае, когда значение предиката x comp_op s равно true хотя бы для одной строки s, входящей в S. В остальных случаях значение условия x comp_op SOME S равно unknown.
    • Условие x comp_op ANY S эквивалентно условию x comp_op SOME S.

Предикат match

 

Предикат  позволяет сформулировать условие  соответствия строчного значения результату табличного подзапроса. Синтаксис определяется следующим правилом:

 

match_predicate ::= row_value_constructor  
                        MATCH [ UNIQUE ] [ SIMPLE | PARTIAL | FULL ]  
                            query_expression

 

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

 

Предикат distinct

 

Предикат  позволяет проверить, являются ли две  строки дубликатами. Условие определяется следующим синтаксическим правилом:

 

distinct_predicate ::= row_value_constructor IS DISTINCT FROM 
                       row_value_constructor

 

Строки-операнды должны быть одинаковой степени. Типы данных соответствующих значений строк-операндов  должны быть совместимы.

 
Логические связки AND, OR, NOT. 
 
Операторы GROUP BY, HAVING, ORDER BY. 
 
Объединение таблиц. Оператор UNION. 
 
Операторы объединения (перекрестное объединение, естественное, условное, внутреннее, внешнее), различие ON и WHERE. 

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

 

              SELECT cnum, cname, city

                  FROM Customers

                  WHERE EXISTS

                      ( SELECT *

                          FROM Customers

                          WHERE city = " San Jose' );

ВЫБОР СТОЛБЦОВ С ПОМОЩЬЮ EXISTS

В вышеупомянутом примере, EXISTS должен быть установлен так  чтобы легко выбрать один столбец, вместо того, чтобы выбирать все  столбцы используя в выборе звезду( SELECT *) В этом состоит его отличие  от подзапроса который ( как вы видели ранее в Главе 10 мог выбрать толь- ко один столбец ) . Однако, в принципе он мало отличается при выборе EXISTS столбцов, или когда выбираются все столбцы, потому что он просто замечает - выполняется или нет вывод из подзапроса - а не использует выведенные значения.

ИСПОЛЬЗОВАНИЕ EXISTS С СООТНЕСЕННЫМИ  ПОДЗАПРОСАМИ

В соотнесенном подзапросе, предложение EXISTS оценивается  отдельно для каждой строки таблицы  им которой указано во внешнем  запросе, точно также как и  другие операторы предиката, когда  вы используете соотнесенный подзапрос. Это дает возможность использовать EXISTS как верный предикат, который  генерирует различные ответы для  каждой строки таблицы указанной  в основном запросе. Следовательно  информация из внутреннего запроса, будет сохранена, если выведена непосредственно, когда вы используете EXISTS таким способом. Например, мы можем вывести продавцов  которые имеют многочисленных заказчиков ( вывод для этого запроса показывается в Рисунке 12.2 ):

 

              SELECT DISTINCT snum

                  FROM Customers outer

                  WHERE EXISTS

                      ( SELECT *

                           FROM Customers inner

                           WHERE inner.snum = outer.snum

                               AND inner.cnum < > outer.cnum );

 

 

               ===============  SQL Execution Log ============

              |                                               |

              | SELECT DISTINCT cnum                          |

              | FROM  Customers outer                         |

              | WHERE EXISTS                                  |

              | (SELECT *                                     |

              | FROM Customers inner                          |

Информация о работе Понятие данных, принципы построения информационных систем