Start living with new my life

自分が思ったことを書き留めてます。

SQL基礎5

■UNION

・UNIONは和集合(足す)
・集合演算子は重複行を排除する。
・演算対象となるレコードの列数は同じであること。
・レコードの列数が同じでもデータ型が異なるとエラーになるため、CASTする必要あり。
・UNION句で足せるSELECT文はどんなものでOK。ただしORDER BY句はSQL内で1つしか指定できない。
・重複を排除したくない場合はALLオプションを付ける。ALLはすべての集合演算子につけることが可能。

■INTERSECT

・INTERSECTは2つのレコード集合の共通部分を選択する。

■EXCEPT

・EXCEPTは引き算を行う集合。
・はじめのFROM句のテーブルから2番目のFROM句のテーブルのレコードを引いた残りが選択される。
・はじめのFROM句に指定したテーブルを元に引き算をおこなうため、FROM句の指定順が変わると結果が異なる。

■INNER JOIN

・内部結合は2つのテーブルに存在する情報を選択する。

■OUTER JOIN

・外部結合はどちらか一方に存在している情報も出力される。
・外部結合ではどちらのテーブルをマスターテーブルにするかを指定する。

SQL基礎4

■述語

・LIKEは前方一致、中間一致、後方一致の指定であいまいな検索が可能。
・BETWEENは範囲検索を行うときに便利。
・IN述語はORの便利な省略形。ORでたくさんの条件を書くより、IN述語なら楽に記述できる。
・IN述語はサブクエリも記述可能。

■EXISTS

・EXISTSの引数は常に相関サブクエリを指定する。
・EXISTSはレコードの存在有無(TRUEかFALSE)を調べてTRUEかFALSEを返すため、
 SELECT句には「SELECT *」とするのが慣習になっている。
・INをEXISTS、NOT INをNOT EXISTSに置き換えることも可能。ただし、すべてではない。

■CASE

・CASE式のELSE句は省略可能。END句はCASE式の終了を判断するため、必須。
・CASE式を使うとSELECT文の結果を柔軟に値を変えることが可能。
OracleMySQLの独自のCASE式を簡略化した機能があるが、汎用性がないので使用しないこと。

SQL基礎3

■相関サブクエリ

・相関サブクエリは小分けにしたグループ内での比較をするときに使う。
・相関サブクエリをSQLの外側で使うことはできない。SQLはまず内側のSELECT文から実行され、
 スコープが決まっているので、外側のSELECT文が実行されるときには内側のSELECT文は値のみしか残らない。

SQL基礎2

■サブクエリ

・サブクエリは内側から最初に実行される。
・サブクエリは何階層でも記述可能。ただしパフォーマンス影響があるため、深くすることは避ける。
エイリアスは省略可能

■スカラ・サブクエリ

・スカラサブクエリは必ず1行1列だけの値を返すサブクエリ。
・スカラ値が書ける場所で使用可能(SELECT,FROM,WHERE,HAVINGなど)
・スカラ サブクエリを使用するときは絶対に複数行を返さないようにする。

SQL基礎1

SQLを基礎からやり直し中のため、備忘録を記録。

■HAVING句

書くことができる要素
・定数
・集約関数
・GROUP BY句で指定した列名(集約キー)

注意点
集約後のテーブルにはSELECT句で記述した列しかないため、そのほかの列名は書いても存在しないためエラーになる。
集約キーに対する条件はWHERE句に書くようにする。パフォーマンス的にもWHERE句が優れている。
WHERE句→行に対する条件指定
HAVING句→グループに対する条件指定

■句の実行順序

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

■ORDER BY句

・ORDER BY句で並び準を指定しないとデフォルトでは昇順(ASC)扱いになる。
複数のソートキーを指定した場合は左側から優先的に使用される。
・NULLを含む列をソートキーに指定した場合は、NULLが先頭または末尾にまとめて表示される。
・SELECT句で付けた別名を使うことが可能。
・SELECT句で指定されていない列名や集約関数(SUM等)を使うことが可能。

Java コレクション編1

□アウトプット用


・コレクションで良く使うのはArrayList LinkedList Set Mapなど

■ArrayList
ArrayListで中身を取り出すには「for文・拡張for文・イテレータ」で取り出せる。
・リストの途中で要素を挿入、削除するのは苦手

イテレータ
イテレータとはリストに含まれている箱をココ!と指している矢印のようなものとイメージする。
イテレータインスタンスを作成したときは矢印が箱の前を指した状態になる。

■LinkedList
・ArrayListと同じ動作をするリスト
・しかし、クラス内部のつくりが違い、リストの途中で要素を挿入、削除するのは得意
・要素の取り出しが苦手、先頭から数を数えながらたどる必要がある。
・リストの箱がバラバラにあって、リンクしているような感じ

■List
・ArrayListもLinkedlistもList
・両方ともListインターフェースを実装している
・コレクションのインスタンスを格納する変数や引数、戻り値の型は極力あいまいな型を用いること。
・例:

List<String> list1 = new ArrayList<String>();
List<Hero> list2 = new LinkedList<Hero>();

※引数・戻り値・ローカル変数には、極力あいまいな型(インターフェース型)を利用できないかを検討し、積極的に利用する。

Ubuntu13.04 PostgreSQLのコンパイル時の対応

PostgreSQLのビルド時に以下のエラーが出たので、色々調べて解決できたので、メモ。

バージョンは下記の通り。

Ubuntu 13.04
PostgreSQL 9.3.4

configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
You need to run the 'configure' program first. See the file
'INSTALL' for installation instructions.

readlineが見つからないと出たので、調べるて以下の通りにreadline6をインストールする。

sudo apt-get install libreadline6

再度ビルドしてみる。と以下のエラーが発生。

gmake: *** [all] Error 1
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.

zlibが見つからない、ということで

sudo apt-get install zlib1g-dev

をインストールし、再度ビルドすると成功!