Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#238<< #239 |
СОДЕРЖАНИЕ Применение коррелированных подзапросов в T-SQL
По материалам статьи Gregory A. Larsen:
Using a Correlated Subquery in a T-SQL Statement В прошлом месяце в своей статье я рассматривал вопрос применения подзапросов в операторах T-SQL. В этот раз я более подробно остановлюсь на этой теме, и рассмотрю коррелированные подзапросы. Я объясню, что же представляет собой коррелированный подзапрос, и на нескольких примерах продемонстрирую его возможности. Что такое - Коррелированный Подзапрос?
Коррелированный подзапрос - это оператор SELECT, вложенный в другой оператор T-SQL, и ссылающийся на один или
несколько столбцов внешнего запроса. Поэтому можно сказать, что коррелированный подзапрос зависит от внешнего
запроса. Это - главное различие между коррелированным и простым подзапросом. Простой подзапрос не ссылается на
внешний запрос, он может быть выполнен независимо от него. После того как коррелированный подзапрос будет связан
с внешним запросом, он будет возвращать сообщение о синтаксической ошибке, если попытается вызвать самого себя. Применение коррелированного подзапроса в условии WHERE Предположим, что Вы хотите получить список всех OrderID, для которых покупатели приобрели не больше 10% от среднего объёма продаж каждого из товаров. Подобный анализ покажет тех покупателей, с которыми нужно связаться, чтобы выяснить причину столь низкого интереса к приобретённому товару. Для этих целей можно использовать коррелированный подзапрос, который будет помещён в предложении WHERE. Вот запрос, который вернет интересующий нас список товаров:
В приведённом выше запросе коррелированный подзапрос располагается в круглых скобках. Как Вы могли заметить, этот коррелированный подзапрос содержит ссылку на "OD.ProductID". Эта ссылка участвует в сравнении "ProductID" внешнего запроса с "ProductID" внутреннего запроса. Движок SQL Server будет исполнять внутренний запрос (коррелированный подзапрос) для каждой записи "[Order Details]". Этот внутренний запрос подсчитает среднее количество (Quantity) для записей каждого товара (ProductID), отобранных во внешнем запросе. Средствами коррелированного подзапроса будет определено, возвращает ли внутренний запрос значение, удовлетворяющее условию WHERE. Если да, то строка, возвращенная внешним запросом, будет включена в итоговую выборку всего запроса T-SQL. В следующем примере, также использующем коррелированный подзапрос в операторе WHERE, отбираются по два лучших по сумме покупок в долларах США покупателя для каждого региона. Подобный запрос может быть полезен при необходимости поощрения лучших в своих регионах покупателей.
Как видно из примера, внутренний запрос - коррелированный, потому что он ссылается на "OuterC", псевдоним использующейся во внешнем запросе таблицы "Northwind.DBO.Customer". Внутренний запрос использует значения поля "Region" для определения двух лучших покупателей в каждом регионе, ассоциированных со строкой внешнего запроса. В результирующую выборку попадут записи о тех двух "CustomerID" из внешнего запроса, которые попадут в число лучших покупателей. Коррелированный подзапрос в разделе HAVING Допустим, в целях увеличения своего дохода ваша организация решила в течение года проводить акцию по стимуляции потребительского спроса. Для этого покупатели извещаются о том, что если каждый сделанный ими в течение года заказ будет превышать сумму 750$, то в конце года на каждый их заказ вы сделаете скидку в 75$. Ниже приведен пример вычисления размера скидки. В этом примере для определения подпадающих под условие получения скидки покупателей, используется коррелированный подзапрос, помещённый в раздел HAVING.
Как Вы можете заметить, имеющийся в разделе HAVING коррелированный запрос используется для того, чтобы вычислить
сумму заказа для каждого заказа клиента. Из внешнего запроса выбираются "CustomerID" и "Datepart (yy, OrderDate)"
- год, когда был сделан заказ - которые нужны для того, что бы отобрать те заказы клиента, которые были сделаны
в 1998 году. Для отобранных таким образом записей вычисляется сумма покупки по каждому заказу, для чего суммируются
все записи "[Order Details]" по такой формуле: sum(UnitPrice * Quantity * (1-Discount)). Если каждая сделанная
в 1998 покупка клиента превышает в сумме 750$, тогда во внешнем запросе вычисляется размер скидки по формуле:
"Count (*) * 75". Применение коррелированного подзапроса в оператора Update Коррелированный подзапрос также может использоваться и в операторе Update:
В результате мы получим:
В приведенном выше запросе коррелированный подзапрос используется для замены значений в столбце S таблицы А на сумму столбца B таблицы B , для тех строк, которые имеют одинаковые значения столбцов А, как в используемых для суммирования, так и в обновляемых строках. Заключение Давайте теперь подведём небольшой итог в этой статье. Подзапрос и коррелированный подзапрос - это операторы SELECT, используемые в другом запросе, называемом внешним. Коррелированный подзапрос и простой подзапрос очень полезны в оформлении выборки данных. Подзапрос, когда он выполняется независимо от внешнего запроса, возвращает выборку, которая также будет независимой от внешнего запроса. В свою очередь, коррелированный подзапрос не может исполняться независимо от внешнего запроса, потому что он ссылается на один или несколько столбцов внешнего запроса. Надеюсь, что теперь вы понимаете разницу между обычным и коррелированным подзапросом, и как их можно применять в T-SQL. Статьи на русском языке
SQL Server: цены растут, но есть версия для рабочих групп
Designing Cross Database Queries Самые популярные темы недели
Новые упражнения на http://sql.ipps.ru
Замедление работы SQL при ключах /PAE /3GB Работа с базами данных в Delphi
Журнал "SQL Server для профессионалов", февральский выпуск
Журнал, посвященный вопросам разработки и администрирования Microsoft SQL Server. Подписка без дискеты - индекс: 79946.
Подписка с дискетой - индекс: 79947. На дискете размещаются исходные тексты ко всем статьям номера. Исходники
также можно скачать с сайта журнала, если обратиться по адресу, приведенному ниже. Периодичность выпуска - один
раз в месяц. Минимальный срок подписки - 1 месяц. Информацию о ранее вышедших номерах можно найти по адресу
http://newsletter.narod.ru
Джошуа Хоскинс (Joshua Hoskins, перевод Ирины Наумовой)
Если вы администратор баз данных, в ваши обязанности, возможно, не входит обновление операционной системы
на сервере баз данных, но при решении задач повышения производительности
SQL Server путем модернизации операционной системы сервера до Windows 2003 придется расширить таким
образом круг своих задач. Приготовления
Вопервых, вы должны убедиться в том, что установлен SQL Server 2000 SP3. Запуск обновления
Есть два пути обновления вашего кластера, хотя они состоят
из похожих шагов. Различаются они только временем, которое проходит между
обновлением узлов. Метод поочередного обновления состоит в обновлении сначала
одного узла кластера, а затем постепенном перемещении ресурсов кластера на
другой узел, что повышает производительность и стабильность системы. Хотя я
нахожу этот метод наиболее предпочтительным, так как при этом у вас всегда
имеется один исправный узел, он накладывает ограничение на создание кластерных
ресурсов в смешанном режиме (когда отличаются операционные системы на разных
узлах кластера). Итоги После модернизации вы сразу же заметите повышение производительности процессов, для которых необходимы частые операции вводавывода. Как было упомянуто выше, я добился увеличения скорости на 25%. Одно это служит стимулом для перехода на Windows Server 2003. Подготовительная работа перед обновлением может быть несколько утомительна, но она полностью окупается тем, что обновление затем проходит без помех. DB Design & Warehousing: Делегирование учетных записей средствами деперсонификации Используйте эти возможности AD для идентификации пользователей Кевин Кристенсен (Kevin Christensen)
Профессионалы ИТ отвечают за гарантии того, что системы,
которые они разрабатывают и администрируют, защищены всеми доступными средствами
как от внешних, так и от внутренних угроз. Жизненно важным, но зачастую
упускаемым аспектом компьютерной безопасности является безопасность системы
управления базами данных. В таких системах управления базами данных, как
SQL Server, безопасность начинается с процесса
идентификации, который представляет собой процедуру проверки того, что
пользователь, запрашивающий некоторую услугу, является легальным пользователем и
уполномочен получать доступ к этой услуге. (Полный текст статьи опубликован в журнале) DB Design & Warehousing: Блокировки в SQL Server По материалам статьи Andres Taylor Advanced SQL Server Locking
Я думал, что знаю SQL Server достаточно хорошо. Я использую этот продукт уже больше 6 лет, и мне нравится
знать об используемых мною инструментах все. Когда я преподавал на курсах
программирования SQL Server, я заметил, что в материалах Microsoft представлена таблица
совместимости блокировок. Та же таблица была представлена и в
MSDN. Рассматривая эту таблицу, я удивился: неужели здесь нет блокировки
Intent Update? Это привело меня к исследованию
блокировок. Данная статья и есть результат этого исследования. Я написал эту
статью для определенного читателя — для того, кто понимает уровни изоляции,
блокировки намерения, мертвые блокировки и уровни блокировок. Если вы
недостаточно уверенно разбираетесь в этих областях, вам нужно сначала
ознакомиться с ними перед чтением этой статьи. (Полный текст статьи опубликован в журнале) Programming: Асинхронное выполнение хранимой процедуры Грегори Ларсен (Gregory Larsen)
Интересовались ли вы когданибудь, можно ли выполнять
хранимую процедуру асинхронно по отношению к какомулибо коду TSQL? Я имею в виду запуск хранимой процедуры
в фоновом режиме и продолжение выполнения следующей строки кода сценария TSQL до окончания
выполнения хранимой процедуры. В этой статье рассказывается, когда может
понадобиться асинхронное выполнение хранимых процедур, как его осуществить, и
рассматривается пример, который поможет вам попрактиковаться в его запуске. (Полный текст статьи опубликован в журнале) Programming: Журналирование изменений структуры БД и данных. Часть 1 Задачи журналирования различных событий, происходящих в базе данных, рано или поздно встают практически перед каждым, кто имеет отношение к процессу разработки, поддержки и сопровождения, администрирования, документирования и распространения программных систем, связанных с использованием БД. Задачи, которые решает контроль изменений структуры Задачи, которые решаются контролем изменений данных (Полный текст статьи опубликован в журнале) Журнал "Алгоритм", первый номер (48 страниц) Этот журнал возник как логическое продолжение рассылки ".Net Собеседник", которая выпускается почти год и насчитывает на сегодняшний день более 35 выпусков и более 2600 подписчиков. Основное направление статей, которые будут печататься в журнале, будет касаться платформы .Net и сопутствующих ей технологий, языков программирования в среде Windows, администрирования и программирования серверов баз данных. Среди авторов будут многие известные вам по форумам www.sql.ru имена.
Здравствуйте, Александр! Спасибо за то, что согласились дать интервью. Расскажите немного о себе.
Резервное копирование в репликации SQL Server Автор : А. Гладченко
В этой статье рассматриваются требования к резервному копированию баз данных, задействованных в репликации моментальных снимков, репликации транзакций или репликации слиянием. Эти требования зависят от роли, которую сервер исполняет в репликации и от места, где в топологии репликации необходимо обеспечить восстановление тиражируемых данных. Чтобы восстановить участвующие в репликации данные, необходимо регулярно резервировать издателей, дистрибуторов и подписчиков. Статья основана на материалах электронной
документации, поставляемой в дистрибутиве сервера баз данных SQL Server 2000 Books Online.
Передача значений между веб-формами в ASP.NET Автор : Бипин Джоши; Дополнения : С.Топорков
Веб-формы ASP.NET предлагают прекрасную событийно-управляемую программную модель для разработчиков. В целом она упрощает дизайн вашего приложения, но и сама по себе порождает некоторые проблемы. Например, в традиционном ASP можно было легко передавать значения от одной страницы к другой странице с использованием метода POST. Этим подходом нельзя воспользоваться в ASP.NET, если вы хотите использовать модель веб-форм (т.е. форма и элементы управления обрабатываются на стороне сервера). Однако есть несколько подходов,
с помощью которых можно преодолеть эти ограничения. Например, значения можно передавать в строке запроса, используя сессионные переменные или с использованием метода Server.Transfer.
Компоненты контроля ввода ASP .Net Автор : В. Чужа
Идея контролировать ввод пользователя программного обеспечения (ПО), в зависимости от типа данных или по шаблону, наверняка возникла у разработчиков ПО вместе с первыми ошибками ввода и была реализована во многих программных продуктах. Например, в Turbo Vision фирмы Borland класс TinputLine имеет метод Valid, перекрыв который можно вести контроль правильности ввода данных. При работе с базами данных есть возможность задать так называемые constraints - ограничения на ввод на уровне, например, поля (столбца)
или таблицы. Так, в СУБД MS SQL Server 2000 имеются такие типы ограничений на ввод на уровне поля (домена в терминах SQL Server), как DEFAULT - значение по умолчанию, CHECK - проверка значения на допустимость занесения в поле и REFERENTIAL - значение должно соответствовать одному из значений в другой таблице. Эти примеры являются разными способами реализации контроля ввода пользователя, служащие одной цели - повышению надёжности работы программного обеспечения. Наверняка именно поэтому не обошла вниманием
эту идею и компания Microsoft в ASP.Net, представив нам 6 компонент для контроля ввода пользователя (ККВ). Разберём их подробнее.
Технологии построения распределенных приложений в .NET. Часть 3. Пространство имен System.EnterpriceServices Автор : М.Сухов
COM+, так же как и MSMQ, пришел к нам из века неуправляемых приложений. Раньше без таких компонентов не могло обойтись ни одно серьезное распределенное приложение. С появлением .NET картина несколько изменилось. COM+ никуда не ушел, зато появилась управляемая надстройка над ним, Serviced Components. И сейчас мы поговорим, как создавать компоненты на базе этой технологии и как использовать в программе поддержку COM+ сервисов.
System.Object под микроскопом Remotesoft .Net Explorer'a Автор : В.Чужа
Как вам должно быть известно, типы в C# бывают двух видов - ссылочные и структурные. Первые производятся от класса System.Object, вторые - от класса System.ValueType, который, в свою очередь, является также наследником класса System.Object. Различие переменных этих типов заключается в том, что переменные (или объекты) ссылочных типов размещаются в управляемой куче, в то время как переменные структурных типов (к которым относятся перечисления, структуры и все числовые типы данных) - в стеке. Общность их заключается
в том, что все они являются наследниками класса System.Object, о котором мы и поговорим подробнее.
Подсистема сопоставления записей в Хранилище Данных Автор : Д.Орлов
Данная статья рассчитана на разработчиков информационных систем, специализирующихся в области обработки и хранения данных.
В статье излагаются принципы проектирования и работы подсистемы сопоставления записей (далее - подсистема) хранилища данных, предназначенной для реальной интеграции данных, поступающих из различных информационных систем.
Сопоставление записей (record linkage) - задача достаточно нетривиальная и, что немаловажно, мало описанная в русскоязычной технической литературе, так что данная статья является попыткой в какой-то мере восполнить этот пробел.
Делаем отчёты в .Net своими руками Автор : В.Чужа
Помню в конце 80-х годов, ещё во времена существования СССР, по телевидению показывали французский мультик-экранизацию романа Ж.Верна "Вокруг света за восемьдесят дней". Мультик был так себе, но запомнились высказывания одного из главных героев романа, Филиаса Фогга, одно из которых взято в роли эпиграфа к данной статье. Дело в том, что в случае необходимости создания отчётов на платформе .Net программисты часто пользуются либо встроенным генератором отчётов Crystal Reports компании Business Solutions, либо
генераторами отчётов сторонних производителей. С ними то и дело возникают различные проблемы, в то время как сама платформа предоставляет прекрасные возможности по созданию отчётов в виде html-файлов с использованием Internet Explorer'a (да и вообще любого браузера) в качестве средства для их просмотра и печати.
|
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||