テーブル、ビュー、またはストアド・プロシージャのデータに関係のある 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 ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |