<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/select_into.sgml,v 1.6 2001/06/27 08:00:34 natsuyo Exp $
Postgres documentation
-->

<refentry id="SQL-SELECTINTO">
 <refmeta>
  <refentrytitle id="SQL-SELECTINTO-TITLE">
   SELECT INTO
  </refentrytitle>
  <refmiscinfo>SQL<!-- Language Statements -->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   SELECT INTO
  </refname>
  <refpurpose>
   <!-- Creates a new table from the results of a SELECT -->
   SELECTの結果から新しいテーブルを作成します。<indexterm><primary>SELECT INTO</primary></indexterm><indexterm><primary>SQL</primary><secondary>SELECT INTO</secondary></indexterm><indexterm><primary sortas="てーぶる">テーブル</primary><secondary sortas="SELECTからさくせい">SELECTから作成</secondary></indexterm>

  </refpurpose></refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>2000-12-11</date>
  </refsynopsisdivinfo>
<synopsis>
SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replaceable> [, ...] ) ] ]
    * | <replaceable class="PARAMETER">expression</replaceable> [ AS <replaceable class="PARAMETER">output_name</replaceable> ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] <replaceable class="PARAMETER">new_table</replaceable>
    [ FROM <replaceable class="PARAMETER">from_item</replaceable> [, ...] ]
    [ WHERE <replaceable class="PARAMETER">condition</replaceable> ]
    [ GROUP BY <replaceable class="PARAMETER">expression</replaceable> [, ...] ]
    [ HAVING <replaceable class="PARAMETER">condition</replaceable> [, ...] ]
    [ { UNION | INTERSECT | EXCEPT [ ALL ] } <replaceable class="PARAMETER">select</replaceable> ]
    [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ]
    [ FOR UPDATE [ OF <replaceable class="PARAMETER">tablename</replaceable> [, ...] ] ]
    [ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ]]

where <replaceable class="PARAMETER">from_item</replaceable> can be:

[ ONLY ] <replaceable class="PARAMETER">table_name</replaceable> [ * ]
    [ [ AS ] <replaceable class="PARAMETER">alias</replaceable> [ ( <replaceable class="PARAMETER">column_alias_list</replaceable> ) ] ]
|
( <replaceable class="PARAMETER">select</replaceable> )
    [ AS ] <replaceable class="PARAMETER">alias</replaceable> [ ( <replaceable class="PARAMETER">column_alias_list</replaceable> ) ]
|
<replaceable class="PARAMETER">from_item</replaceable> [ NATURAL ] <replaceable class="PARAMETER">join_type</replaceable> <replaceable class="PARAMETER">from_item</replaceable>
    [ ON <replaceable class="PARAMETER">join_condition</replaceable> | USING ( <replaceable class="PARAMETER">join_column_list</replaceable> ) ]
</synopsis>
  
  <refsect2 id="R2-SQL-SELECTINTO-1">
   <refsect2info>
    <date>2001-03-20</date>
   </refsect2info>
   <title>
    <!-- Inputs -->入力
   </title>

    <variablelist>
    <varlistentry>
     <term>TEMPORARY</term>
     <term>TEMP</term>
     <listitem>
      <para>
	<!-- If TEMPORARY or TEMP is specified,
	the output table is created only within this session, and is
	automatically dropped on session exit.
	Existing permanent tables with the same name are not visible
	(in this session) while the temporary table exists.
	Any indexes created on a temporary table are automatically
	temporary as well. -->

        TEMPORARYもしくはTEMPを指定すると、出力テーブルはこのセッション間だけのものとして作成され、セッションを出るときに自動的に削除されます。同じ名前を持つ既存の永続テーブルはその一時テーブルが存在する間（このセッション）は見えません。一時テーブルで作られるどのインデックスも自動的に一時的なものになります。

      </para>
     </listitem>
    </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER">new_table</replaceable></term>
      <listitem>
       <para>
        <!-- The name of the new table to be created.
	This table must not already exist.  However, a temporary table
	can be created that has the same name as an existing permanent
	table. -->

        作成される新しいテーブルの名前です。このテーブルはすでに存在していてはいけません。しかし、既存の永続テーブルと同じ名前を持つ一時テーブルを作成することはできます。

       </para>
      </listitem>
     </varlistentry>
    </variablelist>

   <para>
    <!-- All other inputs are described in detail for
    <xref linkend="sql-select" endterm="sql-select-title">. -->

    その他のすべての入力は<xref linkend="sql-select" endterm="sql-select-title">で詳細が説明されています。

   </para>
  </refsect2>

  <refsect2 id="R2-SQL-SELECTINTO-2">
   <refsect2info>
    <date>2001-03-20</date>
   </refsect2info>
   <title>
    <!-- Outputs -->出力
   </title>

   <para>
    <!-- Refer to
    <xref linkend="sql-createtable" endterm="sql-createtable-title">
    and
    <xref linkend="sql-select" endterm="sql-select-title">
    for a summary of possible output messages. -->
  
    可能な出力メッセージの要約は<xref linkend="sql-createtable" endterm="sql-createtable-title">と<xref linkend="sql-select" endterm="sql-select-title">を参照してください。

   </para>
  </refsect2>
 </refsynopsisdiv>

 <refsect1 id="R1-SQL-SELECTINTO-1">
  <refsect1info>
   <date>2001-03-20</date>
  </refsect1info>
  <title>
   <!-- Description -->説明
  </title>

  <para>
   <!-- 
   <command>SELECT INTO</command> creates a new table and fills it
   with data computed by a query.  The data is not returned to the
   client, as it is with a normal <command>SELECT</command>.  The new
   table's columns have the names and datatypes associated with the
   output columns of the <command>SELECT</command>. -->

   <command>SELECT INTO</command>は、新しいテーブルを作成し問い合わせによって計算されるデータを格納します。そのデータは通常の<command>SELECT</command>のようにクライアントには返されません。新しいテーブルの列は<command>SELECT</command>の出力列と関連するデータ型と名前を持ちます。
</para>

   <note>
    <para>
     <!-- 
     <xref linkend="sql-createtableas" endterm="sql-createtableas-title">
     is functionally equivalent to <command>SELECT INTO</command>.
     <command>CREATE TABLE AS</command> is the recommended syntax, since
     <command>SELECT INTO</command> is not standard.  In fact, this form of
     <command>SELECT INTO</command> is not available in PL/pgSQL or ecpg,
     because they interpret the INTO clause differently. -->

     <xref linkend="sql-createtableas" endterm="sql-createtableas-title">は機能的には<command>SELECT INTO</command>と同じです。<command>SELECT INTO</command>は標準ではないので、構文は<command>CREATE TABLE AS</command>をお勧めします。実際、この<command>SELECT INTO</command>という形式はPL/pgSQLやecpgでは有効ではありません。なぜならそれらはINTO句を異なって解釈するからです。

    </para>
   </note>
 </refsect1>

 <refsect1 id="R1-SQL-SELECTINTO-2">
  <title>
   <!-- Compatibility -->互換性
  </title>

   <para>
    <!-- 
    SQL92 uses <command>SELECT ... INTO</command> to represent selecting
    values into scalar variables of a host program, rather than creating
    a new table.  This indeed is the usage found in PL/pgSQL and ecpg.
    The <productname>Postgres</productname> usage of <command>SELECT
    INTO</command> to represent table creation is historical.  It's best
    to use <command>CREATE TABLE AS</command> for this purpose in new code.
    (<command>CREATE TABLE AS</command> isn't standard either, but it's
    less likely to cause confusion.) -->

    SQL92は、選択する値をホストプログラムのスカラー変数で選択する値を表示するために、新しいテーブルを作成するのではなく、<command>SELECT ... INTO</command>を使います。これはPL/pgSQLとecpgで見られる使用法です。テーブル作成を表す<command>SELECT INTO</command>の<productname>Postgres</productname>使用は歴史的なものです。新しいコードではこの目的には<command>CREATE TABLE AS</command>を使うのが最善です（<command>CREATE TABLE AS</command>も標準ではありませんが、これのほうが混乱を招く可能性が少ないです）。

    </para>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
