Archive for the ‘Uncategorized’ Category
SQL・JOINについて
よく使う内部結合と外部結合についてのまとめ。
記述例で括弧に囲まれている部分は省略可能です。
内部結合
●INNER JOIN
記述例:FROM 表1 (INNER) JOIN 表2 ON 表1.結合条件にしたい列名 = 表2.結合条件にしたい列名
内部結合は、結合条件に一致している行のみを抽出する。
外部結合
●LEFT OUTER JOIN
記述例:FROM 表1 LEFT (OUTER) JOIN 表2 ON 表1.結合条件にしたい列名 = 表2.結合条件にしたい列名
●RIGHT OUTER JOIN
記述例:FROM 表1 RIGHT (OUTER) JOIN 表2 ON 表1.結合条件にしたい列名 = 表2.結合条件にしたい列名
外部結合は、結合条件に一致している行を抜き出すという点では内部結合と同じですが、
・LEFT OUTER JOINなら左側の表では結合条件を満たしていて、右側の表では結合条件を満たしていない
・RIGHT OUTER JOINなら右側の表では結合条件を満たしていて、左側の表では結合条件を満たしていない
以上の条件を満たしている行も抽出します。
抽出された場合、条件に満たしていない方のカラムはNULLになります。
あたり判定
書くネタがないので、昔習ったアルゴリズムを記憶を掘り返しながら書こうと思います。
今回は矩形同士のあたり判定について。
2つの矩形、AとBがあったとして、この2つのどこか1部分でも重なり合っていることを示すためには、
・矩形Aの左端が、矩形Bの右端より左
・矩形Aの右端が、矩形Bの左端より右
・矩形Aの上端が、矩形Bの下端より上
・矩形Aの下端が、矩形Bの上端より下
この4つ全てに当てはまった場合、矩形AとBのどこか1部分は重なり合っていると言えます。
C言語で書いてみると、
//wは幅、hは高さを表す。
//矩形は左上の頂点を軸に考えるので、xとyには矩形の左上の座標が入っているものとする。
int ax,ay,aw,ah;
int bx,by,bw,bh;
if( ax < bx + bw &&
ax + aw > bx &&
ay < by + bh &&
ay + ah > by ){
//あたり判定の処理
}
となります。