Опубликован: 11.09.2006 | Уровень: специалист | Доступ: свободно
Лекция 4:

Работа с данными

Агрегатные функции

При статистическом анализе баз данных необходимо получать такую информацию, как общее количество записей, наибольшее и наименьшее значение заданного поля записи, усредненное значение поля. Это делается с помощью запросов, содержащих так называемые агрегатные функции. Агрегатные функции производят одиночное значение для всей группы таблицы. Имеется список этих функций:

  • count извлекает количество записей данного поля;
  • sum извлекает арифметическую сумму всех выбранных значений данного поля;
  • avg извлекает арифметическое среднее (усреднение) всех выбранных значений данного поля;
  • max извлекает наибольшее из всех выбранных значений данного поля;
  • min извлекает наименьшее из всех выбранных значений данного поля.

Для определения общего числа записей в таблице Products используем следующий запрос:

select count (*) from Products;

результатом которого будет (рис. 4.14):

Результат запроса с функцией count

Рис. 4.14. Результат запроса с функцией count

Обратите внимание — на вкладке Messages возникает сообщение, что только одна запись извлечена:

(1 row(s) affected)

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

Для определения количества записей поля ProductName таблицы Products используем следующий запрос:

select count (ProductName) from Products;

Таблица Products имеет все заполненные значения полей, поэтому результат этого запроса будет совпадать с результатом извлечением всех записей.

Как быть со значениями полей, которые были незаполненными? Обращение к таким полям осуществляет оператор null. Величина null не означает, что в поле стоит число 0 (нуль) или пустая текстовая строка — " ". Как возникают значения полей null? Существует два способа образования таких значений:

  • Microsoft SQL Server 2000 автоматически подставляет значение null, если в значение поля не было введено никаких значений и если тип данных для этого поля не препятствует присвоению значения null (если поле не является обязательным для заполнения);
  • если пользователь явным образом вводит значение null (подробнее о создании таблиц см. далее).

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

select *( или название столбца(ов))  from название_таблицы 
where название столбца  is null;

Для обратной задачи используем запрос типа

select *( или название столбца(ов))  from название_таблицы 
where название столбца  is not  null;

Оператор count учитывает записи со значением поля null.

Синтаксис использования других операторов одинаков — следующие запросы извлекают сумму, арифметическое среднее, наибольшее и наименьшее значения поля UnitPrice таблицы Products:

select sum(UnitPrice) from Products;
select avg(UnitPrice) from Products;
select max(UnitPrice) from Products;
select min(UnitPrice) from Products;

Выполните самостоятельно эти запросы и просмотрите результаты.

Типы данных

Для оперирования данными SQL, подобно языкам программирования, использует типы данных. Рассмотрим некоторые из этих типов.

Наиболее употребительными типами данных для хранения чисел являются integer (целое число) и decimal (десятичное число) (которые можно сокращать как int и dec соответственно). Разумеется, что тип "целое число" можно представить как десятичное число, которое не содержит никаких цифр справа от десятичной точки.

Тип для текста — char (или символ), который относится к строке текста. Поле типа char имеет заданную длину, определяемую максимальным числом символов, которые могут быть введены в это поле. Больше всего реализаций также имеют нестандартный тип, называемый varchar (переменное число символов), который является текстовой строкой, способной принимать любую длину до определенного реализацией максимума (обычно 254 символа). Значения character и varchar включаются в одиночные кавычки как "текст". Различие между char и varchar в том, что char должен резервировать достаточное количество памяти для максимальной длины строки, а varchar распределяет память так, как это необходимо.

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

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

Оператор сравнения like

Оператор сравнения like для поиска записей по заданному шаблону. Это одна из наиболее часто встречаемых задач – например, поиск клиента с известной фамилией в базе данных.

Предположим, что в таблице Customers требуется найти записи клиентов с фамилиями, начинающимися на букву "C" и содержащие поля CustomerID, ContactName и Address:

select CustomerID, ContactName, 
Address from Customers where ContactName like 'C%';

Результатом этого запроса будет таблица (рис. 4.15):

Запрос с оператором like

Рис. 4.15. Запрос с оператором like

Оператор like содержит шаблоны, позволяющие получать различные результаты (таблица 4.1).

Таблица 4.1. Шаблоны оператора like
Шаблон Значение
like '5[%]' 5%
like '[_]n' _n
like ‘[a-cdf]’ a, b, c, d, или f
like '[-acdf]' -, a, c, d, или f
like '[ [ ]' [
like ']' ]
like 'abc[_]d%' abc_d и abc_de
like 'abc[def]' abcd, abce, и abcf
Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

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

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/