アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも楽しく拝見させて頂いています。
初心者ですが宜しくお願いします。
シングルクォーテーションとダブルクォーテーションの使用方法について質問させて頂きます。
select文でテーブル名を指定するときはそのまま(たとえば'名前'じゃなく名前)しないとエラーになります。そういう風なシングルクォーテーション(又はダブルクォーテーション)を使ってはいけないところ、またシングルクォーテーションにしないといけないところ、ダブルクォーテーションにしないといけないところを教えて頂けますでしょうか?もし両方OKならその違い等も教えていただけるとうれしいです。
以上宜しくお願いします。

A 回答 (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では、「"」でなく「`」(バッククォーテション)を使用
    • good
    • 5
この回答へのお礼

文字コードでバッククォーテーションを使ったりダブルクォーテーションを使うことがあるんですね。ありがとうございました。とても参考になりました。

お礼日時:2006/11/22 21:50

テーブル名やフィールド名はバッククォーテーション「`」です。


値や文字列はシングルクォーテーションを使うのが一般的です。
シングルクォーテーションはダブルクォーテーションと同等ですが、
SQLは多くのプログラミング言語と連携してつかうケースが多く、
例えばPHPで書く場合

$sql="SELECT * FROM `hoge` WHERE `fuga`='$piyo'";
とするときれいにかけますが

$sql='SELECT * FROM `hoge` WHERE `fuga`="$piyo"';
としても$piyoは変数として処理されません。

これは多くのプログラム言語でシングルクォーテーションで括った
場合は変数を展開しないという決まりがあるからです。
したがってSQLではシングルクォーテーションを括り文字として
使った方がスマートです。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す