3);結果としてidが1,2,3のレコードが取得される。UNION(和集合)以外にもINTERSECT(積集合)とEXCEPT(差集合)が使用できる。ALLオプション和集合、積集合には集合同士の交差部分が存在している。デフォルトだと、この交差している、つまり重複しているレコードはひとつにまとめられるが、ALLオプションを使用することで重複レコードも残しておくことが出来る。3);このSQLでは、id2のレコードが2回出てくる。(ただidがprimary_keyの場合はエラーになるか...?)JOINテーブル同士を横方向に結合する処理。5この3テーブルが存在しているとする。50という結果を得ることが出来る。NULL制約を設定すべきらしい。理由は色々あるみたいだが、勉強した限りでは大きく以下の2点。NULLを使用する必要がある。usersテーブルにnameカラムがNULLのレコードがあるとする。NULL;とクエリを叩いたとしても、1レコードも返ってこない。NULL;といった形にしないといけない。100;このようなクエリを叩いたとする。感覚的にはpenのレコードが返ってきそうな気がするが、実際はレコードは1行も返ってこない。100の部分、penのpriceはNULLである。NULLに対する論理演算の結果はtrueでもfalseでもなく、unknownという状態になってしまう。unknownはfalseに近い扱いをされる(実際には細かい部分で違うが)ので、ANDの条件を満たさず結果的にレコードは1行も返されない。集約関数COUNTとかSUMとかのこと。(WHERE句では使用できないので注意。)集約関数をSELECT句で使用すると、結果は1行になる。50関数名(対象カラム名)という風に書く。AVG(price)。注意として、集約関数はNULLを除外する。2とNULLを除外して計算し、結果として75となる。NULLを特定の値にみなした上で含めたい場合はCOALESCE関数を使用する模様。例外として、COUNT(*)はNULLも含めて数える。重複を省いて計算DISTINCTを使用する。items;みたいな感じで。TRANSACTIONをしておくと、COMMITするまで実データに影響を与えること無くSQLを実行できる。トランザクションをキャンセルする場合はROLLBACKをすればいい。トランザクションに関する疑問トランザクションA開始トランザクションB開始トランザクションAコミットトランザクションBコミットこのような状況において、トランザクションAでBに影響があるようなSQLを実行していた場合どうなるのか?疑問アプリケーションプログラムでの対応をした方がいいパターンも多いのでは?SQLで出来ることはかなり多いけど、一種のシェル芸みたいな感じになって時間が経つと理解が出来ないようなクエリが出てきたりするのではないかという疑問。それをするのであれば、ある程度はアプリケーション内でフィルタ処理等をしたほうがいいのではとか思った。