Программирование >>  Программирование баз данных 

1 ... 21 22 23 [ 24 ] 25 26 27 ... 346


Итак, предположим, что должен быть проведен мысленный эксперимент, в котором рассматривается возможность участия любого актера в любом кинофильме:

SELECT *

FROM Film f

CROSS JOIN Actors a;

В результате выполнения этого оператора формируются результаты, в которых каждая строка из таблицы Film согласована с каждой строкой с данными об актере из таблицы Actors:

FilmlD FilmName YearMade FilmlD FirstName LastName

My Fair Lady My Fair Lady My Fair Lady Unforgiven Unforgiven Unforgiven

1964 1964 1964 1992 1992 1992

Audrey Rex

Anthony

Audrey

Anthony

Hepburn

Harrison

Hopkins

Hepburn

Harrison

Hopkins

(6 row(s) affected)

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

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

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

Подводя итог, можно отметить, что перекрестные соединения используются довольно редко, но когда в этом возникает необходимость, без них действительно трудно обойтись!

Конструкция where

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



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

В контексте данного изложения не следует путать простой домен с доменом Windows. Листинг доменов - это список исключительных вариантов выбора. Например, если требуется предоставить в программе информацию о каком-то штате США, то можно предусмотреть использование списка, который ограничивает перечень вариантов только пятидесятью штатами.

След)ет также учитьтать, что операции соединения, в которых не используются критерии выборки, позволяют также получать в полном объеме взаимосвязанные данные.

Теперь мы попытаемся выполнить поиск более конкретной информации. Прежде всего попробуйте самостоятельно подготовить запрос, который возвраш;ает наименование, код товара и информацию о том, каковы условия возобновления запасов этого товара применительно к товару с идентификатором Product ID, равным 356.

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

Заранее отметим, что в этот раз предусмотрено применение таблицы Production. Product (ниже в этой главе приведена информация о том, как узнать состав доступных таблиц, если этой информации еш;е нет в нашем распоряжении). Таблица Production. Product имеет несколько столбцов. Для быстрого ознакомления с имеюш;имся выбором столбцов можно изучить дерево Object Explorer таблицы Production. Product с помош;ью программы Management Studio. Чтобы открыть нужное окно в программе Management Studio, ш;елкните на элементе Tables, находящимся под обозначением базы данных AdventureWorks. В результате этого развернутся узлы Production. Product и Columns. Как показано на рис. 3.1, появится список всех столбцов с обозначением типов хранимых в них данных и с указанием возможности представлять с их помощью неопределенные данные (nullability). Ниже в этой главе будут описаны и некоторые другие методы поиска необходимой информации.

В этом списке не удается найти столбец Product Name (наименование товара), но имеется столбец Name, который, по-видимому, нам как раз и требуется (не правда ли, у него весьма оригинальное имя!?). Другие два столбца можно найти гораздо проще, если не считать того, что в их именах отсутствует пробел между двумя словами.

Итак, источником данных, из которого должна быть получена информация, указанным в конструкции FROM, является таблица Products, а конкретными столбцами, в которых находится требуемая информация, являются столбцы Name (Наименование), ProductNumber (Код товара) и ReorderPoint (Условие возобновления запасов):

SELECT Name, ProductNumber, ReorderPoin FROM Production.Product;




Object Explorer

Connect - ;5 J

= j AdventureWorks

Ш CJ C>atabese Diagrams

В lli Tables

ffi a System Tables

Ш dbd.AWButldVersion

Ш dbo.DatabaseLog

S □ dbo.ErrorLog

Q СЭ dbo.sysdiagrdms

S □ HumanResources.Departfiftent

Б □ HumanResources. Employ ее

Ш u3 HumanResources. Employ ее Address

S □ HumanResources.EmployeeDepartmenthistory

Ш □ HumanResources.EmpoyeePayHistory

Q Э HumanResources, JobCandidate

S □ HumanResources. Shi Ft

Ш □ Person.Address

Ш [3 Person.AddressType

S □ Person.Contact

Ш □ Person,CcfftectType

Ш c3 Person. Country Reg ion

Ш Person.tateProvince

Ш □ Production.BJtlOfMaterlals

Q 13 Production.Cultlfre

Ш □ Production.Document

S G! Production,Illustration

Ш □ Production.LQcatbn

a Columns

j ProductID(PK, intnotnuH) Й Name (Name(nvarchar(50)) not null) Ш ProductNumber (rwarchar(25), not null) Ш MakeF!ag(Ftag(bit), not nuH) и FinishedGoodsFlag (Flag(bit), not nijll) Ш Color(nvarchar(15), null) Ш SaFetyStockLevel (smaint, not null)

ReorderPoint (smalbnt, not null) Ш StandardCost (money, not null) [D ListPrice (толеу, not null) Ш Size (nvarchar(5), null) f SzeUnitMeasureCode (FK, nchar(3L nu f WeitUnitMeasureCode (FK nchar(3), nuU) Ш Weight (decimal(e,2), null) Ш OaysToManufacture (int, rrat пиИ) Ш ProductLine (nchar(2)j null) Ш Class (nchar(2), null) 11 Style (nchdr(2X null) f ProductSubcategorylD (FK int, null) f Product№dalIO (FK, int, null) Й SellStartDate (datetime, not rdl) Ш SellEndDate (datetime, null) Ш DiscontinuedDate (datetime, null) Ш rowguid (oniqueidentiFier, not nuB) [Ц ModifiedDate (datetime, not null) Ш Keys ffl Lj Constraints ffl li Triggers ffl a Indexes

Puc. 5.i. Столбцы таблицы Production. Product



1 ... 21 22 23 [ 24 ] 25 26 27 ... 346

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