SELECT SQL 11/05/95 PostgreSQL PostgreSQL

名前

select - クラスからインスタンスを取り出す

書式

select [distinct]
    式1 [as 属性名-1]
    {, 式-i [as 属性名-i]}
    [into [table] クラス名]
    [from from-list]
    [where where句] 
    [group by 属性名1 {, 属性名-i....}]
    [having having句]
    [order by 属性名1 [asc | desc]
        [using 演算子1] {, 属性名i...}]
    [union {all} select ...]
    

説明

Select は、修飾子や特性を満足するすべてのインスタンスを得て、対象リストの中の各要素の値を計算したりすることにより、(1) 2 つの異なった方法のうちのいずれかによりアプリケーション・プログラムに結果を返したり、(2)結果を新しいクラスに格納したりする。

もし into テーブルクラス名が指定されていれば、問い合わせの結果は指定された名前で新しいクラスに格納される。

order by 句を指定すると、対応する演算子に従ってインスタンスをソートしてくれる。この演算子はブール型を返すバイナリ演算子でなければならない。多重ソートフィールドを指定することもでき、この場合は左から右に向かって適用される。

対象リストでは取り出すフィールドを指定する。各属性名

クラス名.属性名
    
という書式を取るか、または配列の一部を指定することもできる。
--
-- 各次元について下限と上限の添字を指定する
-- (すなわち配列要素の範囲を指定する)
--
class_name.att_name[下限の添字-1:上限の添字-1]..
    [下限の添字-i:上限の添字-i]

-- -- 配列要素を厳密に指定する -- class_name.att_name[上限の添字-1]..[上限の添字-i]
ここで、各下限の添字上限の添字は整定数である。

複雑な型を持つ属性を取り出す場合、システムの振る舞いは、その型の属性を反映するための ネストされたドット を使うかどうか依存する。

クラスの値を読み出すためには、そのクラスの読み出し権が必要である(revoke(l) を参照のこと)。

--
-- 管理者より給料の高いすべての従業員を見つける
--
select e.氏名
    form 従業員 e, 従業員 m
    where e.管理者名 = m.氏名
    and e.給与 > m.給与
    
--
-- 平均より高い給与をもらっている従業員の、
-- すべてのフィールドを取り出す
--
select avg(給与) as 平均
    into table 平均給与 from 従業員;
    
--
-- すべての従業員名をソートして取り出す
--
select distinct 氏名
    from 従業員
    order by 氏名 using <
    
--
-- 雇用期限が 85/01/07 までだったすべての従業員を
--ソートして取り出す
select 氏名
    from 従業員['January 7 1985'] e
    order by 氏名 using <
    
--
-- すべての従業員の給与が 1.1 回含まれる?
-- 新しいクラス 昇進 を構築する
select  1.1 * 従業員.給与 as 給与
    into tables 昇給
    from 従業員
    

関連事項

insert(l) ,close(l) ,table(l) ,fetch(l) ,update(l) .

バグ

Select into は重複インスタンスを削除しない。

select into を実行中にバックエンドがクラッシュした場合、そのクラスファイルがディスク上に残ってしまう。これはデータベース DBA で安全に削除できるが、それに続く、同じ名前に対する select into は "BlockExtend" に関する謎めいたエラーメッセージとともに失敗してしまう。

翻訳者

堀田 倫英 <hotta@net-newbie.com>