Джеффри Мак-Манус - Обработка баз данных на Visual Basic®.NET
- Название:Обработка баз данных на Visual Basic®.NET
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2003
- Город:Москва
- ISBN:5-8459-0512-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джеффри Мак-Манус - Обработка баз данных на Visual Basic®.NET краткое содержание
Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000. Затем рассматриваются способы использования основных объектов модели ADO.NET для доступа к данным в реляционных базах данных. Благодаря подробным примерам, читатели могут изучить способы использования основных свойств и методов, а также узнать о более сложных компонентах и технологиях. Многочисленные листинги с кодом на языке Visual Basic .NET иллюстрируют используемые концепции, а бизнес-ситуации показывают практическую область их применения.
Обработка баз данных на Visual Basic®.NET - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
1. В окне Server Explorer создайте новое представление для базы данных Novelty.
2. После этого появится диалоговое окно Add Table (Создать таблицу), в котором следует указать таблицы tblCustomer и tblOrder, а затем щелкнуть на кнопке Close. Схема представления в окне конструктора представлений показана на рис. 2.5.

РИС. 2.5. Создание объединения двух таблиц в окне конструктора представлений
Обратите внимание на то, что конструктор представлений автоматически создает объединение между двумя таблицами на основе известного ключевого поля ID в таблице tblCustomer и явно заданного ранее отношения с полем CustomerID в таблице tblOrder.
После выполнения запроса на основе объединения двух таблиц в окне конструктора представлений будут отображены извлеченные данные, как показано на рис. 2.6.
Использование внешних объединений
Обычное (внутреннее) объединение (inner join) возвращает записи из двух таблиц, если значение первичного ключа первой таблицы соответствует значению внешнего ключа второй таблицы, связанной с первой. Предположим, необходимо получить все записи из одной таблицы, участвующей в объединении, вне зависимости от того, существуют ли связанные записи в другой таблице. В этом случае необходимо использовать внешнее объединение (outer join).
Например, для извлечения списка клиентов и заказов, в который включены также клиенты, не имеющие неоплаченных заказов, можно использовать приведенный ниже запрос.
SELECT FirstName, LastName, OrderDate
FROM tblCustomer LEFT OUTER JOIN
tblOrder ON tblCustomer.ID = tblOrder.CustomerID
Обратите внимание, что в предложении LEFT JOIN используется синтаксис имя_таблицы.имя_поля. Более длинное имя позволяет избежать неоднозначности при использовании полей с одинаковыми именами, поскольку поле ID существует как в так и в tblOrder. Фактически предложение LEFT OUTER JOIN означает, что будут отображены все данные таблицы tblCustomer, которая находится в левой стороне выражения tblCustomer.ID = tblOrder.CustomerID.

РИС. 2.6. Выполнение запроса на основе объединения двух таблиц в окне конструктора представлений
Этот запрос возвращает приведенный ниже набор записей.
FirstName | LastName | OrderDate |
---|---|---|
John | Smith | 1/4/2001 |
John | Smith | 1/9/2001 |
Jill | Azalia | 1/14/2001 |
Brad | Jones | |
Daisy | Klein | 2/18/2001 |
Daisy | Klein | 3/21/2001 |
Daisy | Klein | 4/4/2001 |
Dave | Martin | 6/5/2001 |
Betty | Klein | |
Thurston | Ryan | 7/2/2001 |
Jane | Winters | 8/16/2001 |
Jane | Winters | 9/10/2001 |
В этот результирующий набор включены все клиенты базы данных, независимо от того, имеют ли они заказы или нет. Для клиентов, не имеющих заказов, в поле OrderDate появится , что означает отсутствие данных.
Правое внешнее объединение (right join) аналогично левому внешнему объединению (left join) , за исключением того, что оно возвращает все записи из второй таблицы, участвующей в объединении (имеется в виду таблица с правой стороны), независимо от того, есть ли соответствующие им записи в первой таблице (расположенной с левой стороны). (Левое и правое объединения являются разновидностями внешнего объединения и в определенных обстоятельствах могут возвращать идентичные результаты.)
Выполнение вычислений в запросах
В строках запроса допускается выполнение вычислений. Для этого нужно просто заменить имя поля в предложении SELECT именем арифметического выражения. Допустим, вам нужно создать запрос для вычисления налога с продаж для складских запасов (сведения о которых хранятся в таблице tblItem). В приведенном ниже запросе SQL вычисляется налог с продаж с учетной ставкой 7,5% для каждого товара.
SELECT ID, Item, Price, Price * 0.075 AS SalesTax
FROM tblItem
После выполнения этого запроса будут получен показанный ниже результат.
ID | Name | Price | SalesTax |
---|---|---|---|
1 | Rubber Chicken | 5.99 | 0.44925 |
2 | Hand Buzzer | 1.39 | 0.10425 |
3 | Stink Bomb | 1.29 | 0.09675 |
4 | Disappearing Penny Magic Trick | 3.99 | 0.29925 |
5 | Invisible Ink | 2.29 | 0.17175 |
6 | Loaded Dice | 3.49 | 0.26175 |
7 | Whoopee Cushion | 5.99 | 0.44925 |
Поскольку в этих вычислениях фигурируют деньги, конечный результат нужно округлить до двух десятичных знаков. К счастью, в SQL Server для этого предусмотрена специальная функция ROUND, которая позволяет очень легко выполнить это. Обычно ее используют с указанием двух параметров: собственно десятичного числа и точности, выраженной в виде количества знаков после запятой. Вот как выглядит запрос с функцией ROUND:
SELECT Name, Retail Price, ROUND (Retail Price + Retail Price * 0.075, 2)
AS PriceWithTax
FROM tblInventory
Результат выполнения этого запроса приведен ниже.
Name | Retail Price | PriceWithTax |
---|---|---|
Rubber Chicken | 5.99 | 6.44 |
Hand Buzzer | 1.39 | 1.49 |
Stink Bomb | 1.29 | 1.39 |
Disappearing Penny Magic Trick | 3.99 | 4.29 |
Invisible Ink | 2.29 | 2.46 |
Loaded Dice | 3.49 | 3.75 |
Whoopee Cushion | 5.99 | 6.44 |
Определение псевдонимов с использованием предложения AS
Из предыдущего примера ясно, что существует возможность определения псевдонимов (alias), т.е. переименования полей в запросе. Это может быть вызвано следующими причинами:
• в основной таблице имена полей могут быть громоздкими, а в результирующем наборе должны быть понятными и простыми;
• запрос создает столбец, который заполняется в результате некоторых вычислений или операций подведения итогов, а новому столбцу обязательно нужно задать имя.
Независимо от причины, это легко сделать в запросе SQL с помощью предложения AS. Например, вам нужно выполнить ряд сложных вычислений для определения суммарной стоимости отгруженных товаров ExtendedPrice. Для этого напишите следующий код SQL:
SELECT TOP 5 ItemID, Quantity, Price,
tblInventory.RetailPrice * tblOrderTime.Quantity AS ExtendedPrice
FROM tblOrderTime INNER JOIN
tblInventory ON tblOrderTime.ItemID = tblITem.ID
Этот запрос возвращает приведенный ниже результирующий набор.
ItemID | Quantity | RetailPrice | ExtendedPrice |
---|---|---|---|
1 | 1 | 5.99 | 5.99 |
2 | 2 | 1.39 | 2.78 |
5 | 3 | 2.29 | 6.87 |
4 | 2 | 3.99 | 7.98 |
7 | 1 | 5.99 | 5.99 |
Обратите внимание, что данные в поле ExtendedPrice не хранятся в базе данных, они вычислены "на лету".
Запросы, которые группируют данные и подводят итоги
Часто требуется создавать запросы, подобные следующему: "Сколько заказов поступило вчера?" При этом вас не интересует, кто оформил заказ, вы только хотите знать количество вчерашних заказов. Это можно сделать, используя запросы, группирующие итоговые функции.
Читать дальшеИнтервал:
Закладка: