Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » データのクエリ

 

FROM 句:テーブルの指定

テーブル、ビュー、またはストアド・プロシージャのデータに関係のある SELECT 文には、FROM 句が必須です。

FROM 句には、2 つ以上のテーブルをリンクする JOIN 条件を記述できるほか、他のクエリ (派生テーブル) へのジョインを記述できます。これらの機能については、ジョイン:複数テーブルからのデータ検索を参照してください。

テーブル名の修飾

FROM 句では、テーブルとビューについては常に、次のようなフルネームでの構文を作成できます。

SELECT select-list
FROM owner.table-name;

テーブル名、ビュー名、またはプロシージャ名を修飾する必要があるのは、そのオブジェクトが現在の接続のユーザ ID と異なるユーザ ID によって所有されている場合、または所有者のユーザ ID が現在の接続のユーザ ID が所属するグループ名と異なる場合だけです。

相関名の使用

テーブル名に相関名を指定すると、読みやすさが向上し、テーブル名を参照する箇所で毎回完全な名前を入力する手間が省けます。相関名は、次のように、FROM 句でテーブル名の後に入力して割り当てます。

SELECT d.DepartmentID, d.DepartmentName
FROM Departments d;

相関名が使用される場合、たとえば WHERE 句の中など、そのテーブルに対する他のすべての参照には、テーブル名ではなく、必ず相関名を使用してください。相関名は有効な識別子としての規則に従っている必要があります。

FROM 句を参照してください。

派生テーブルのクエリ

派生テーブルは、クエリ式の評価によって、1 つまたは複数のテーブルから直接または間接的に派生されるテーブルです。派生テーブルは、SELECT 文の FROM 句に定義します。

派生テーブルのクエリは、ビューのクエリと同様に動作します。つまり、派生テーブルの値は、派生テーブル定義の評価時に決定されます。ただし、派生テーブルは、その定義がデータベースに保存されないという点で、ビューと異なります。また、派生テーブルは実体化されず、それが定義されているクエリ外からは参照できないという点で、ベース・テーブルやテンポラリ・テーブルと異なります。

次のクエリでは派生テーブル (my_drv_tbl) を使用して、各部署の最高給与を保持しています。派生テーブルのデータは、Employees テーブルにジョインして、その給与の従業員の姓を取得できます。

SELECT Surname, 
   my_drv_tbl.max_sal AS Salary, 
   my_drv_tbl.DepartmentID 
FROM Employees e, 
  ( SELECT MAX( Salary ) AS max_sal, DepartmentID 
      FROM Employees 
      GROUP BY DepartmentID ) my_drv_tbl
  WHERE e.Salary = my_drv_tbl.max_sal 
  AND e.DepartmentID = my_drv_tbl.DepartmentID
ORDER BY Salary DESC;
Surname Salary DepartmentID
Shea 138948.00 300
Scott 96300.00 100
Kelly 87500.00 200
Evans 68940.00 400
Martinez 55500.80 500

次の例では、Products テーブルの項目をランクする派生テーブル (MyDerivedTable) を作成し、派生テーブルを問い合わせて、最も低価格の 3 つの項目を返しています。

SELECT TOP 3 *
       FROM ( SELECT Description, 
                     Quantity, 
                     UnitPrice,
                     RANK() OVER ( ORDER BY UnitPrice ASC ) 
                 AS Rank 
                 FROM Products ) AS MyDerivedTable
ORDER BY Rank;

参照:FROM 句

テーブル以外のオブジェクトのクエリ

FROM 句内の最も一般的な要素は、テーブル名です。ただし、テーブルに似た構造を持つ、すなわち、適切に定義されたローとカラムを持つ他のデータベース・オブジェクトからローを問い合わせることも可能です。たとえば、ビューを問い合わせることも、結果セットを返すストアドプロシージャを問い合わせることもできます。

たとえば、次の文は ShowCustomerProducts というストアド・プロシージャの結果セットを問い合わせます。

SELECT *
FROM ShowCustomerProducts( 149 );