CASEを使ったUPDATE文
CASE式は既存の列を条件にして確認することで、すべてのUPDATE文を結合する。
無駄に同じようなUPDATE文を書かなくても済む。
構文は以下の通り。
UPDATE some_table CASE WHEN hoge_column = hoge_value THEN new_hoge_value WHEN foo_column = foo_value THEN new_foo_value ELSE new_some_value END;
CASEを使って、条件に合致するもののUPDATEをまとめて行うことができる。
もちろん、WHEN~という条件は、ANDで結合することも可能。
また最後のELSEはオプションで、省略可能である。
結果を順番に並べるSQL
アルファベット順/50音順などに並べ替えたい時は、ORDER BY句を使う。
SELECT name. job FROM member_list WHERE name LIKE 'A%' AND job = 'SE' ORDER BY name;
上記のようなSQLを実行すると、name(名前)がアルファベット順/50音順に並べ替えられて表示される。
名前と、同名の人をさらに誕生日順に並べたい場合は、
ORDER BY name, birthday;
のように、ORDER BYに2つ記載する。
1番目で並び替えされてから、2番目で並べる。
並べ替えには2種類あって、
昇順(ASCENDING)というのは、AからZ,1から9の順で並べる。
降順(DESCENDING)というのは、ZからA,9から1の順で並べる。
デフォルトはASCなので、ASCは省略してもよい。
ORDER BY name ASC, birthday DESC;
のように書くことができる。
SQLで足し算をする
関数SUMを使うと、SQLが足し算をやってくれる。
SELECT SUM(sales) FROM car_sales WHERE first_name = 'sho322';
こうすると、sho322の売上だけを合計してくれる。
上記だとsho322に限定しているが、nameでグループ化して、そのグループに対してSUMしてみる。
SELECT first_name, SUM(sales) FROM car_sales GROUP BY first_name ORDER BY SUM(sales) DESC;
上記のようなSQLを使うと、名前ごとの合計を、合計が多い名前順に表示してくれる。
平均を出したい時はAVG関数を使う。
SELECT first_name, AVG(sales) FROM car_sales GROUP BY first_name
各人の平均が表示される。
AVGの部分をMAXにしたら、各人の最大のsalesが、MINにしたら最低のsalesが表示される。
ある列の行数を返す
ある列の行数を調べるには、COUNT関数を使う。
SELECT COUNT(name) FROM member_list;
とやると、member_listをSELECTして抽出されるnameの行数を返す。
COUNT関数において、NULLは数にカウントされない。
重複を排除したい時はDISTINCTを使う。
DISTINCTはCOUNTと一緒に使うこともできる。
SELECT COUNT(DISTINCT sale_date) FROM car_sales;
勉強した本

Head First SQL ―頭とからだで覚えるSQLの基本
- 作者: Lynn Beighley,佐藤直生(監訳),松永多苗子
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/09
- メディア: 大型本
- 購入: 10人 クリック: 230回
- この商品を含むブログ (30件) を見る
見た目で敬遠する人もいるかもしれないけれど、中身は至って真面目で、しかもわかりやすく解説してくれる。アメリカンジョークっぽいところはスルーしても、頭に残りやすい作りになっている。
感謝のプログラミング
今回で感謝のプログラミングは【533時間目】
10000時間まで、あと【9467時間】