- ベストアンサー
シングルクォーテーションとダブルクォーテーション
いつも楽しく拝見させて頂いています。 初心者ですが宜しくお願いします。 シングルクォーテーションとダブルクォーテーションの使用方法について質問させて頂きます。 select文でテーブル名を指定するときはそのまま(たとえば'名前'じゃなく名前)しないとエラーになります。そういう風なシングルクォーテーション(又はダブルクォーテーション)を使ってはいけないところ、またシングルクォーテーションにしないといけないところ、ダブルクォーテーションにしないといけないところを教えて頂けますでしょうか?もし両方OKならその違い等も教えていただけるとうれしいです。 以上宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字定数は、「'」で囲む必要があります。 例)SELECT 'ABC' →文字定数の'ABC'と解釈される SELECT ABC →ABCは、表名や列名と解釈される 数値定数は、多くのRDBMSでは「'」で囲みませんが、MySQLでは独自仕様として囲むことが可能です。 例)SELECT 123 →数値定数の123 SELECT '123' →一般的なRDBMSでは文字として扱われる。MySQLでは数値としても扱える 殆どのRDBMSには予約語があり、RDBMSでは予約語を頼りに構文解析します。表名や列名に英単語やその組み合わせを使おうとすると、予約語とぶつかってしまうことがあります。 例)SELECT FROM FROM →予約語のSELECT FROMの間に「*」や列名が指定されておらず、RDBMSは構文誤りと認識する それを回避するために、標準SQLでは「"」で表名や列名を囲みます。MySQLでは、文字コードにANSIを使う場合は、「"」で、それ以外には独自仕様で「`」(バッククォーテーション)を使います。 例)SELECT "FROM " FROM →多くのRDBMSでは「"」で囲むことで、RDBMSに最初の「FROM」は、列などの名前であることを知らせる SELECT `FROM` FROM →ANSI以外のMySQLでは、「`」(バッククォーテション)で囲む また、「-」(ハイフォン)を表名や列名に使う場合、「"」で囲まないと、SQLでは減算と解釈されます。このように、「"」で囲むことで、記号なども名前に使用することができます。 例)SELECT ABC-DEF →列ABCと列DEFの減算と解釈される SELECT "ABC-DEF" →列「ABC-DEF」と解釈される SELECT `ABC-DEF' →ANSI以外のMySQLでは、「"」でなく「`」(バッククォーテション)を使用
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
テーブル名やフィールド名はバッククォーテーション「`」です。 値や文字列はシングルクォーテーションを使うのが一般的です。 シングルクォーテーションはダブルクォーテーションと同等ですが、 SQLは多くのプログラミング言語と連携してつかうケースが多く、 例えばPHPで書く場合 $sql="SELECT * FROM `hoge` WHERE `fuga`='$piyo'"; とするときれいにかけますが $sql='SELECT * FROM `hoge` WHERE `fuga`="$piyo"'; としても$piyoは変数として処理されません。 これは多くのプログラム言語でシングルクォーテーションで括った 場合は変数を展開しないという決まりがあるからです。 したがってSQLではシングルクォーテーションを括り文字として 使った方がスマートです。
お礼
文字コードでバッククォーテーションを使ったりダブルクォーテーションを使うことがあるんですね。ありがとうございました。とても参考になりました。