Автор работы: Пользователь скрыл имя, 19 Января 2014 в 13:37, доклад
Банк данных (БнД) в общем случае состоит из следующих компонентов: базы (нескольких баз) данных, системы управления базами данных, словаря данных, администратора, вычислительной системы и обслуживающего персонала. Вкратце рассмотрим названные компоненты и некоторые связанные с ними важные понятия.
База данных (БД) представляет собой совокупность специальным образом организованных данных, хранимых в памяти вычислительной системы и отображающих состояние объектов и их взаимосвязей в рассматриваемой предметной области.
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. Порядок следования этих значений предсказать невозможно, поэтому при необходимости получить результаты запроса в отсортированном виде необходимо явно указать в его тексте параметры, необходимые для сортировки.
Синтаксически логическое выражение раздела 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_
|
match_predicate
|
distinct_predicate
Этот предикат предназначен для спецификации сравнения двух строчных значений. Синтаксис предиката следующий:
comparison_predicate ::=
row_value_constructor comp_op row_value_constructor
comp_op ::= = | <> (“неравно”)| < | >
| <= “меньше или равно”| >= “больше или равно”
Строки, являющиеся операндами операции сравнения, должны быть одинаковой степени. Типы данных соответствующих значений строк-операндов должны быть совместимы.
Предикат
позволяет специфицировать
between_predicate ::=
row_value_constructor [ NOT ] BETWEEN
row_value_constructor AND row_value_constructor
Все три строки-операнды должны иметь одну и ту же степень. Типы данных соответствующих значений строк-операндов должны быть совместимыми.
Предикат null позволяет проверить, являются ли неопределенными значения всех элементов строки-операнда:
null_predicate ::= row_value_constructor IS [ NOT ] NULL
Предикат
позволяет специфицировать
in_predicate ::= row_value_constructor [ NOT ] IN in_predicate_value
in_predicate_value ::= table_subquery
| (value_expression_comma_list)
Формально предикат 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_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_predicate ::= EXISTS (query_expression)
Значением условия EXISTS (query_expression) является true в том и только в том случае, когда мощность таблицы-результата выражения запросов больше нуля, иначе значением условия является false.
Этот предикат позволяет сформулировать условие отсутствия дубликатов в результате запроса:
unique_predicate ::= UNIQUE (query_expression)
Результатом вычисления условия UNIQUE (query_expression) является true в том и только в том случае, когда в таблице-результате выражения запросов отсутствуют какие-либо две строки, одна из которых является дубликатом другой. В противном случае значение условия есть false.
Этот предикат служит для проверки перекрытия во времени двух событий. Условие определяется следующим синтаксисом:
overlaps_predicate ::= row_value_constructor OVERLAPS
row_value_constructor
Степень каждой из строк-операндов должна быть равна 2. Тип данных первого столбца каждого из операндов должен быть типом даты-времени, и типы данных первых столбцов должны быть совместимы. Тип данных второго столбца каждого из операндов должен быть типом даты-времени или интервала. При этом:
Этот предикат
позволяет специфицировать
quantified_comparison_
comp_op { ALL | SOME | ANY } query_expression
Степень первого операнда должна быть такой же, как и степень таблицы-результата выражения запросов. Типы данных значений строки-операнда должны быть совместимы с типами данных соответствующих столбцов выражения запроса. Сравнение строк производится по тем же правилам, что и для предиката сравнения.
Обозначим через x строку-первый операнд, а через S – результат вычисления выражения запроса. Пусть s обозначает произвольную строку таблицы S. Тогда:
Предикат позволяет сформулировать условие соответствия строчного значения результату табличного подзапроса. Синтаксис определяется следующим правилом:
match_predicate ::= row_value_constructor
MATCH [ UNIQUE ] [ SIMPLE | PARTIAL | FULL ]
query_expression
Степень первого операнда должна совпадать со степенью таблицы-результата выражения запроса. Типы данных столбцов первого операнда должны быть совместимы с типами соответствующих столбцов табличного подзапроса. Сравнение пар соответствующих значений производится аналогично тому, как это специфицировалось для предиката сравнения.
Предикат позволяет проверить, являются ли две строки дубликатами. Условие определяется следующим синтаксическим правилом:
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 должен быть установлен так чтобы легко выбрать один столбец, вместо того, чтобы выбирать все столбцы используя в выборе звезду( SELECT *) В этом состоит его отличие от подзапроса который ( как вы видели ранее в Главе 10 мог выбрать толь- ко один столбец ) . Однако, в принципе он мало отличается при выборе EXISTS столбцов, или когда выбираются все столбцы, потому что он просто замечает - выполняется или нет вывод из подзапроса - а не использует выведенные значения.
В соотнесенном
подзапросе, предложение EXISTS оценивается
отдельно для каждой строки таблицы
им которой указано во внешнем
запросе, точно также как и
другие операторы предиката, когда
вы используете соотнесенный подзапрос.
Это дает возможность использовать
EXISTS как верный предикат, который
генерирует различные ответы для
каждой строки таблицы указанной
в основном запросе. Следовательно
информация из внутреннего запроса,
будет сохранена, если выведена непосредственно,
когда вы используете EXISTS таким способом.
Например, мы можем вывести продавцов
которые имеют многочисленных заказчиков
( вывод для этого запроса
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 |
Информация о работе Понятие данных, принципы построения информационных систем