JOINの結合条件とWHEREの条件の違いと使い分けzukucode主にWEB関連の情報を技術メモとして発信しています。JOINの結合条件とWHEREの条件の違いと使い分けSQLのJOINの結合条件とWHERE句での条件の違いを整理します。以下のようなテーブルがあるとします。0の社員のみ取得したい場合、以下のようなSQLになります。1の条件はJOINでもWHEREでも結果は同じになります。JOIN)の場合は結果が異なるので注意が必要です。JOINは結合先のテーブルに結合条件を満たすデータが存在しない場合でも結合元のデータは取得されます。JOINの結合条件で指定した場合は結合元のemployeeのデータがすべて取得されることになります。0の社員のみ取得したい場合は結合条件ではなくWHERE句の条件で絞り込む必要があります。JOINで結合した時、結合条件を満たすデータが存在しなかった場合は、結合先のデータはすべてnullになります。JOINの結合先のテーブルの値をnull以外の条件で絞り込むのは、内部結合で結合した場合と実質は同じことになります。一般的に外部結合よりも内部結合のほうがパフォーマンスは優れているので、2ような場合は内部結合を使うべきです。結合条件と絞り込み条件の使い分け上記を踏まえて、結合先のテーブルに紐付かないデータでも結合元のデータはすべて出力したいという場合は外部結合の結合条件で条件を指定することになります。結合先のテーブルに紐付かないデータを出力したくない場合は、内部結合の結合条件もしくはWHEREの条件で指定します。WITH句で同じSQLを1つのSQLに共通化する同じようなSQLはWITH句を使用して共通化すればパフォーマンスが改善されることが多いです。WITH句を使用すれば1つの副問い合わせをいろいろな場所で使いまわすことができます。重複しているレコードを一括でUPDATEするある列の値が同じレコードが複数ある場合に、そのレコードを全てUPDATEする方法を紹介します。テーブルと列(カラム)にコメントを設定する方法SQLでテーブルと列(カラム)にコメントを設定する方法を紹介します。SELECT句での副問合せの基本的な考え方と注意点SELECT句での副問合せをうまく利用すれば、集計単位の異なる値を同時に取得できます。取得した結果に対してもう一度SQLを実行するようなイメージで値を取得できます。SELECT句でテーブルから指定した列のデータを取得するSELECT句はFROM句で指定されたテーブルから、どの列を取得するかを指定するための構文です。別テーブルをSELECTした結果が存在すればその値を使用してUPDATEする方法SELECTした結果がすでに存在していればその値でUPDATEしたい場合があります。上記SQLだと、テーブルBの存在の有無にかかわらず、テーブルAの全てのデータが更新されてしまいます。UPDATE文で副問い合わせで取得した値を複数列に設定する方法UPDATE文で、副問い合わせで取得した値を複数列に設定する方法を紹介します。SETで指定する列を()で囲い、副問い合わせのSQLで()で囲った列に対応するようにSELECTで取得します。INTOのあとのVALUESの代わりに、SELECT文をそのまま使用します。SELECTで取得する列の順番と、INSERTするテーブルの列の順番が一致するようにします。rowspanを使用してテーブル表示するときに必要な情報を分析関数で取得するSQLではなくプログラム側で表示するときに複雑な処理を実装してしまいがちですが、SQLでrowspanに必要な情報を一緒に取得しておけばプログラム側での実装はかなりシンプルになります。ある列の値が最大もしくは最小の値のレコードを取得する例えば以下のテーブルがあるとき、身長が一番大きい社員のレコードを取得したい場合があります。業務でもよくありがちな仕様ですが、一見簡単そうで難しい問題です。システム日付をYYYYMMDD形式などの文字列型に変換する当ホームページに記載されている会社名・製品名・システム名などは、各社の登録商標、もしくは商標です。