はじめに
現在仕事の関係上SQLについて学習しているのですが、
比較演算子の一つであるBETWEEN演算子、および比較演算子の挙動についてはっきりとしなかった部分がありました。
初歩的な部分ではありますが、個人的に詰まった部分ですので忘れないうちに残しておこうと思います。
勘違いしていた点
BETWEEN演算子というものに対して、それまで私は「BETWEEN演算子は文字には使用できない」と思い込んでいたのですが、実際は違うようです。
こちらのサイト様を参考とさせて頂いたのですが、BETWEEN演算子とは「対象となるデータが2つのデータの間のものを返す」のではなく、
「対象となるデータが演算子の左辺以上、尚且つ右辺以下のものを返す」という処理のようです。
つまり、BETWEEN演算子を他の演算子で表現すると以下のようになります。
「値A BETWEEN 値B AND 値C」 =「 値A >= 値B AND 値A <= 値C」
また、比較演算子は文字列には使えないわけでもなく、文字列を対象のデータとした場合、文字コードによって比較されるのだそうです。
より調べてみたら
上記の事実を知った後、練習問題の中でSQL文を入力しました。
以下のSQL文は「列yomiに含まれた文字列のうち's'より頭のほうの文字列のみを抽出する」ことを目的とした文章です。
データベースの列yomiの中身:
saito
suzuki
tanaka
最初のSQL文のWHERE句の内容:
WHERE yomi > 's'
上記のWHERE句で実行した際、データベースの中身がすべて(saito, suzukiを含めて)表示されてしまいました。
その時は訳が分からず、しばらく参考書とウェブサイトを見て回る作業に徹したのですが、
正しいSQL文のWHERE句の内容:
WHERE SUBSTR(yomi, 1,1) > 's'
上記の条件で正しい答えを得ることができました。
単純に、頭文字だけを抽出したうえで文字コードを比較させるだけでよかったのです。
また上記の結果から、文字列と比較演算子による条件の場合、
文字列側は文字コード全てを足し合わせた値と条件値を比較する仕組みになっていることもそこで知りました。
例(Shift-JIS): saito(554) = s(115) + a(97) + i(105) + t(116) + o(111)
...というかこんなこと、改めて参考書をよく見るとちゃんと書いてあったりするのですが。
今回の教訓としては「参考書は隅々まで読もう」ということです。(_ _ ; )
※コメント投稿者のブログIDはブログ作成者のみに通知されます