Программирование >>  Исключение дубликатов строк 

1 ... 107 108 109 [ 110 ] 111 112 113 ... 152


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

Вспомнив INNER JOIN, вы можете спросить, почему бы не решить эту задачу так, как уже описано, вместо того чтобы объединять Orders в JOIN с Customers в условии FROM внешнего запроса. На самом деле именно сейчас наше внимание сосредоточивается на концепции использования подзапросов для создания столбца вывода в очень простом примере, и действительно, возможно, следует решить эту конкретную задачу, используя INNER JOIN:

SELECT Orders.OrderNumber, Orders.OrderDate,

Orders.ShippedDate, Customers.CustLastName FROM Customers INNER JOIN Orders ON Customers.CustomerlD = Orders.OrderlD WHERE Orders.ShippedDate = 1999-12-24

Воедение a огрсготныс функции - COUNT и МПХ

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

Стандарт SQL определяет множество функций, которые вычисляют значения в запросе. Один из подклассов функций - агрегатные функции - позволяет вычислять одно значение для группы строк в наборе результатов. Например, агрегатной функцией можно воспользоваться для подсчета строк, поиска наибольшего или наименьшего значения для некоторого множества строк или для вычисления среднего или общего значения или выражения по набору результата.

Рассмотрим две из этих функций. На рис. 11.4 показана диаграмма для функций COUNT и МАХ, которые могут сформировать столбец вывода в условии SELECT.

COUNT {*)

у

COUNT

L DISTINCT

Типизированное выражение J

M4

Рис. 11.4. Использование агрегатных функций COUNT и MAX

Функция COUNT может использоваться для определения количества строк или отличных от Null значений в наборе результата. COUNT(*) используется для определения количества строк во всем множестве. Если в наборе результатов конкретный столбец определяется с использованием COUNT (column name), то СУБД высчитывает количество строк, в которых значение этого столбца не равно Null. Можно также запросить подсчитать только уникальные значения, добавив ключевое слово DISTINCT.



Подобным образом можно найти наибольшее значение в столбце, используя функцию МАХ. Если типизированное выражение является числовым, то наибольшее число будет получено из определенного вами столбца или выражения. Если же типизированное выражение возвраи;ает данные символьного типа, то наибольшее значение будет зависеть от сортируюи;ей последовательности, используемой системой базы данных.

Попробуем применить эти функции в подзапросе для решения нескольких интересных задач.

List all the customer names and a count of the orders they placed . ( Привести список имен всех клиентов и количество размещенных ими заказов .)

Преобразование:

Уточнение:

Select customer first name, and customer last name,

and also select the count of orders from the orders table

for this customer from the customers table

(Выбрать имя и фамилию клиента, а также подсчитать

количество заказов из таблицы Заказы

для этого клиента из таблицы Клиенты )

Select customer first name, а ё customer last name, and also (select count of orders (*) from fte orders table for this where customerlD = customerlD) from

customers table (Выбрать имя клиента, фамилию клиента (Выбрать количество (*) из Заказы ,

где идентификатор клиента из Клиенты )

customerlD)

SELECT Customers.CustFirstName, Customers.CustLastName,

(SELECT COUNT(*) FROM Orders

WHERE Orders.CustomerlD = Customers.CustomerlD) AS CountOfOrders FROM Customers

Подзапросы как выходные столбцы начинают теперь выглядеть интересно! Из следуюших глав вы узнаете больше о творческих подходах к использованию агрегатных функций. Но, если требуется только подсчет соответствуюи;их строк, то подзапрос является хорошим способом. Теперь рассмотрим интересную задачу, которая использует преимуи;ества другой агрегатной функции - МАХ.



Уточнение:

Show те а list of customers and the last date on which they placed an order .

( Показать список клиентов и последнюю дату размещения ими заказа .)

Преобразование: Select customer first name, and customer last name,

and also select the highest order date from the orders table for this customer from the customers table

амилию клиента, a также выбрать последнюю дату заказа из таблицы Заказы Д/1Я этого клиента из таблицы Клиенты )

Select customer first name, me customer last name, and als (select the highest max(order date) from the orders table for this where customerlD = customerlD) from the customers table (Выбрать имя клиента, фамилию клиента и (Выбрать тах(дата заказа) из Заказы , где идентификатор клиента = customerlD) из Клиенты )

SELECT Customers.CustFirstName,

Customers.CustLastName, (SELECT MAX(OrderDate) FROM Orders

WHERE Orders.CustomerlD = Customers.CustomerlD) AS LastOrderDate FROM Customers

Использование функции MAX таким образом хорошо работает для поиска наибольших или новейших значений из любых связанных таблиц.

Подзапросы кок фильтры

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

Синтаксис

Вернемся к предыдущеему оператору SELECT и рассмотрим синтаксис построения запроса с простым предикатом сравнения в условии WHERE. На рис. 11.5 представлена упрощенная диаграмма.

На рис. 11.2 показано, что типизированное выражение может быть подзапросом. В простом примере на рис. 11.5 типизированное выражение сравнивается с отдельным столбцом. Таким образом, типизированное выражение должно быть одиночным значением, т. е. скалярным подзапросом, который возвращает точно один столбец



1 ... 107 108 109 [ 110 ] 111 112 113 ... 152

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика