続いて、SQL文を書く上で間違いやすいポイントを説明していきます。
usersテーブルとjobsテーブル、areaテーブルを結合した結果から、ユーザーIDと名前を指定してデータを取り出す場合です。
SELECT userID name
FROM users
INNER JOIN jobs ON jobs.jobID = users.jobID
INNER JOIN area ON area.areaID = users.areaID;
このようにuserIDとnameを指定し実行してみます。
すると、このようにnameの列のみが表示され、userIDが表示されませんでした。
これは、SELECT userID name の列に問題があり、複数のカラムを表示させる時にはカンマ(,)で区切る必要があります。
これを正しいSQL文で実行すると、このようになります。
このように、userIDとnameが表示されました。
カンマ忘れやセミコロン忘れなど、小さなミスでもコードが実行できずにエラーが起きたり、表示させたいデータが表示されなかったりするので、細かい所にも気を使わなければなりません。
次は、userIDと名前の他に、areaIDと都道府県名も表示させてみます。
SELECT userID, name, areaID, area_name
FROM users
INNER JOIN jobs ON jobs.jobID = users.jobID
INNER JOIN area ON area.areaID = users.areaID;
このSQL文を実行すると、このようになります。
エラー文が表示されてしまいました。
これはなぜかというと、SELECT文の行にあるareaIDが、areaテーブルとusersテーブル、両方のテーブルに存在しているためどちらのareaIDを表示させるのかが曖昧になってしまっているからです。
このエラーを解消するためには、カラム名の前にテーブル名を追記し、どのテーブルのareaIDかをわかるようにしておく必要があります。
SELECT userID, name, area.areaID area_name
FROM users
INNER JOIN jobs ON jobs.jobID = users.jobID
INNER JOIN area ON area.areaID = users.areaID;
このようにSQL文を修正すると、エラーが出ずに正しくデータを抽出することができます。
続いては、ユーザーIDが50番台のユーザーを抽出して表示してみます。
ユーザーを抽出するには、WHEREを使用してSQL文を作成し、実行します。
SELECT userID, name, area.areaID area_name
FROM users
INNER JOIN jobs ON jobs.jobID = users.jobID
INNER JOIN area ON area.areaID = users.areaID
WHERE
userID >= 50
userID < 60;
このSQL文を実行すると、このようになります。
エラーが出てしまいました。
これはなぜかというと、WHEREで複数の条件を指定する際はANDを入れて条件を繋ぐ必要があります。