SQL文の書き方の注意点
大文字と小文字は区別しない❓
命令語は区別はされません。(区別する製品もあるかもしれません)
ただし、MySQLは、データベース名の大文字と小文字を区別しています。
これは、データベース名のアクセスに、ファイルシステム上のファイル名を利用するからです。
MacやWindowsのファイルシステムは、大文字と小文字を区別するか選択できますが、デフォルトは区別しないになっています。
Linuxは大文字と小文字を区別するため、テーブル名は大文字か小文字か正確に入力する必要があります。
文字列はシングルクォート(')で囲む
WHEREでレコードの抽出する条件を指定する場合、数字ではなく文字列を指定する場合は、シングルクォート(')で囲む必要があります。
SELECT * FROM t_table WHERE name = 'taro'
カラム名もエスケープする
通常はカラム名をエスケープしなくても問題はありません。
SELECT id FROM t_user WHERE email = 'user@example.com';
ただし、group
というカラム名の値を抽出しようとするとエラーになります。
SELECT group FROM t_user WHERE id = 1;
これは、group
が、SQL文の予約語だからです。limit
やorder
などのカラム名も同様にエラーになります。
エラーは思わぬ箇所で発生しますので、常にエスケープしておくと良いと思います。
SELECT `limit` FROM `t_user` WHERE `group` = 'japanese';
エスケープ記号はデータベース毎に異なります。
日付の形式
日付の形式は、yyyy-mm-ddです。
⭕ 2024-01-01
❌ 2024-1-1
❌ 2024/01/01
日付も文字列と同様にシングルクォート(')で囲む必要があります。
SELECT * FROM t_table WHERE date = '2024-01-01'
集計関数
SQL文には集計関数があります。合計や平均、最大値や最小値を簡単にもとめられます。
sum
scoreカラムの合計をもとめます。
SELECT sum(score) FROM t_table
count
今日のレコードが何件あるかもとめます。
MySQLでは、日付を計算しなくても、CURDATE()
で、今日の日付をMySQLが計算してくれます。
PostgreSQLでは、CURRENT_DATE
という定数が用意されています。
SELECT count(score) FROM t_table WHERE date = CURDATE();
min, max, avg
今日の最小、最大、平均をもとめられます。
SELECT min(score) FROM t_table WHERE date = CURDATE();
Discussion