こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLのSELECT文で*を使わない理由

SQLでSELECT文を使う場合、大抵
 SELECT ID, user FROM u_table
のように、取得する項目を指定すると思います。

これを、
 SELECT * FROM u_table
としないのには、トラフィックの問題以外に何か理由があるのでしょうか?

投稿日時 - 2013-12-09 12:47:18

QNo.8379356

暇なときに回答ください

質問者が選んだベストアンサー

>としないのには、トラフィックの問題以外に何か理由があるのでしょうか?

フィールドの並び順が「予期せぬ結果」になるからです。

例えば、最終的な抽出結果を「項目名が1行目に付かない、CSVファイルに落とす場合」を考えてみましょう。

CSVになった段階で「1番目の項目が何、2番目の項目が何、3番目の項目が何」と言う情報は失われます。

もし、誰かが、大元のテーブルのIDフィールドとuserフィールドを「逆の順番に並び替えた」とします。

SELECT * FROMだと「抽出結果が、1番目の項目がIDで、2番目の項目がuserである」と言う保証はありません。誰かが元テーブルのフィールドの順番を入れ替えてしまったかも知れません。

入れ替えたのを知らずに、そのままCSVファイルに落としてしまうと、「1番目の項目が何、2番目の項目が何」と言う情報は失われているので、想定外のCSVファイルが出来上がってしまいます。

SELECT ID, user FROMなら「抽出結果が、1番目の項目がIDで、2番目の項目がuserである」と言う事が保証されます。誰かが元テーブルのフィールドの順番を入れ替えても、結果は変わりません。

結果のフィールドの並び順が保証されるので、そのままCSVファイルに落としても、想定通りのCSVファイルが得られます。

SELECT文で「すべての項目が全部並べて書いてあって、抽出条件も何もなしで、全レコードを返している場合」がありますが、このSQL文の意味は「結果のフィールドの並び順を固定するため」なので、安易にSELECT * FROMに書き換えると、思わぬ所でバグを産んで、痛い目に遭います。

投稿日時 - 2013-12-09 13:12:00

お礼

なるほどー。
大変参考になりました。

投稿日時 - 2013-12-09 13:49:01

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-
-広告-
-広告-