|
||||||||||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||||||||||
| JOIN | ||||||||||||||||||
|
JOINにはINNER JOINとOUTER JOINがあります。さらに、OUTER JOINにはLEFT OUTER JOINとRIGHT OUTER JOINの2種類があります。例えばtableAとtableBを表1、2とすると、LEFT OUTER JOINとRIGHT OUTER JOINのSQL文および結果は以下のようになります。
表1:tableAの中身
表2:tableBの中身 LEFT OUTER JOINの例
select a.col01,a.col02,b.col03 from tableA a LEFT OUTER JOIN tableB b on a.col01 =b.col01;
RIGHT OUTER JOINの例
select a.col01,a.col02,b.col03 from tableA a RIGHT OUTER JOIN tableB b on a.col01 = b.col01;
このLEFT OUTER JOINとRIGHT OUTER JOINの動作はPostgreSQL、MySQLともに同じです。 PostgreSQLの場合は、LEFT OUTER JOINとRIGHT OUTER JOINの両方の処理を同時に行うようなFULL OUTER JOINがサポートされています。同様に、tableAとtableBでFULL OUTER JOINを行うと以下のような実行結果になります。これは、MySQLでは実行できません。 FULL OUTER JOINの例
select a.col01,a.col02,b.col03 from tableA a FULL OUTER JOIN tableB b on a.col01 = b.col01;
MySQLにてPostgreSQLのFULL OUTER JOINと同じ結果を得るためには、LEFT OUTER JOINとRIGHT OUTER JOINのSELECT文をUNIONにて結合するなどの工夫が必要になります。以下は、UNIONを用いてFULL OUTER JOINと同じ結果をだす例です。
(select a.col01,col02,col03 from tableA a LEFT OUTER JOIN tableB b on a.col01 = b.col01) union distinct (select a.col01,col02,col03 from tableA a RIGHT OUTER JOIN tableB b on a.col01 = b.col01);
もちろん、PostgreSQLでもこのUNIONを用いたJOINは動作します。 |
||||||||||||||||||
| GROUP BY句 | ||||||||||||||||||
|
MySQLのGROUP BY句にはちょっと変った拡張機能があります。それは、GROUP BY句の後ろに並び替えのためのASC句、DESC句を指定できることです。例えば、表3のtableCを使ってカラム「col01」別にカラム「col02」の値を集計するSELCT文は、以下のようになります。
表3:tableCの中身
select col01,sum(col02) from tableC group by col01
もし、この集計結果をカラム「col01」の降順に並べ変えたい場合は、通常ORDER BY句とDESC句を使用して、以下のようになります。
select col01,sum(col02) from tableC group by col01 order by col01 desc
もちろん、このSELECT文はPostgreSQL、MySQLともに正常動作します。ところが、MySQLはこのORDER BY句を使用せずとも以下のようにGROUP BY句の後ろにDESC句を付けるだけで、ORDER BY句を使用したときと同じ、降順の並べ替えを行うことができます。
select col01,sum(col02) from tableC group by col01 desc
|
||||||||||||||||||
|
前のページ 1 2 3 次のページ |
||||||||||||||||||
|
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||

