русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Групповые функции


Дата добавления: 2013-12-23; просмотров: 1342; Нарушение авторских прав


Определение ограничений целостности таблицы

Ограничения целостности таблицы обладают следующим синтаксисом:

 

<table constraint definition> ::=

<unique constraint definition>

| <referential constraint definition>

| <check constraint definition>

<unique constraint definition> ::=

<unique specification> (<unique column list>)

<unique specification> ::= UNIQUE | PRIMARY KEY

<unique column list> ::= <column name> [{,<column name>}...]

<referential constraint definition> ::=

FOREIGN KEY (<referencing columns>) <references specification>

<references specification> ::=

REFERENCES <referenced table and columns>

<referencing columns> ::= <reference column list>

<referenced table and columns> ::=

<table name> [(<reference column list>)]

<reference column list> ::= <column name> [{,<column name>}...]

<check constraint definition> ::= CHECK (<search condition>)

 

Для одной таблицы может быть задано несколько ограничений целостности, в том числе те, которые неявно порождаются ограничениями целостности столбцов. Стандарт SQL/89 устанавливает, что ограничения таблицы фактически проверяются при выполнении каждого оператора SQL.

Наличие правильно подобранного набора ограничений БД очень важно для надежного функционирования прикладной информационной системы. Вместе с тем, в некоторых СУБД ограничения целостности практически не поддерживаются. Поэтому при проектировании прикладной системы необходимо принять решение о том, что более существенно: рассчитывать на поддержку ограничений целостности, но ограничить набор возможных СУБД, или отказаться от их использования на уровне SQL, сохранив возможность использования не самых современных СУБД.



 

3) Выборка данных средствами SQL.

 

Ключевое слово Перевод
SELECT<список_полей> выбрать
FROM<имена_таблиц> из
WHERE <Условия_поиска> при
IN <имя_внешней_базы_данных> в
INNER JOIN объединяя
GROP BY <список_полей > группируя по
HAVING <условия _поиска> имеющие
ORDER BY <список_полей> упорядочивая по
AS <псевдонимы> как
ALL,DISTINCT, DISTINCTROW, TOP (предикаты) все, различные, различные ряды, первые

 

При наборе запроса для перехода на другую строку следует использовать комбинацию <CTRL>+<ENTER> .

 

Оператор SELECT

Пример:

SELECT Клиенты.Фирма

FROM Клиенты, [Заинтересованные лица]

WHERE Клиенты.Фирма = [Заинтересованные лица].Фирма;

 

Выборка будет содержать все фирмы, которые присутствуют как в таблице “Заинтересованные лица”, так и в таблице “Клиенты”.

 

1. SELECT является первым ключевым словом в определении SQL-запроса.

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

3. Если используется имя поля, содержащее пробелы или другие разделители, имя следует заключать в квадратные скобки.

4. Если в запросе обрабатывается несколько таблиц, то во избежание неопределенности в списках полей рекомендуется приводить полную спецификацию поля, т.е. <имя_таблицы>.<имя_поля>.

 

Директива FROM

 

Директива FROM задает имя таблицы или запросы, которые содержат поля, перечисленные в операторе SELECT.

 

1. Директива FROM является обязательной.

2. При перечислении таблиц самые короткие таблицы (содержащие меньшее количество записей) рекомендуется указывать в первую очередь.

3. С помощью “*” из таблицы можно выбрать все поля:

SELECT Клиенты.* FROM Клиенты;

В выборках автоматически используются имена выбираемых полей в качестве имен полей в выборке. Если необходимо изменить имена полей в выборке, следует использовать директиву AS и задать соответствующий псевдоним.

В следующем примере поле «Фирма» должно быть представлено в выборке как поле «Название клиента»:

SELECT Фирма AS [Название клиента] FROM Клиенты;

 

Директива WHERE

WHERE является необязательной директивой. Если WHERE отсутствует, будут выбраны все записи данных.

 

Директива ORDER BY

 

Определяет список полей и порядок сортировки записей данных, включенных в выборку.

 

Синтаксис:

ORDER BY поле1 [ASC | DESC] , поле2 [ASC | DESC] [,[…]]

 

1. Директива ORDER BY не является обязательной. Если она не используется, данные представляются в неотсортированном виде. Однако, если используется предикат TOP, то Директива ORDER BY становится обязательной.

2. По умолчанию используется группировка по возрастанию (ACS). DECS – группировка по убыванию.

3. Порядок перечисления полей задает иерархию уровней сортировки.

4. Директива ORDER BY является последней директивой в запросе.

 

Директива GROUP BY

 

Группирует записи данных и объединяет в одну запись все записи данных, которые содержат идентичные значения в указанном поле (или полях).

 

Пример:

SELECT [название товара], SUM([Стоимость])

FROM Товары

GROUP BY [Название товара]

 

В этом примере исходные записи с одинаковыми названиями товара группируются и объединяются в одну запись в выборке.

 

1. Директива не является обязательной. Если условие указывается, оно должно следовать за FROM или WHERE.

2. Для фильтрации записей, которые должны группироваться, может использоваться директива WHERE, директива HAVING может использоваться для фильтрации записей, полученных в результате этой группировки.

3. В директиве GROUP BY можно использовать любые поля, упомянутые в директиве FROM; эти поля не обязательно должны быть перечислены в списке полей оператора SELECT.

4. В операторе SELECT для всех полей, включенных в выборку, но не перечисленных в директиве GROUP BY, обязательно должны присутствовать функции группирования, такие как SUM, COUNT, AVG.

 

Директива HAVING

Используется для фильтрации записей после группирования только в случае использования в запросе директивы GROUP BY.

 

1. Директива HAVING не является обязательной. Если она присутствует, то должна следовать за директивой GROUP BY.

2. Функция директивы HAVING схожа с WHERE – обе используются для фильтрации.

3. Директива WHERE определяет, какие записи должны участвовать в группировании, т.е. фильтрует записи до группирования. HAVING определяет, какие из получившихся в результате группировки записей будут включены в результирующую выборку, т.е. фильтрует записи после группирования.

 

Пример:

SELECT Отделение, Count ([Отделение])

FROM Сотрудники

GROUP BY Отделение

HAVING Count ([Отделение]) > 50;

 

В выборку будут включены отделения, в которых число сотрудников больше 50.

 

Директива IN

Директива IN используется для запросов к другим базам данных, с которыми Access может быть связан. В следующем примере формируется запрос, который использует данные таблицы Access «Заинтересованные лица» и файл БД в формате dBASE IV CLIENTS.DBF:

 

SELECT CLIENTS.DBF.Firm

FROM CLIENTS.DBF, [Заинтересованные лица]

IN C:\ dBASE\DATA\ CLIENTS «dBASE;»

WHERE CLIENTS.DBF.Firm = [Заинтересованные лица].[Фирма]

 

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

2. Для указания базы данных, которая имеет формат, отличный от формата Access, нужно добавить к обозначению типа базы данных точку с запятой и заключить его в кавычки, например, «dBASE;».

4) Предикаты.

 

Синтаксис:

[ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]

FROM <исходная таблица>

 

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

 

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

 

<comparison predicate> ::=

<value expression> <comp op>

{<value expression> | <subquery>}

<comp op> ::=

= | <> | < | > | <= | >=

 

Через "<>" обозначается операция "неравенства". Арифметические выражения левой и правой частей предиката сравнения строятся по общим правилам построения арифметических выражений и могут включать в общем случае имена столбцов таблиц из раздела FROM и константы. Типы данных арифметических выражений должны быть сравнимыми (например, если тип столбца a таблицы A является типом символьных строк, то предикат "a = 5" недопустим).

 

Предикат ALL

 

SELECT ALL ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО FROM Клиенты

 

Выбираются перечисленные поля из всех записей таблицы Клиенты.

Если предикат не указывается, то предполагается наличие предиката ALL. Предикаты служат для установки дополнительных фильтров после применения критериев директивы WHERE.

 

Предикат DISTINCT

 

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

 

SELECT DISTINCT Клиенты.Фирма

FROM Клиенты, [Заинтересованные лица]

WHERE Клиенты.Фирма = [Заинтересованные лица].Фирма;

 

Если в этом примере предикат DISTINCT не будет указан, в выборку будут включены названия фирм из всех записей таблицы клиентов, которые упоминаются в таблице заинтересованных лиц. В выборке могут появиться дублирующие записи. Предикат DISTINCT приведет к отбрасыванию дублирующих значений поля “Фирма”.

 

Предикат DISTINCTROW

 

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

Таблица «Клиенты» не содержит дублирующих кодов клиентов, в то время как таблица «Заказы» может содержать дублирующие коды клиентов, поскольку один клиент может сделать несколько заказов. В приведенном ниже примере показано, как можно использовать предикат DISTINCTROW для того, чтобы составить список фирм, которые сделали хотя бы один заказ, не вдаваясь в подробности о количестве таких заказов:

 

SELECT DISTINCTROW [Название фирмы]

FROM Клиенты INNER JOIN Заказы

ON Клиенты.[Код клиента] = Заказы.[Код клиента]

ОRDER BY [Название фирмы];

 

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

Использование DISTINCTROW эквивалентно установке значения ДА для параметра Уникальные записи в окне свойств запроса при проектировании QBE-запросов в режиме конструирования.

 

Предикат TOP

 

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

Предположим, мы хотим отобрать 25 лучших студентов выпуска 2007 года:

 

SELECT TOP 25 [имя],[отчество],[фамилия]

FROM Студенты

WHERE [год выпуска] = 2007

ORDER BY [средний балл] DESC

 

Если не будет включена директива ORDER BY, то в выборку будут включены любые 25 студентов БД “Студенты”, удовлетворяющие условиям отбора, заданным в директиве WHERE.

Предикат TOP не разделяет записи, имеющие одинаковые значения при упорядочении. В примере, если двадцать пятый студент имеет точно такой же средний балл, как двадцать шестой и двадцать седьмой, то в выборку будут включены 27, а не 25 записей.

Можно также использовать ключевое слово PERCENT для того, чтобы включить в выборку определенный процент из верхней или нижней части диапазона, отсортированного в соответствии с директивой ORDER BY. Например, вместо 25 студентов можно запросить 10% курса:

SELECT TOP 10 PERCENT [имя],[отчество],[фамилия]

FROM Студенты

WHERE [год выпуска] = 2007

ORDER BY [средний балл] DESC

 

Используемое число в предикате ТОР должно быть целым без знака.

Использование TOP эквивалентно использованию параметра НАБОР ЗНАЧЕНИЙ в окне свойств запроса при проектировании QBE-запроса в режиме конструирования. Использование ключевого слова PERCENT эквивалентно использованию знака процента (%) при указании свойства НАБОР ЗНАЧЕНИЙ.

 

Предикат between

 

Предикат between имеет следующий синтаксис:

 

<between predicate> ::=

<value expression>

[NOT] BETWEEN <value expression> AND <value expression>

 

Результат "x BETWEEN y AND z" тот же самый, что результат "x >= y AND x <= z". Результат "x NOT BETWEEN y AND z" тот же самый, что результат "NOT (x BETWEEN y AND z)".

 

Предикат null

 

Предикат null описывается синтаксическим правилом:

 

<null predicate> ::=

<column specification> IS [NOT] NULL

 

Этот предикат всегда принимает значения true или false. При этом значение "x IS NULL" равно true тогда и только тогда, когда значение x не определено. Значение предиката "x NOT IS NULL" равно значению "NOT x IS NULL".

 

Предикат like

 

Предикат like имеет следующий синтаксис:

 

<like predicate> ::=

<column specification> [NOT] LIKE <pattern>

[ESCAPE <escape character>]

<pattern> ::= <value specification>

<escape character> ::= <value specification>

 

Типы данных столбца левого операнда и образца должны быть типами символьных строк. В разделе ESCAPE должен специфицироваться одиночный символ.

Значение предиката равно true, если pattern является подстрокой заданного столбца. При этом, если раздел ESCAPE отсутствует, то при сопоставлении шаблона со строкой производится специальная интерпретация двух символов шаблона: символ подчеркивания ("_") обозначает любой одиночный символ; символ процента ("%") обозначает последовательность произвольных символов произвольной длины (может быть, нулевой).

Если же раздел ESCAPE присутствует и специфицирует некоторый одиночный символ x, то пары символов "x_" и "x%" представляют одиночные символы "_" и "%" соответственно.

Значение предиката like есть unknown, если значение столбца, либо шаблона не определено.

Значение предиката "x NOT LIKE y ESCAPE z" совпадает со значением "NOT x LIKE y ESCAPE z".

 

Предикат exists

 

Предикат exists имеет следующий синтаксис:

 

<exists predicate> ::=

EXISTS <subquery>

 

Значением этого предиката всегда является true или false, и это значение равно true тогда и только тогда, когда результат вычисления подзапроса не пуст.

 

Операция объединения INNER JOIN

 

С помощью этого оператора формируется связь эквивалентности. В объединение при таком типе связи включаются данные из двух таблиц, если в поле связи, имеющемся в обеих таблицах, найдены совпадающие значения. Есть еще два типа связи – LEFT JOIN , RIGHT JOIN. В случае применения таких связей в объединение включаются также записи из левой или правой таблицы, которым не соответствует ни одна запись в связываемой с ними таблице.

Операция объединения INNER является частью условия директивы FROM. Синтаксис:

 

FROM таблица1 INNER JOIN таблица2 ON таблица1.поле1 = таблица2.поле2

 

Пример:

SELECT DISTINCTROW [Название фирмы]

FROM Клиенты INNER JOIN Заказы

ON Клиенты.[Код клиента] = Заказы.[Код клиента]

ОRDER BY [Название фирмы];

 

Поля, по которым производится объединение таблиц, должны быть числовыми, либо, если они не числовые, они должны иметь одинаковый тип и размер, но необязательно одинаковые имена. Поля типа МЕМО или OLE – объекты не могут использоваться для операции объединения.

 

5) Сложные запросы в SQL и поддержка целостности данных.

 

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

 



<== предыдущая лекция | следующая лекция ==>
Определение столбца | Формирование SQL- запросов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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