この資料は弊社後輩に説明するために扱った&口頭説明の補助的資料です。
せっかく纏めたので記念に残しておくかだけのものです、悪しからず。
昨日の答え合わせ
- 国名に 'United' を含む国の国名を特定する。
WHERE - LIKE
文字列の検索を行う。
LIKE
だけだと、完全に一致した結果しか出力されない。
「部分一致」や「前方一致」「後方一致」するような検索がしたい!
-> そんなときに「ワイルドカード」なるものが使える。
ワイルドカード
何にでも代用が効く文字のこと。
トランプでいうとこのジョーカーみたいな。
SQL ではワイルドカード文字は2種類ある。
文字 | 意味 |
---|---|
_ | 任意の1文字 |
% | 0文字以上の任意の文字列 |
使用例
「キューバ」を検索したいけど C のあとのスペルに自信ないな...って時。
SELECT *
FROM world
WHERE name LIKE 'C_ba'
「A」から始まる国名を検索したい時。
SELECT *
FROM world
WHERE name LIKE 'A%'
末尾が「Y」で終わる国名を検索したい時。
SELECT *
FROM world
WHERE name LIKE '%Y'
とりあえずどこの位置にあるか分からないけど「RI」を含んでいる国名を検索したい時。
SELECT *
FROM world
WHERE name LIKE '%RI%'
シングルクォーテーション / ダブルクォーテーション
「どっちも一緒じゃね?🤔」に対する答えとしては
-> 扱う DBMS によって差がある
だいたいの標準 SQL の仕様では
''
: 文字列定数として扱う
""
: カラム名として扱う
MySQL という DBMS では
''
: 文字列定数として扱う
""
: 文字列定数として扱う
``
: カラム名として扱う
ついでにエスケープ処理
例えば、ある値の中に「I'm」とか「Taro's」とか「100%」などの言葉が入っているものを調べたい...!というとき。
'
や %
は単体だと囲っている文字やワイルドカードとして認識されてしまう。
そこで、'
や %
を「ただの記号だよー意味ないよー」という印をつけてあげる必要がある。
その「ただの記号だよー意味ないよー」という印をつけてあげることを エスケープ処理 という。
-
'
なら'I''m Tsumako'
のように'
を重ねる -
%
なら'100%%'
のように%
を重ねる -
'I\'m Tsumako'
や'100\%'
のようにエスケープしたい文字の前に\
をつける
AND / OR
AND (∧) : どちらにも当てはまる
OR (∨) : どちらか一方当てはまれる
+-*/
に計算の優先順位があるように、NOT > AND > OR
の順で優先される。
意図通りに処理させたい場合は ()
を用いる。
XOR
排他的論理和
(もはや数学の授業やんけ...)
2つのうち1つだけ正しければ正しい、というもの。
両方合ってる、両方間違っているものはダメになる。
数学的例でみると...
- A は真、B は真 -> 偽
- A は真、B は偽 -> 真
- A は偽、B は真 -> 真
- A は偽、B は偽 -> 偽
になる。
関数 - ROUND(数値関数)
端数を丸めてくれる関数。
ROUND(n [,m ]) というように使う。
n には端数を丸めたいものを入れ、m には小数点以下何桁で丸めるかを整数で指定する。
m は省略も可能で、省略すると 0 桁で丸める。
m にはマイナスの値も指定できる。
SELECT name, ROUND(population, -4)
FROM world
WHERE population >= 200000000
数値だけじゃなくて日付に対しても使える。
関数 - LENGTH
文字列の文字数を求めてくれる関数。
使用する DBMS によって LEN
だったり CHAR_LENGTH
だったり違うので注意。
今回は LENGTH
で OK!
SELECT name, LENGTH(name)
FROM world
WHERE LENGTH(name) > 20