ここでは,属性検索(プロパティを指定した検索)でのedmSQLの指定例を示します。
この指定例で検索の対象になる文書は,次のようなクラスから作成された文書です。
表5-39 Document Xクラスのプロパティ
プロパティ名 | 内容 |
---|---|
DocCode | 文書を管理するためのコード |
Title | タイトル |
Author | 著者 |
AuthorId | 著者ID |
Abstract | 概要 |
CreateDate | 作成日 |
表5-40 OwnersListクラスのプロパティ
プロパティ名 | 内容 |
---|---|
DocCode | 文書を管理するためのコード |
Owner | 所有者 |
表5-41 Dictionary Yクラスのプロパティ
プロパティ名 | 内容 |
---|---|
Name | 名前 |
Birthday | 誕生日 |
EntryId | エントリーID |
表5-42 myPaperクラスのプロパティ
プロパティ名 | 内容 | |
---|---|---|
Title | タイトル | |
Authors※ | Name | 名前 |
Org | 所属 |
注※ 基本単位がVariableArray型のプロパティです。
ここでは,一つのクラスに対して実行する属性検索の指定例を示します。
<検索対象>としてDocument Xクラスを,<選択項目>としてTitleプロパティ,AuthorプロパティおよびAbstractプロパティを取得する例を示します。
SELECT Title,Author,Abstract
FROM "Document X"
(a)に加えて,検索条件としてWHERE句に「Authorプロパティが『日立太郎』で,CreateDateプロパティが20000101以上」という条件を指定する例を示します。
SELECT Title,Author,Abstract
FROM "Document X"
WHERE Author = '日立太郎' AND CreateDate > '20000101'
Document Xクラスから,Authorプロパティを,重複を排除して取得する例を示します。
SELECT DISTINCT Author
FROM "Document X"
Document Xクラスから作成された文書から,OIIDを指定して,Titleプロパティ,AuthorプロパティおよびAbstractプロパティを取得する例を示します。なお,OIIDは,oiid関数を使用して指定します。
SELECT Title,Author,Abstract
FROM "Document X"
WHERE dmaProp_OIID = oiid('dma:///xxx/xxx/xxxxxxxxxx...xxx')
ここでは,複数のクラスを結合した検索対象クラスに対して実行する属性検索の指定例を示します。
なお,edmSQLで実行できる結合の方法には,次の2種類があります。
それぞれの場合の指定例を示します。
Document XクラスとOwnersListクラスを内部結合して,Document Xクラスの文書のTitleプロパティ,Document XクラスのAuthorプロパティおよびOwnersListクラスのOwnerプロパティを取得する例を示します。ここでは,次の二つの方法の指定例を示します。
結合では,Document XクラスのDocCodeプロパティとOwnersListクラスのDocCodeプロパティが一致することを条件とします。
なお,Document Xクラスの<相関名>としてDX,OwnersListクラスの<相関名>としてOLを使用します。
SELECT DX.Title,DX.Author,OL.Owner
FROM "Document X" DX, OwnersList OL
WHERE DX.DocCode = OL.DocCode
SELECT DX.Title,DX.Author,OL.Owner
FROM "Document X" DX INNER JOIN OwnersList OL
ON DX.DocCode = OL.DocCode
Document Xクラス,OwnersListクラスおよびDictionary Yクラスを結合して,Document XクラスのTitleプロパティとDocument XクラスのAuthorプロパティ,Dictionary YクラスのBirthdayプロパティおよびOwnersListクラスのOwnerプロパティを取得する例を示します。ここでは,次の二つの方法の指定例を示します。
結合では,Document XクラスのDocCodeプロパティとOwnersListクラスのDocCodeプロパティが一致することと,Document XクラスのAuthorIdプロパティとDictionary YクラスのEntryIdプロパティが一致することを条件とします。
SELECT DX.Title,DX.Author,DY.Birthday,OL.Owner
FROM "Document X" DX,
OwnersList OL,"Dictionary Y" DY
WHERE DX.DocCode = OL.DocCode
AND DX.AuthorId = DY.EntryId
SELECT DX.Title,DX.Author,DY.Birthday,OL.Owner
FROM ("Document X" HD INNER JOIN OwnersList OL
ON DX.DocCode = OL.DocCode)
INNER JOIN "Dictionary Y" DY
ON DX.AuthorId = DY.EntryId
Document XクラスとOwnersListクラスを外部結合して,Document Xクラスの文書のTitleプロパティとDocument XクラスのAuthorプロパティおよびOwnersListクラスのTitleプロパティを取得する例を示します。
次のように指定します。
SELECT DX.Title,DX.Author,OL.Owner
FROM "Document X" DX LEFT OUTER JOIN OwnersList OL
ON DX.DocCode = OL.DocCode
Document Xクラス,OwnersListクラスおよびDictionary Yクラスを外部結合して,Document XクラスのTitleプロパティ,Document XクラスのAuthorプロパティ,Dictionary YクラスのBirthdayプロパティおよびOwnersListクラスのOwnerプロパティを取得する例を示します。
SELECT DX.Title,DX.Author,DY.Birthday,OL.Owner
FROM ("Document X" DX LEFT OUTER JOIN OwnersList OL
ON DX.DocCode = OL.DocCode) LEFT OUTER JOIN
"Dictionary Y" DY ON DX.AuthorId = DY.EntryId
ここでは,副問い合わせを指定する場合の属性検索の指定例を示します。
OIIDがわかっているDocument XクラスのオブジェクトのCreateDateプロパティよりも,Birthdayプロパティが新しい(値が大きい)Dictionary Yクラスのオブジェクトの,NameプロパティとBirthdayプロパティを取得する例を示します。
SELECT Name, Birthday
FROM "Dictionary Y"
WHERE Birthday > (SELECT CreateDate
FROM "Document X"
WHERE dmaProp_OIID =
oiid( 'dma:///xxx/xxx/xxxxxxxxxx...xxx'))
CreateDateプロパティが19990101よりも値が大きいDocument XクラスのオブジェクトのAuthorIdプロパティのどれかと,EntryIdプロパティの値が等しい,Document Xクラスの オブジェクトのNameプロパティとBirthdayプロパティを取得する例を示します。
SELECT Name, Birthday
FROM "Dictionary Y"
WHERE EntryId IN (SELECT AuthorId
FROM "Document X"
WHERE CreateDate < '19990101')
DictionaryクラスのオブジェクトのNameプロパティとDocument XクラスのオブジェクトのAuthorプロパティが一致する文書が一つでもあれば,そのDictionary Yクラスの文書のNameプロパティとBirthdayプロパティを取得する例を示します。
SELECT Name, Birthday
FROM "Dictionary Y" DY
WHERE EXISTS (SELECT *
FROM "Document X" DX
WHERE DY.Name = DX.Author)
ここでは,取得する検索結果の順序を指定する場合の属性検索の指定例を示します。
Document Xクラスの文書のうち,CreateDateプロパティの値が20000101よりも大きいオブジェクトを検索して,Titleプロパティ,Authorプロパティ,およびCreateDateプロパティを取得します。なお,この例では,Authorプロパティによって昇順に並べ替え,その中でCreateDateプロパティで降順に並べ替えて検索結果を取得します。まず,並べ替えのキーとしてソート項目指定番号を指定する例を示します。ソート項目番号は,AuthorプロパティはSELECT句で2番目に指定されているので「2」,CreateDateプロパティはSELECT句で3番目に指定されているので「3」になります。
SELECT Title,Author,CreateDate
FROM "Document X"
WHERE CreateDate > '20000101'
ORDER BY 2 ASC,3 DESC
これを,プロパティ名で指定すると,次のようになります。
SELECT Title,Author,CreateDate
FROM "Document X"
WHERE CreateDate > '20000101'
ORDER BY Author ASC,CreateDate DESC
ここでは,基本単位がVariableArray型のプロパティの検索方法について説明します。
ここでは,myPaperクラスの基本単位がVariableArray型のプロパティであるAuthorsプロパティを取得する例を示します。
SELECT Title,Authors
FROM myPaper
WHERE CreateDate > '20000101'
ここでは,myPaperクラスの基本単位がVariableArray型のプロパティであるAuthorsプロパティの,Orgプロパティが「日立製作所」であるオブジェクトのTitleプロパティとAuthorsプロパティを取得します。
SELECT Title,Authors
FROM myPaper
WHERE Authors[ANY].Org = '日立製作所'
ここでは,COUNT(*)関数およびCOUNT関数を使用した検索の指定例を示します。
Document Xクラスの文書のうち,作成日が「2000年1月1日」よりも新しい(CreateDateプロパティの値が「20000101」よりも大きい)文書の数を取得します。
SELECT COUNT(*) FROM "Document X"
WHERE CreateDate > '20000101'
次に,Document Xクラスの文書のうち,作成日が「2000年1月1日」よりも新しい(CreateDateプロパティの値が「20000101」よりも大きい)文書のAuthorsプロパティの値の数を,重複排除して取得します。
SELECT COUNT(DISTINCT Authors) FROM "Document X"
WHERE CreateDate > '20000101'