【SQL】『スッキリわかるSQL入門』4〜5章の読書メモ

f:id:hira98:20190530154131j:plain

【結論】

  • SQL文では検索結果に対して、用途に合わせて次のような処理を行える
    • 重複削除
    • 結果の並び替え
    • 条件に応じて表示結果を変更
    • 算術演算や文字列操作

【目次】

検索結果の加工

SELECT文の実行結果を加工する際の書き方

DISTINCT文

SELECT文の検索結果の重複行を削除する

SELECT DISTINCT 列名
  FROM テーブル名

SQL内部では、条件に一致する列名を全て探し出した後に重複する項目を削除している。

ORDER BY文

検索結果を並び替える。

SELECT 列名・・・ FROM テーブル名
ORDER BY 列名 並び順(ASC/DESCを指定)

次のように複数の列を基準にして並び替える事もできる。以下の場合、列1を基準に並び替えた後に、更に列1の並び順は変更しない範囲で列2を基準に並び替える。

SELECT 列名・・・ FROM テーブル名
ORDER BY 列名1 並び順, 列名2 並び順

集合演算子

SELECT文の実行結果を集合としてとらえ、2つの集合を加工するための演算子

構文は以下。

SELECT 文1
  [集合演算子]
SELECT 文2

集合演算子は次の3つがある。

集合演算子 説明
UNION 2つの集合を合わせる
EXCEPT 集合Aから集合Bを除く
INTERSECT 共通部分を抜き出す

MySQLではUNIONだけしか使用できない。

式と関数

次のようにヒットした行の特定列を変更することもできる。

SELECT 商品単価, 商品単価 * 1.08 AS 税込み価格
 FROM 商品一覧表;

算術演算子

ほぼJavaと同じで以下が使える。

+、-、*、/||(文字列連結、javaは文字列型の+で対応)

CASE演算子

Javaswitch文のように条件に応じて値を変換する演算子

構文は以下。

CASE WHEN 条件1 THEN 条件1を満たすときに返す値
(CASE WHEN 条件2 THEN 条件2を満たすときに返す値)...
(ELSE デフォルト値)...
END

サンプルは以下。

(動作未確認🤮)

SELECT 名前, 点数,
       CASE WHEN 点数>=80 THEN 'A'
       CASE WHEN 点数>=60 THEN 'B'
       CASE WHEN 点数>=30 THEN 'C'
            ELSE 'C'
       END AS ランク
  FROM 成績一覧表;

色々な関数

四捨五入や文字列操作を行うための関数も用意されています。

書籍の関数使用を引用します。

  • 文字列操作

    • 長さが取得→LENGTH()
    • 空欄の除去( 左右、右、左)→TRIM()LTRIM()RTRIM()
    • 置換→REPLACE()
    • 一部抽出→SUBSTRING()
    • 連結→CONCAT()
  • 数値関連

    • 四捨五入(桁指定可能)→ROUND()
    • 小数点以下切り捨て→TRUN()
    • べき乗→POWER()
  • 日付

    • 現在の日時を取得→CURRENT_DATE

    • 現在の時刻を取得→CURRENT_TIME

      ※引数が不要なため、関数名の後ろに()は付与しない。

  • その他

    • CAST関数

      型変換する。引数は(変換する値 AS 変換する型)で指定する。

    • COALSE関数(呼び方はコアレス関数)

      引数として列や式を複数指定でき、渡された引数で最初に登場するNULLではない値を返す

参考情報

スッキリわかるSQL入門 ドリル215問付き!

さいごに

関数の説明に関しては「色々できるんだぜー💪」という雰囲気さえ掴めればよかったので雑にまとめています😅