SQLをより賢く使うための12のヒント

文:Susan Harkins  翻訳校正:石橋啓一郎
2009-06-30 08:00:00
  • このエントリーをはてなブックマークに追加

7: テーブル構造を変更する

 テーブルのデザインを変更するSQLステートメントはいくつかある。この種の作業はデータを破壊する可能性があるため、常に注意して行う必要がある。たとえば、あるカラムのデータ型を変更した場合、そのカラムの新しいデータ型に合わせるために、エンジンが既存のデータの切り捨てや削除を行う可能性もある。テーブルの変更は、以下の制約を念頭に置きながら行うべきだ。

  • 既存のカラムにすでにデータが入っている場合、そのカラムのデータ型をCOUNTERに変更することはできない。
  • カラムの名前を変更することはできない。新しい名前のカラムを使うには、そのカラムを削除し、新たな名前のカラムを作成する必要がある。その際データを維持するには、新しいカラムを作成し、元のカラムからそのカラムにUPDATEを用いてデータをコピーし、元のカラムを削除すればよい。
  • ALTER TABLEを用いてテーブルを変更する前に、そのテーブルを閉じること。この作業を行わない場合、エンジンがエラーを返す。次のVBAのコードは、開いているテーブルを閉じ、テーブルが開いている場合に起きるエラーを防ぐものだ。
  • On Error Resume Next
    
    DoCmd.Close acTable, table
    
    On Error GoTo 0
    
  • カラムに制約が作成されている場合、そのカラムは削除できない。まず、DROP CONSTRAINTを使って制約を削除する必要がある。
  • テーブルを削除する前に、そのテーブルに適用されているチェック制約を削除する。
  • 既存のリレーションシップを変更することはできない。それを削除し、再作成する必要がある。

8: SQLの問題児、INSERT INTO

 SQLのINSERT INTOステートメントは、既存のテーブルに新しいデータを追加するものだ。正しく使われればINSERT INTOはよい働きをするが、覚えておくべき重要なことが1つある。テーブルのデザインは一致する必要はないが、この作業の既存のテーブルの作業対象のカラムと追加されるデータのカラムが一致しなくてはならない。すなわち、新しいデータを追加される方のテーブルには、追加されるデータと同じカラムが存在する必要があるということだ。

 次のように、VALUES句を使用して、追加するレコードのそれぞれのカラムの値を明示的に指定することもできる。

INSERT INTO targetcol1, col2, col3, ...)

VALUES(value1, value2, value3, ...)

 ただし、この構文では1度に1つのレコードしか追加できないため、使用できる場面は限られる。対象のすべてのカラムに対して値を指定する場合には、カラム名を省略できる。カラム名を指定する際には、その順序はテーブルに定義されている順序と合っていなくてはならない。主キーがオートナンバー型のカラムでない場合、主キーカラムが含まれている必要がある。主キーがオートナンバー型カラムである場合は、このカラムが含まれている必要はない。

9: UPDATEを使って値を削除する

 SQLのDELTEステートメントはレコード全体を削除するものだ。カラムのリストを指定した場合、このステートメントはエラーを返さず、単にそのリストを無視する。たとえば、次のステートメントは、Employeesという名前のテーブルからすべてのデータを削除する。

DELETE

FROM Employees

DELETE Employees.*

FROM Employees

DELETE Employees.Salary

FROM Employees

 最後の構文では、Salaryというカラムを指定しているが、SQLはSalaryの値だけでなくすべてのデータを削除する。特定の値だけを削除する場合、次のような形でSQLのUPDATEステートメントを使う。

UPDATE source

SET source.column = Null

[WHERE condition]

 ただし、カラムのプロパティとの衝突がある場合、このステートメントはエラーを返す。たとえば、もしそのカラムにデータが必要な場合は、Null値は受け入れない。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]