6.3 クエリの作成
6.4.2 SQL 言語
最もよく使用され、しかも最も強力なデータベース形式のアプリケーションは、SQL(Structured Query Language) に基づく DBMS アプリケーションです。SQL データベースは、通常、クライアント/サーバネットワークアーキテ クチャで動作します。データベースファイル、テーブル、フィールド、およびレコードは、SQL サーバで作成、保 存、また操作されます。また、ワークステーションユーザは、SQL クライアントのインタフェースを使用して、デー タベースファイルを設計および操作するだけでなく、日常業務の役に立つ重要なデータも取得できます。
6.4.2.2 DISTINCT
DISTINCT 句は、重複しない一意なデータセットだけを取得するように要求します。DISTINCT 句を使用する と、同じ内容のレコード(行)は、一度しか取得されません。DISTINCT 句を使って前の SELECT 文を変更する と、次のようになります。
SELECT DISTINCT TABLEA.'CUSTNAME', TABLEA.'STATE'
6.4.2.3 FROM
FROM 句は、SELECT 句で指示されるデータベースフィールドのソースを指定します。FROM には、必要な データを含むフィールドとそのレコードを持つデータベーステーブルを指定します。Crystal Reports が生成す る FROM 句では、テーブル名の前にエイリアスが付き、レポートの中のテーブルを識別しています。次の例で は、SELECT 句と共に FROM 句を使用しています。
SELECT
TABLEA.'CUSTNAME', TABLEA.'STATE' FROM
'TABLEA' TABLEA
6.4.2.4 WHERE
WHERE 句には、2 つの目的があります。
• レコードの選択基準を指定します。
• 2 つのデータベーステーブルの結合方法を指定します。
レコードの選択基準を指定するために WHERE が使用される場合は、どのレコード(データ行)を取得するかを 決定する検索条件が WHERE に含まれます。以下はその例です。
SELECT
MYTABLE.'SALESPERSON', MYTABLE.'SALESTOTAL' FROM
'MYTABLE' MYTABLE WHERE
MYTABLE.'SALESTOTAL' < 10000.00
次の例では、WHERE 句で 2 つのテーブルを結合しています。
SELECT
CUSTOMER.'CUST_ID', CUSTOMER.'CUST_NAME', ORDERS.'AMOUNT' FROM
'CUSTOMER' CUSTOMER, 'ORDERS' ORDERS WHERE
CUSTOMER.'CUST_ID' = ORDERS.'CUST_ID'
6.4.2.5 ORDER BY
ORDER BY 句は、取得したデータベースレコードを特定のフィールドの値に基づいて並べ替えることを指定し ます。ORDER BY 句を使用しない場合、レコードは、元のデータベースにある順番に取得されます。ORDER BY 句の後ろに、複数のフィールドが指定された場合、プログラムは、最初に指定されたフィールドの値の順番 でレコードを並べ替えます。その後、最初の並べ替えで順番が同じだったレコードを 2 番目に指定されたフィー ルドの値で並べ替えます。次の SQL 文では、ORDER BY 句を使用しています。
SELECT
MYTABLE.'COMPANY', MYTABLE.'CITY', MYTABLE.'STATE' FROM
'MYTABLE' MYTABLE ORDER BY
MYTABLE.'STATE' ASC, MYTABLE.'CITY' ASC
注
ASC は、フィールドの値が降順(DESC)ではなく、昇順に並べ替えられることを示しています。昇順では、アル ファベットは A から Z の順に、数値は 0 から 9 の順に並べ替えられます。
6.4.2.6 GROUP BY
GROUP BY 句は、集計データセットを取得します。GROUP BY は、データ自体を取得する代わりに、データを グループ化し、SQL の集計関数を使って各グループを集計します。サーバは、Crystal Reportsに各グループ の集計情報だけを返します。
以下はその例です。
SELECT
MYTABLE.'STATE', MYTABLE.'ZIPCODE', SUM (MYTABLE.'SALES') FROM
'MYTABLE' MYTABLE GROUP BY
MYTABLE.'STATE', MYTABLE.'ZIPCODE'