В чем разница между одинарными и двойными кавычками в SQL?

Ответы:

154

Одинарные кавычки используются для обозначения начала и конца строки в 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, но не рекомендуется, чтобы псевдоним столбца был больше одного слова.

OMG пони
источник
31
Двойные кавычки обычно используются для имен объектов (например, имя столбца «Имя»). Это часть стандарта SQL-92.
LukLed
19
Я имел в виду имена столбцов, но это касается и псевдонимов. Я бы посоветовал использовать двойные кавычки для псевдонимов и имен с необычными символами из-за стандарта SQL-92. SELECT * FROM USERS 'Users'не работает в SQL Server, но SELECT * FROM USERS "Users"работает.
LukLed
122
Я всегда ошибаюсь, пока не осознаю простое правило: [S] одиночная кавычка для [S] trings, [D] двойная кавычка для вещей в [D] атабазе
Spacedman
4
Вы должны использовать двойные кавычки для идентификаторов. Одиночные кавычки идут против стандарта.
Эрвин Брандштеттер
6
SELECT PRODUCT.id 'product_id'не будет работать в Oracle. Одинарные кавычки предназначены только для символьных литералов. Они не могут использоваться для идентификаторов в (стандартном) SQL (хотя некоторые СУБД просто игнорируют стандарт SQL, когда дело доходит до цитируемых идентификаторов)
a_horse_with_no_name
80

Простое правило для нас, чтобы помнить, что использовать в этом случае:

  • [ S ] одиночные кавычки для [ S ] trings; [ D ] двойные кавычки для идентификаторов [ D ] атабазы;

В MySQL и MariaDB, то ` (кавычка) символ такой же , как « символ. Вы можете использовать » , когда ваш SQL_MODEбыл ANSI_QUOTESвключен.

Please_Dont_Bully_Me_SO_Lords
источник
4
Чтобы уточнить, backtick (`) может использоваться для разделения идентификаторов независимо от того, включен ли ANSI_QUOTES, но если включен ANSI_QUOTES, то« нельзя использовать двойные кавычки для кавычек буквенных строк, потому что это интерпретируется как идентификатор ». ( источник ). (Это все предполагает, что вы говорите о MySQL, ум.)
Сэм
Вот Это Да! Отличная записка!
Алекс Ю
Но [ S ] одиночные кавычки также для [ D ] съел литералов. : - /
Билл Карвин
Литералы даты
считаются
64

Одинарные кавычки отделяют строковую константу или константу даты / времени.

Идентификаторы-разделители в двойных кавычках, например, для имен таблиц или столбцов. Обычно это необходимо, только если ваш идентификатор не соответствует правилам для простых идентификаторов.

Смотрите также:

Вы можете заставить MySQL использовать двойные кавычки согласно стандарту ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Вы можете заставить Microsoft SQL Server использовать двойные кавычки в соответствии со стандартом ANSI:

SET QUOTED_IDENTIFIER ON
Билл Карвин
источник
36

В ANSI SQL двойные кавычки заключают в кавычки имена объектов (например, таблиц), что позволяет им содержать символы, не разрешенные иным образом, или совпадать с зарезервированными словами (действительно, избегайте этого).

Одинарные кавычки для строк.

Тем не менее, MySQL не обращает внимания на стандарт (если его SQL_MODE не изменен) и позволяет использовать их взаимозаменяемо для строк.

Кроме того, Sybase и Microsoft также используют квадратные скобки для цитирования идентификаторов.

Так что это немного зависит от поставщика.

Другие базы данных, такие как Postgres и IBM, фактически придерживаются стандарта ANSI :)

MarkR
источник
4
MySql использует backtick `для цитирования идентификатора. (только для завершения)
dar7yl
1
Пример: если вы хотите назвать столбец Postgres «дата» (который зарезервирован), вам нужно будет заключить его в двойные кавычки.
Fny
9

Я использую эту мнемонику:

  • Одинарные кавычки для строк (одна вещь)
  • Двойные кавычки для имен таблиц и столбцов (две вещи)

Это не на 100% правильно в соответствии со спецификациями, но эта мнемоника помогает мне (человеку).

guettli
источник
1

Разница заключается в их использовании. Одинарные кавычки в основном используются для ссылки на строки в WHERE, HAVING, а также в некоторых встроенных функциях SQL, таких как CONCAT, STRPOS, POSITION и т. Д.

Если вы хотите использовать псевдоним с пробелом между ними, вы можете использовать двойные кавычки для ссылки на этот псевдоним.

Например

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

Вот подзапрос из таблицы заказов, имеющей account_id в качестве Внешнего ключа, который я собираю, чтобы узнать, сколько заказов было размещено каждой учетной записью. Здесь я дал одному столбцу любое случайное имя в качестве «количества» ради цели.

Теперь давайте напишем внешний запрос для отображения строк, в которых «count» больше 20.

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

Вы также можете применить тот же случай к выражениям Common Table.

Аюш Шривастава
источник