РИС. 2.6. Выполнение запроса на основе объединения двух таблиц в окне конструктора представлений
Этот запрос возвращает приведенный ниже набор записей.
FirstName LastName OrderDate John Smith 1/4/2001 John Smith 1/9/2001 Jill Azalia 1/14/2001 Brad Jones <NULL> Daisy Klein 2/18/2001 Daisy Klein 3/21/2001 Daisy Klein 4/4/2001 Dave Martin 6/5/2001 Betty Klein <NULL> Thurston Ryan 7/2/2001 Jane Winters 8/16/2001 Jane Winters 9/10/2001В этот результирующий набор включены все клиенты базы данных, независимо от того, имеют ли они заказы или нет. Для клиентов, не имеющих заказов, в поле OrderDate появится <NULL>, что означает отсутствие данных.
Правое внешнее объединение (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 не хранятся в базе данных, они вычислены "на лету".
Запросы, которые группируют данные и подводят итоги