「SQL文を書くときに、大文字と小文字で分かれているのは何で?」
「何かルールがあるの?」
こんな風に思っている人もいるのではないでしょうか。
SQLの参考書などでは大文字で書かれていても、実際の現場では全部小文字で書いている…なんてこともありますよね。
そこでこの記事では、SQLの大文字・小文字のルールについて解説します。
今まで大文字・小文字で悩んでいた人は、ぜひこの記事で解決してください!
SQLの大文字・小文字にルールはない
結論から言うと、SQLの大文字・小文字にルールはありません。
どちらで記述しても問題ありませんが、現場や組織・企業によっては記述方法を統一している場合があるでしょう。
その場合は、記述方法に則った書き方をした方が、混乱が起きません。
大文字・小文字はどちらを使うべき?
「そうは言っても、ルールが決まってないからどちらをべきか悩む…」
という人もいるでしょう。
大文字・小文字を使うのにルールはありませんが、視認性・可読性を高める上でも分けて使うのは有効です。
ただし、いちいち大文字・小文字を分けて記述するため、効率的ではないという考えの人が一定数いるのも事実でしょう。
ここでは、一般的に大文字を使うもの、小文字を使うものについて紹介します。
(1)大文字にすべきもの
SQLで大文字にすべきものは、予約語・キーワードです。
予約語とは、SQLの機能として特別な意味をもつ言葉のことです。
SELECTやFROM、WHEREなどの命令に使う単語が当てはまります。
予約語は前述したように特別な意味をもつため、テーブル名やカラム名に使うことはできません。
予約語を大文字で記述することで、SQLの高速化にもつながることもあります。
詳しくは、以下の記事が参考になるので、ぜひ一読してみてくださいね。
【関連記事】
▶︎【SQL】予約語・キーワード完全保存版!予約語についての説明も。
▶︎SQLで高速化を考えた時にできるテクニック・コツをまとめて紹介!
(2)小文字にすべきもの
大文字にすべきものでも少しお話ししましたが、テーブル名やカラム名は小文字で記述すべきです。
この記事でも、テーブル名やカラム名は小文字で記述し、予約語は大文字で記述しています。
「大文字で書くのがダメ」という訳ではありませんが、よほどの理由がない限り、視認性の観点から小文字で書くのがおすすめです。
SQLで大文字・小文字の区別はする?しない?
MySQLでは、デフォルト状態だと大文字・小文字の区別はしません。
実際に、SQLを実行して確認してみましょう。
次のテーブルを用意しました。
mysql> SELECT * FROM sample_tb; +------+--------+ | id | name | +------+--------+ | 1 | Suzuki | | 2 | SUZUKI | | 3 | suzuki | | 4 | SuZuKi | | 5 | SUZuki | +------+--------+ 5 rows in set (0.00 sec)
どれも「鈴木」というローマ字の名前ですが、大文字・小文字がバラバラに設定されています。
このテーブルから、次のように小文字の「suzuki」を取得したいとしましょう。
SELECT * FROM sample_tb WHERE name = 'suzuki';
しかし、SQL文を実行して返る結果は、次の通りです。
mysql> SELECT * FROM sample_tb WHERE name = 'suzuki'; +------+--------+ | id | name | +------+--------+ | 1 | Suzuki | | 2 | SUZUKI | | 3 | suzuki | | 4 | SuZuKi | | 5 | SUZuki | +------+--------+ 5 rows in set (0.00 sec)
このように、大文字・小文字を区別することなく、すべてのデータが取得できてしまいました。
大文字・小文字を区別して結果を取得する方法
では、大文字・小文字を区別して結果を取得する場合にはどうすれば良いのでしょうか。
結論として、次の2つの方法があります。
- BINARY演算子を記述して取得する
- カラムにBINARY属性を追加する
まずは、BINARY演算子を記述して結果を取得する方法です。
先ほどのSQL文に、BINARYを追加します。
SELECT * FROM sample_tb WHERE name = BINARY 'suzuki';
BINARYを指定することで、大文字・小文字区別してくれます。
上記のSQL文を実行すると、次のように結果が取得できます。
mysql> SELECT * FROM sample_tb WHERE name = BINARY 'suzuki'; +------+--------+ | id | name | +------+--------+ | 3 | suzuki | +------+--------+ 1 row in set (0.01 sec)
期待通りの結果が取得できていますね!
カラムの後ろにBINARYを指定しても、同様の結果が取得できます。
mysql> SELECT * FROM sample_tb WHERE BINARY name = 'suzuki'; +------+--------+ | id | name | +------+--------+ | 3 | suzuki | +------+--------+ 1 row in set (0.00 sec)
このように、大文字・小文字を区別して結果を取得したい場合は、BINARYを記述しましょう。
また、テーブル作成時にカラムにBINARY属性を追加する方法でも、大文字・小文字の区別ができます。
以下のような形で記述しましょう。
CREATE TABLE sample_tb(id int, name varchar(20) BINARY);
もし、すでに作成しているテーブルのカラムにBINARY属性を追加したい場合は、次のように記述できます。
ALTER TABLE sample_tb MODIFY name varchar(20) BINARY;
上記のSQL文を実行後、データの検索をしてみると、次のように大文字・小文字を区別して検索可能です。
mysql> SELECT * FROM sample_tb WHERE name = 'suzuki'; +------+--------+ | id | name | +------+--------+ | 3 | suzuki | +------+--------+ 1 row in set (0.00 sec)
大文字・小文字を区別したい場合は、テーブル作成時にカラムに属性を付与しましょう。
【関連記事】
▶︎SQLで項目を追加する方法(ALTER TABLE ADD)まとめ
大文字・小文字は変換方法
前章で、大文字・小文字を区別して検索結果を取得する方法を紹介しました。
ここでは、格納されているデータの大文字・小文字を変換する方法を見ていきましょう。
大文字と小文字を変換する際には「UPPER関数」「LOWER関数」を使います。
MySQLの場合は、「UCASE関数」「LCASE関数」も使用可能です。
使い方は次の通りです。
SELECT UPPER('文字列'); SELECT UCASE('文字列'); SELECT LOWER('文字列'); SELECT LCASE('文字列');
大文字・小文字にしたい文字列を記述するだけなので、簡単に使える関数と言えますね。
実際に動かして確認してみましょう。
mysql> SELECT UPPER('potepan'); +------------------+ | UPPER('potepan') | +------------------+ | POTEPAN | +------------------+ 1 row in set (0.03 sec) mysql> SELECT UCASE('potepan'); +------------------+ | UCASE('potepan') | +------------------+ | POTEPAN | +------------------+ 1 row in set (0.00 sec) mysql> SELECT LOWER('POTEPAN'); +------------------+ | LOWER('POTEPAN') | +------------------+ | potepan | +------------------+ 1 row in set (0.00 sec) mysql> SELECT LCASE('POTEPAN'); +------------------+ | LCASE('POTEPAN') | +------------------+ | potepan | +------------------+ 1 row in set (0.00 sec)
上記のように、それぞれ期待した動作になっているのがわかります。
また、先ほどのテーブルを用いると、次のように大文字・小文字を統一できます。
mysql> SELECT id, UPPER(name) FROM sample_tb; +------+-------------+ | id | UPPER(name) | +------+-------------+ | 1 | SUZUKI | | 2 | SUZUKI | | 3 | SUZUKI | | 4 | SUZUKI | | 5 | SUZUKI | +------+-------------+ 5 rows in set (0.00 sec) mysql> SELECT id, LOWER(name) FROM sample_tb; +------+-------------+ | id | LOWER(name) | +------+-------------+ | 1 | suzuki | | 2 | suzuki | | 3 | suzuki | | 4 | suzuki | | 5 | suzuki | +------+-------------+ 5 rows in set (0.00 sec)
データを大文字・小文字で統一して取得したい場合に、便利に使えるでしょう!
SQLの大文字・小文字についてまとめ
SQLで大文字・小文字について、ルールや区別方法などを紹介しました。
SQLを記述する際に、「大文字で書く」「小文字で書く」といったルールはありません。
しかし、現場や組織によっては書き方が決められているので、しっかり確認しておくと良いでしょう。
一般的には、予約語やキーワードは大文字で書き、テーブル名やカラム名は小文字で書くことを推奨しています。
ぜひ、参考に覚えておいてくださいね。
大文字・小文字の区別は、デフォルトでは設定されていないため、検索時にはBINARY演算子を用いる必要があります。
また、大文字・小文字は関数で変換も可能ですので、ぜひこの記事を参考にやり方をマスターしてください!