テーブルの基本リレーショナルデータベースのテーブルは、紙に書く表によく似ています。テーブルは行と列からできています。列の数と順序は固定されており、それぞれの列に名前が付けられています。行の数とは、その時点でどれだけのデータが格納されているのかを示すものです。SQLではテーブル内の行の順序は保証されません。テーブルを読み込むと、明示的に並び替えが要求されない限り、行はランダムな順序で返されます。これについては第7章を参照してください。SQLでは行に固有の識別子が割り当てられないので、テーブル内にまったく同一の行がいくつも存在することが可能です。これは、SQLの基礎をなす算術モデルの結果ですが、通常は好ましいことではありません。この問題の対処法については、本章で後述します。それぞれの列にデータ型があります。データ型によって、列に割り当てられる値が制限されます。列に格納されているデータに意味が割り当てられ、データを計算に使用できるようになります。数値型と宣言された列は任意のテキスト文字列は受け付けません。数値型の列に格納されているデータは算術計算に使用できます。これに対して、文字列型と宣言された列はほとんど全ての種類のデータを受け付けます。文字列の結合といった演算には使用できますが、算術計算には使用できません。PostgreSQLには、様々なアプリケーションに対応した多数のデータ型の集合が組み込まれています。ユーザが独自のデータ型を定義することも可能です。組み込みデータ型のほとんどにはわかりやすい名前と意味が付けれられているので、詳しい説明はここでは行わず、第8章で行います。使用されるデータ型としては、整数を表すinteger、小数も表すことができるnumeric、文字列を表すtext、日付を表すdate、時刻を表すtime、そして日付と時間の両方を含むtimestampがあります。TABLEコマンドを使用します。このコマンドで最低限指定する必要があるのは、新規テーブル名、列名、各列のデータ型です。integer);これで2列からなるmy_first_tableという名前のテーブルが作成されます。最初の列の名前はfirst_columnで、そのデータ型はtextです。2番目の列の名前はsecond_columnで、そのデータ型はintegerです。テーブル名および列名は、項4.1.1で説明した識別子の構文に従います。通常、型名は識別子でもありますが、例外もあります。列リストはカンマで区切り、括弧で囲むことに注意してください。先ほどの例は、説明が目的であるため現実的ではありません。通常、テーブルおよび列の名前は、どのようなデータが格納されているかわかるような名前にします。以下に、より現実的な例を示します。numeric);(numeric型は小数を格納することができ、金額を扱う場合はこれが一般的です。相関するテーブルを数多く作成する場合は、テーブルと列の名前を一貫させるのが賢明です。テーブル名に単数形あるいは複数形どちらの名詞を使用するかを選択します(これは論者によって好みが分かれています)。テーブルに含めることができる列の数には制限があります。制限は、列の型に応じて250〜1600の間となります。これほど多くの列を使用することは稀ですし、そのような場合は設計に問題があることも多いのです。TABLEコマンドを使用してそのテーブルを削除できます。products;存在しないテーブルを削除しようとすると、エラーになります。テーブルが存在するかどうか関係なくスクリプト全体を動作させることができるように、テーブルを作成する前に、エラーメッセージを無視して無条件に削除操作を行うことは、SQLスクリプトファイルではよく行われることです。EXISTSという亜種を使用することができます。これは標準SQLではありません。)これまでに説明したツールを使用して、十分に機能するテーブルを作成できます。確実にする方法について述べていきます。