web-dev-qa-db-ja.com

SQLの一重引用符と二重引用符の違いは何ですか?

SQLの一重引用符と二重引用符の違いは何ですか?

194
Vineet

単一引用符は、SQLの文字列の開始と終了を示すために使用されます。 SQLでは通常、二重引用符は使用されませんが、データベースによって異なる場合があります。

単一引用符の使用に固執します。

とにかくそれが主な用途です。列のエイリアスには一重引用符を使用できます。アプリケーションコードで参照する列名を、データベースで実際に列が呼び出されるものとは異なる名前にする場合。たとえば、PRODUCT.idproduct_idの方が読みやすいため、次のいずれかを使用します。

  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

どちらもOracle、SQL Server、MySQLで機能しますが、一重引用符を使用する場合、TOAD IDEが悲しみを与えると言っている人もいます。

列エイリアスにスペース文字(product idなど)が含まれる場合は、単一引用符を使用する必要がありますが、列エイリアスを複数のWordにすることはお勧めできません。

130
OMG Ponies

単一引用符は、文字列定数または日付/時刻定数を区切ります。

二重引用符は、たとえばテーブル名または列名。これは通常、識別子が単純な識別子のルールに適合しない場合にのみ必要です。

こちらもご覧ください:

MySQLでANSI標準ごとに二重引用符を使用することができます。

SET GLOBAL SQL_MODE=ANSI_QUOTES

Microsoft SQL ServerでANSI標準ごとに二重引用符を使用することができます。

SET QUOTED_IDENTIFIER ON
59
Bill Karwin

どの場合に使用するかを覚えておくための2つの簡単なルール:

  • [S]単一引用符は、[S] tringsの場合です。 [D] ouble引用符は[D] atabase識別子用です。
  • `シンボルは"シンボルと同じです。ANSI_QUOTESを有効にして"を使用できます。

ANSI SQLでは、二重引用符はオブジェクト名(テーブルなど)を引用します。これにより、他の方法では許可されていない文字を含めることができます。

単一引用符は文字列用です。

ただし、MySQLは(SQL_MODEが変更されていない限り)標準を無視しているため、文字列に互換的に使用できます。

さらに、SybaseとMicrosoftは、識別子の引用に角括弧も使用します。

したがって、ベンダー固有のビットです。

PostgresやIBMなどの他のデータベースは、実際にANSI標準に準拠しています:)

32
MarkR

このニーモニックを使用します。

  • 単一引用符は文字列用です(1つ)
  • 二重引用符は、テーブル名と列名用です(2つのこと)

これは仕様に従って100%正確ではありませんが、このニーモニックは私(人間)を助けます。

7
guettli

違いは使用法にあります。単一引用符は、主にWHERE、HAVING、およびCONCAT、STRPOS、POSITIONなどの一部の組み込みSQL関数で文字列を参照するために使用されます。

間にスペースがあるエイリアスを使用する場合は、二重引用符を使用してそのエイリアスを参照できます。

例えば

(select account_id,count(*) "count of" from orders group by 1)sub 

次に、account_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;

同じケースを共通テーブル式にも適用できます。

0