Qual é a diferença entre aspas simples e duplas no SQL?

225

Qual é a diferença entre aspas simples e aspas duplas no SQL?

Vineet
fonte

Respostas:

154

Aspas simples são usadas para indicar o início e o fim de uma string no SQL. As aspas duplas geralmente não são usadas no SQL, mas podem variar de banco de dados para banco de dados.

Continue usando aspas simples.

Esse é o uso principal de qualquer maneira. Você pode usar aspas simples para um alias de coluna - onde deseja que o nome da coluna que você referencia no código do aplicativo seja algo diferente do que a coluna é realmente chamada no banco de dados. Por exemplo: PRODUCT.idseria mais legível como product_id, então você pode usar um dos seguintes:

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

Ou funciona no Oracle, SQL Server, MySQL ... mas sei que alguns disseram que o TOAD IDE parece dar um pouco de tristeza ao usar a abordagem de aspas simples.

Você precisa usar aspas simples quando o alias da coluna incluir um caractere de espaço, por exemplo product id, mas não é recomendável que o alias da coluna tenha mais de uma palavra.

Pôneis OMG
fonte
31
As aspas duplas são geralmente usadas para nomes de objetos (por exemplo, nome da coluna "Nome"). Isso faz parte do padrão SQL-92.
LukLed
19
Não. Eu quis dizer nomes de colunas, mas também se refere a aliases. Eu recomendaria usar aspas duplas para aliases e nomes com caracteres incomuns, por causa do padrão SQL-92. SELECT * FROM USERS 'Users'não funciona no SQL Server, mas SELECT * FROM USERS "Users"funciona.
LukLed
122
Eu sempre entendi errado até que percebi uma regra simples: [Única citação para [S] trings, [D] citação razoável para coisas na [D] atabase
Spacedman
4
Você deve usar aspas duplas para identificadores. As aspas simples vão contra o padrão.
Erwin Brandstetter
6
SELECT PRODUCT.id 'product_id'vai não trabalhar na Oracle. Aspas simples são apenas para literais de caracteres. Eles não podem ser usados para identificadores (standard) SQL (embora alguns DBMS simplesmente ignorar o padrão SQL quando se trata de identificadores entre aspas)
a_horse_with_no_name
80

Uma regra simples para lembrarmos o que usar; nesse caso:

  • [ S ] ingle citações são para [ S Trings]; [ D ] aspas são para identificadores [ D ] atabase;

No MySQL e MariaDB, o ` (crase) símbolo é o mesmo que o " símbolo. Você pode usar " quando o seu SQL_MODEfoi ANSI_QUOTESativado.

Please_Dont_Bully_Me_SO_Lords
fonte
4
Para esclarecer, backtick (`) pode ser usado para delimitar identificadores se ANSI_QUOTES está ou não ativado, mas se ANSI_QUOTES estiver ativado," você não poderá usar aspas duplas para citar cadeias literais, porque é interpretado como um identificador ". ( fonte ). (Isso tudo pressupõe que você esteja falando sobre MySQL, lembre-se.) #
265
Uau! Excelente nota!
Alex Yu
Mas [ S ] ingle citações são também para [ D ] comeu literais. : - /
Bill Karwin
Literais de data contam como Strings na maioria dos DBMS
Please_Dont_Bully_Me_SO_Lords 27/02/19
64

Aspas simples delimitam uma constante de seqüência de caracteres ou uma constante de data / hora.

Aspas duplas delimitam identificadores para, por exemplo, nomes de tabelas ou nomes de colunas. Geralmente, isso só é necessário quando seu identificador não se encaixa nas regras de identificadores simples.

Veja também:

Você pode fazer o MySQL usar aspas duplas pelo padrão ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Você pode fazer o Microsoft SQL Server usar aspas duplas pelo padrão ANSI:

SET QUOTED_IDENTIFIER ON
Bill Karwin
fonte
36

No ANSI SQL, aspas duplas citam nomes de objetos (por exemplo, tabelas) que permitem que eles contenham caracteres não permitidos de outra forma ou sejam iguais às palavras reservadas (evite isso, na verdade).

Aspas simples são para seqüências de caracteres.

No entanto, o MySQL ignora o padrão (a menos que seu SQL_MODE seja alterado) e permite que eles sejam usados ​​de forma intercambiável para strings.

Além disso, Sybase e Microsoft também usam colchetes para citar identificadores.

Portanto, é um pouco específico do fornecedor.

Outros bancos de dados, como o Postgres e a IBM, realmente aderem ao padrão ansi :)

MarkR
fonte
4
O MySql usa backtick `para citar identificadores. (apenas para a conclusão)
dar7yl
1
Exemplo: se você quiser nomear uma coluna do postgres como "data" (que é reservada), precisará citá-la duas vezes.
FNY
9

Eu uso este mnemônico:

  • Aspas simples são para strings (uma coisa)
  • Aspas duplas são para nomes de tabelas e nomes de colunas (duas coisas)

Isso não é 100% correto de acordo com as especificações, mas esse mnemônico me ajuda (ser humano).

guettli
fonte
1

A diferença está no seu uso. As aspas simples são usadas principalmente para referenciar uma string em WHERE, HAVING e também em algumas funções SQL internas, como CONCAT, STRPOS, POSITION etc.

Quando você deseja usar um alias com espaço entre eles, pode usar aspas duplas para se referir a esse alias.

Por exemplo

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

Aqui está uma subconsulta de uma tabela de pedidos com account_id como chave estrangeira que estou agregando para saber quantos pedidos cada conta fez. Aqui, dei a uma coluna qualquer nome aleatório como "contagem de" para fins de propósito.

Agora vamos escrever uma consulta externa para exibir as linhas em que "contagem de" é maior que 20.

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

Você também pode aplicar o mesmo caso às expressões de tabela comum.

Ayushh Srivastava
fonte