・前提
前回に引き続きDB、とりわけSQLを学習する
※今回は第四,五章を学習する
・第四章
以下SELECT文にのみ追加可能な修飾句
DISTINCT…重複行の削除(この句はSELECTの前に付ける必要があることに注意!)
ORDER BY…結果を並び替える(ASCが昇順,DESCが降順)また、ORDER BYを使わないと順序保証されない!
OFFSET-FETCH…ORDER BYと併用することで並び替えた結果の一部を表示する
複数のよく似た表にそれぞれSELECTなどの操作を行うのは手間→集合演算子が使える
- UNION…和集合
- EXCEPT…差集合
- INTERSECT…積集合
UNIONの構文は以下の通り
SELECT 文1
UNION
SELECT 文2
※1,集合演算子の使用条件は選択列リストの列数とデータ型が全て一致している必要がある
※2,集合演算子でORDER BY句を使用するときは最後のSELECT文に記述することと、列番号以外による指定の際は一つ目のSELECT文に記述したものを指定
※3,列数が一致しないSELECT文をつなげるテクニックとして列数が足りないほうの選択列リストに列を追加
EXCEPTの構文は以下の通り
SELECT 文1
UNION
SELECT 文2
INTERSECTの構文は以下の通り
SELECT 文1
INTERSECT
SELECT 文2
※DBMSにとって並び替えはかなり負荷のかかることであり、DISTINCTやUNIONやインデックスの乱用は要注意!
・第五章
列名に式やリテラルを指定すればその列に指定した内容が代入される!
その際、列名が人間にとって不細工になるが前回学んだエイリアスを使用すればよい
/* 計算式に別名を付ける*/
SELECT 出金額,
出金額+100 AS 百円増しの出金額
FROM 家計簿
その他の演算子
||…文字列の連結に使用
CASE演算子…列の値や条件式を評価しその結果に応じて値を事由に変換し使用例は以下二つ
CASE 評価する列や式 WHEN 値1 THEN 値1のときに返す値
WHEN 値2 THEN 値2のときに返す値…
(ELSE デフォルト値)
END
CASE WHEN 条件1 THEN 条件1のときに返す値
WHEN 条件2 THEN 条件2のときに返す値…
(ELSE デフォルト値)
END
以下、主要な関数について
- LENGTH関数…文字列の長さを返す
- TRIM関数…空白を除去する
- REPLACE関数…指定文字を置換
- SUBSTRING関数…文字列の一部を抽出
- CONCAT関数…文字列を連結
- ROUND関数…指定桁で四捨五入
- TRUNC関数…指定桁で切り捨てる
- POWER関数…べき乗を計算する
- CURRENT_TIME関数…現在時刻を得る
- CAST関数…データ型を変換
- COALESCE関数…最初に登場するNULLでない値を渡す
ストアドプロシージャ→実行する複数のSQL文をまとめプログラムのようなものとしてDBMS内に保存してDBの外部から呼び出すものでこれを使うメリットはDBとアプリ間のやり取りが減りNWの負荷が下がる
・雑感
4章から記憶要素がかなり増えてきたが、全部暗記するのはDBに割くリソースとして現実的でないため、どんなことが出来るかの
インデックスを頭の中に作っておくのが最善か
とりわけ5章は関数自体は関数名そのままだったり、Excelの関数やLinuxコマンドそのままの命名だったりするので
一目で理解できるので一度触って確認したら自分の中でインデックスのマッピングは完了しそう