Was ist der Unterschied zwischen einfachen und doppelten Anführungszeichen in SQL?

224

Was ist der Unterschied zwischen einfachen und doppelten Anführungszeichen in SQL?

Vineet
quelle

Antworten:

153

Einfache Anführungszeichen geben den Anfang und das Ende einer Zeichenfolge in SQL an. Doppelte Anführungszeichen werden in SQL im Allgemeinen nicht verwendet, dies kann jedoch von Datenbank zu Datenbank variieren.

Halten Sie sich an einfache Anführungszeichen.

Das ist sowieso die Hauptverwendung. Sie können einfache Anführungszeichen für einen Spaltenalias verwenden. Dabei soll der Spaltenname, auf den Sie in Ihrem Anwendungscode verweisen, nicht der Name der Spalte in der Datenbank entsprechen. Zum Beispiel: PRODUCT.idwäre besser lesbar als product_id, also verwenden Sie eine der folgenden Methoden:

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

Entweder funktioniert es in Oracle, SQL Server, MySQL ... aber ich weiß, dass einige gesagt haben, dass die TOAD IDE bei Verwendung des Ansatzes in einfachen Anführungszeichen etwas Kummer zu bereiten scheint.

Sie müssen einfache Anführungszeichen verwenden, wenn der Spaltenalias beispielsweise ein Leerzeichen enthält. Es product idwird jedoch nicht empfohlen, dass ein Spaltenalias mehr als ein Wort enthält.

OMG Ponys
quelle
31
Doppelte Anführungszeichen werden normalerweise für Objektnamen verwendet (z. B. Spaltenname "Vorname"). Das ist Teil des SQL-92-Standards.
LukLed
19
Ich meinte Spaltennamen, aber es geht auch um Aliase. Aufgrund des SQL-92-Standards würde ich empfehlen, doppelte Anführungszeichen für Aliase und Namen mit ungewöhnlichen Zeichen zu verwenden. SELECT * FROM USERS 'Users'funktioniert nicht in SQL Server, SELECT * FROM USERS "Users"funktioniert aber .
LukLed
122
Ich verstehe das immer falsch, bis ich eine einfache Regel verwirklicht habe: [S] ingle quote for [S] trings, [D] ouble quote for things in the [D] atabase
Spacedman
4
Sie sollten doppelte Anführungszeichen für Bezeichner verwenden. Einfache Anführungszeichen verstoßen gegen den Standard.
Erwin Brandstetter
6
SELECT PRODUCT.id 'product_id'wird nicht in Oracle arbeiten. Einfache Anführungszeichen gelten nur für Zeichenliterale. Sie können nicht für Bezeichner in (Standard-) SQL verwendet werden (obwohl einige DBMS den SQL-Standard bei Anführungszeichen in Anführungszeichen einfach ignorieren)
a_horse_with_no_name
80

Eine einfache Regel für uns, um uns daran zu erinnern, was in welchem ​​Fall zu verwenden ist:

  • [ S ] einzelne Anführungszeichen stehen für [ S ] -Trings; [ D ] ouble Anführungszeichen stehen für [ D ] Datenbankkennungen;

In MySQL und MariaDB, die ` ist (Graviszeichen) Symbol das gleiche wie das Symbol. Sie können verwenden , wenn Ihr SQL_MODEist ANSI_QUOTESaktiviert.

Please_Dont_Bully_Me_SO_Lords
quelle
4
Zur Verdeutlichung kann das Backtick (`) verwendet werden, um Bezeichner abzugrenzen, unabhängig davon, ob ANSI_QUOTES aktiviert ist oder nicht. Wenn jedoch ANSI_QUOTES aktiviert ist, können Sie" keine doppelten Anführungszeichen verwenden, um Literalzeichenfolgen in Anführungszeichen zu setzen, da diese als Bezeichner interpretiert werden. " ( Quelle ). (Dies alles setzt voraus, dass Sie über MySQL sprechen, Verstand.)
Sam
Beeindruckend! Ausgezeichnetes Memo!
Alex Yu
[ S ] ingle-Anführungszeichen gelten jedoch auch für [ D ] ate-Literale. : - /
Bill Karwin
Datumsliterale zählen in den meisten DBMS als Strings
Please_Dont_Bully_Me_SO_Lords
64

Einfache Anführungszeichen begrenzen eine Zeichenfolgenkonstante oder eine Datums- / Zeitkonstante.

Doppelte Anführungszeichen begrenzen Bezeichner für z. B. Tabellennamen oder Spaltennamen. Dies ist im Allgemeinen nur erforderlich, wenn Ihr Bezeichner nicht den Regeln für einfache Bezeichner entspricht.

Siehe auch:

Sie können MySQL dazu bringen, doppelte Anführungszeichen gemäß dem ANSI-Standard zu verwenden:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Sie können Microsoft SQL Server dazu bringen, doppelte Anführungszeichen gemäß dem ANSI-Standard zu verwenden:

SET QUOTED_IDENTIFIER ON
Bill Karwin
quelle
36

In ANSI SQL zitieren doppelte Anführungszeichen Objektnamen (z. B. Tabellen), die es ihnen ermöglichen, Zeichen zu enthalten, die ansonsten nicht zulässig sind, oder mit reservierten Wörtern identisch zu sein (Vermeiden Sie dies wirklich).

Einfache Anführungszeichen stehen für Zeichenfolgen.

MySQL kennt den Standard jedoch nicht (es sei denn, sein SQL_MODE wird geändert) und ermöglicht die austauschbare Verwendung für Zeichenfolgen.

Darüber hinaus verwenden Sybase und Microsoft auch eckige Klammern für die Angabe von Bezeichnern.

Es ist also ein bisschen herstellerspezifisch.

Andere Datenbanken wie Postgres und IBM halten sich tatsächlich an den Ansi-Standard :)

MarkR
quelle
4
MySql verwendet den Backtick `für das Zitieren von Bezeichnern. (nur zur Fertigstellung)
Dar7yl
1
Beispiel: Wenn Sie eine Postgres-Spalte "Datum" (reserviert) nennen möchten, müssen Sie sie in doppelte Anführungszeichen setzen.
fny
9

Ich benutze diese Mnemonik:

  • Einfache Anführungszeichen stehen für Zeichenfolgen (eine Sache)
  • Doppelte Anführungszeichen stehen für Tabellennamen und Spaltennamen (zwei Dinge)

Dies ist nicht 100% korrekt gemäß den Spezifikationen, aber diese Mnemonik hilft mir (Mensch).

guettli
quelle
1

Der Unterschied liegt in ihrer Verwendung. Die einfachen Anführungszeichen werden meistens verwendet, um auf eine Zeichenfolge in WHERE, HAVING und auch in einigen integrierten SQL-Funktionen wie CONCAT, STRPOS, POSITION usw. zu verweisen.

Wenn Sie einen Alias ​​verwenden möchten, zwischen dem Platz ist, können Sie doppelte Anführungszeichen verwenden, um auf diesen Alias ​​zu verweisen.

Beispielsweise

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

Hier ist eine Unterabfrage aus einer Auftragstabelle mit account_id als Fremdschlüssel, die ich aggregiere, um zu wissen, wie viele Bestellungen jedes Konto aufgegeben hat. Hier habe ich einer Spalte aus Gründen des Zwecks einen zufälligen Namen als "Anzahl" gegeben.

Schreiben wir nun eine äußere Abfrage, um die Zeilen anzuzeigen, in denen "count of" größer als 20 ist.

select "count of" from 
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;

Sie können den gleichen Fall auch auf allgemeine Tabellenausdrücke anwenden.

Ayushh Srivastava
quelle