回答:
単一引用符は、SQLの文字列の開始と終了を示すために使用されます。二重引用符は通常SQLでは使用されませんが、データベースによって異なる場合があります。
一重引用符の使用に固執します。
とにかく、それが主な用途です。列のエイリアスには一重引用符を使用できます。アプリケーションコードで参照する列名を、データベースで実際に列が呼び出される名前とは異なるものにする必要があります。例:PRODUCT.id
より読みやすくなるproduct_id
ため、次のいずれかを使用します。
SELECT PRODUCT.id AS product_id
SELECT PRODUCT.id 'product_id'
どちらもOracle、SQL Server、MySQLで機能しますが、シングルクォートアプローチを使用すると、TOAD IDEが問題を引き起こすようだと言う人もいます。
列のエイリアスにスペース文字が含まれている場合は、一重引用符を使用する必要があります(例:)product id
。ただし、列のエイリアスを複数の単語にすることはお勧めできません。
SELECT * FROM USERS 'Users'
SQL Serverでは機能しませんが、SELECT * FROM USERS "Users"
機能します。
SELECT PRODUCT.id 'product_id'
うではないオラクルで働いています。単一引用符は文字リテラル専用です。それらは(標準)SQLの識別子には使用できません(一部のDBMSは引用符で囲まれた識別子に関してはSQL標準を無視するだけです)
単一引用符は、文字列定数または日付/時刻定数を区切ります。
二重引用符は、テーブル名や列名などの識別子を区切ります。これは通常、識別子が単純な識別子のルールに適合しない場合にのみ必要です。
以下も参照してください。
MySQLでANSI標準ごとに二重引用符を使用することができます。
SET GLOBAL SQL_MODE=ANSI_QUOTES
Microsoft SQL ServerでANSI標準ごとに二重引用符を使用するようにできます。
SET QUOTED_IDENTIFIER ON
ANSI SQLでは、二重引用符は、オブジェクト名(例:テーブル)を引用符で囲みます。これにより、他の方法では許可されない文字、または予約語と同じ文字を含めることができます(実際には避けてください)。
一重引用符は文字列用です。
ただし、MySQLは標準に気付かず(SQL_MODEが変更されていない限り)、それらを文字列に対して交換可能に使用できます。
さらに、SybaseとMicrosoftも識別子の引用に角括弧を使用しています。
したがって、それはベンダー固有です。
PostgresやIBMなどの他のデータベースは、実際にはansi標準に準拠しています:)
違いはそれらの使用法にあります。一重引用符は、ほとんどの場合、WHERE、HAVING、およびCONCAT、STRPOS、POSITIONなどの一部の組み込みSQL関数で文字列を参照するために使用されます。
間にスペースがあるエイリアスを使用する場合は、二重引用符を使用してそのエイリアスを参照できます。
例えば
(select account_id,count(*) "count of" from orders group by 1)sub
以下は、accounts_idを外部キーとして持つ注文テーブルのサブクエリで、各アカウントが行った注文の数を知るために集計しています。ここでは、目的のために「カウント」として任意のランダムな名前を1列に付けています。
次に、 "count of"が20より大きい行を表示する外部クエリを作成しましょう。
select "count of" from
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;
同じケースを共通テーブル式にも適用できます。