BLOG

【プログラマー 新人研修 SQL】新人キャイダの記録9

キャイダです。
今回はSQL復習の続きからでございます。地味に研修ラストスパートで
焦ってます。
果たして私は現場でも生き残れるのか?キャイダの今後の活躍は
キャイダの記録~現場編~にご期待ください。(やるとは言ってない。)

割と時間が危ういので復習に移ります。
ここからはただの復習なので特に面白いことはありません。

・条件抽出

javaのif文でいう「または」とか「かつ」が実現出来たり、
2つの値の間(例えば1000~2000)という条件でデータを表示させたり、
nullかnullじゃないのか、特定の値が入っているか見てみたり、
カラム名を好きなように変えたり、もうなんか色々やります。
便利なのはいいんですけど、こう、書けることが多いと覚えることも多くて
やる気がガン萎えしちゃうんですけど私だけですかね。
いやまぁ使い方さえ分かれば後はどうとでもなるんですけども。覚えるの得意じゃないので正直大変です。
中学生の頃なんか勉強が嫌すぎてノートにかわいい女の子のイラスト貼って
吹き出しに解説書いたり・・・これ以上は私の真っ黒クロすけな歴史なのでやめておきます。
典型的な自虐ネタも挟めたところで条件抽出を見ていきましょう。

AND / OR / BETWEEN

これは「かつ」
AND
~WHERE
条件式1 AND 条件式2;

条件を絞れます。

これは「または」
OR
~WHERE
条件式1 OR 条件式2;

条件を増やせます。

これは「値の間」
BETWEEN
~WHERE
カラム名 BETWEEN 値1 AND 値2;

なんか2つの値の間のデータ見れます。
次はnull関係ヌル

IS NULLとIS NOT NULL

IS NULL(nullであるもの)
~WHERE
カラム名 IS NULL;

nullが入ってるところを指定できるヌル。

IS NOT NULL(nullでないもの)
~WHERE
カラム名 IS NOT NULL;

nullじゃないものを指定できるヌル。

「IN / NOT IN

IN(値1,2,・・・と等しいもの)
~WHERE
カラム名 IN(値1, 値2, 値3, ・・・);


~WHERE
name IN(“田中” , “山田” , “佐藤”);
こんな感じで使います。

NOT IN(値1,2,・・・と等しくないもの)
~WHERE
カラム名 NOT IN(値1, 値2, 値3, ・・・);

値が入ってるか入ってないかで条件分けられる感じですね。

「LIKE / % / _(アンダーバー)」

ごめんなさい、好きではないです。
これは文字検索に使用します。

~WHERE
カラム名 LIKE 検索条件;

と使用しますが、

WHERE
name LIKE “%山%”
;
こうすると山がとりあえず入ってる人全員を表示の対象とします。
以下が条件の分け方になります。

“%山” ⇒ 後ろが山で終わる人
“_山” ⇒ 後ろが山で、なおかつ山の前は1文字
__山” ⇒ 後ろが山で、なおかつ山の前は2文字
“%山%”⇒ 山入るものは全部
“山_” ⇒ 最初が山で、なおかつ山の後ろは1文字
“%山_” ⇒ 山の前は何文字でもよく、山の後ろは1文字
となります。
複雑そうに見えますが、なんと複雑です。
覚えるまで少し大変でした。次です。

ASについて

データ抽出するときにカラム名を自由に設定できます。
日本語でも大丈夫です。見やすくするため、まとまったクエリを1つの
名前として設定できる便利な奴です。

SELECT
カラム名 AS 別名
FROM
テーブル名 AS 別名

こうです。

SELECT
name AS 名前
FROM
students AS うへへへ

こうするとnameカラムは「名前」に、
studentsカラムは「うへへへ」に代わります。
現場で「うへへへ」とか舐めたコード書いたら首飛びそうですね。

・加工抽出

加工してから抽出するやつです。
そう、ただそれだけ…。

「CASE」


「単純CASE式」
SELECT
CASE カラム名
WHEN 比較値1
THEN 出力値1
WHEN 比較値2
THEN 出力値2
・・・
ELSE 出力値3
END AS 別名
FROM テーブル名;

これが構文です。これだけじゃあ何がなんだかッ!まるで!分らないぜッ!!
以下実際の使い方例です。

SELECT
CASE price
WHEN 100 > price
THEN 安い
WHEN 100 <= price
THEN 高い
ELSE わからん
END AS 値段
FROM Purchase ;

priceが100より小さいところは「安い」と表示され、
100以上のところは「高い」と表示されます。
それ以外の時はよくわからんので「わからん」と表示されます。
ちなみに、長いですけど「END AS 名前」までが一つのカラムとみなされます。

「検索CASE式」
CASEの横にカラム名を入れないのがキモです。
SELECT
CASE
WHEN 条件式
THEN 出力値1
WHEN 条件式
THEN 出力値2
・・・
ELSE 出力値3
END AS 別名
FROM テーブル名;

これも!まるで!訳が分らないぜッ!!
これも実際の使い方を見ましょう。

SELECT
CASE
WHEN gender = “1”
THEN 男
WHEN gender = “2”
THEN 女
ELSE その他
END AS 性別
FROM students;

genderが1の時は男に、2の時は女に、それ以外はその他に出来ます。
これも一つのカラムとして見られるので、END のあとにASを付けないと
カラム名が条件文と同じ長文になったりします。
ASを付けないとやばたにえんです。

ORDER BY / LIMIT / DISTINCT / UNION、EXCEPT、INTERSECT

英単語の嵐ですね。
嵐のごとく速攻で攻略します。

「ORDER BY」
データの整理方法です。


FROM テーブル名

ORDER BY
カラム名 ASCまたはDESC

これをつけるとデータを降順か昇順で表示できます。
ASC が昇順
DESC が降順
です。

「LIMIT」
データを表示する個数を指定できます。

ORDER BY
カラム名 ASC
LIMIT 1
;

こうするとデータを1つだけにすることになります。

LIMIT 9 , 3
;

こうすることで10番目のデータから、3つまでデータを表示できます。

「DISTINCT」
SELECTの横にこれを記述することで重複するデータを
1度だけ表示させるよう設定できます。

「UNION」
2つのSELECT文の間に記入することで
別々のテーブル同士をくっつけて表示させることが出来ます。
ちなみに
UNIONだと重複するデータは1度のみ、
UNION ALL だとある分だけ重複するデータも表示させるようです。
処理的にはUNION ALLのが早いっぽいですが、もはや雑学ですね。

「EXCEPT」
1つ目のテーブルと2つ目のテーブルを比較し、
重複しないものだけを1つ目のテーブルからのみ表示させます。

「INTERSECT」
1つ目のテーブルと2つ目のテーブルの
重複したデータのみ表示させます。

長くなったので今回はここまで。
次回でSQLを終わらせます。

BLOGトップへ戻る