Quelle est la différence entre les guillemets simples et doubles en SQL?

225

Quelle est la différence entre les guillemets simples et les guillemets doubles dans SQL?

Vineet
la source

Réponses:

154

Les guillemets simples sont utilisés pour indiquer le début et la fin d'une chaîne en SQL. Les guillemets doubles ne sont généralement pas utilisés dans SQL, mais cela peut varier d'une base de données à l'autre.

Restez à utiliser des guillemets simples.

C'est la principale utilisation de toute façon. Vous pouvez utiliser des guillemets simples pour un alias de colonne - où vous voulez que le nom de la colonne que vous référencez dans votre code d'application soit autre que ce que la colonne est réellement appelée dans la base de données. Par exemple: PRODUCT.idserait plus lisible en tant que product_id, vous utilisez donc l'un des éléments suivants:

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

Soit fonctionne dans Oracle, SQL Server, MySQL… mais je sais que certains ont dit que l'IDE TOAD semble donner du fil à retordre lors de l'utilisation de l'approche des guillemets simples.

Vous devez utiliser des guillemets simples lorsque l'alias de colonne comprend un caractère espace, par exemple product id, mais il n'est pas recommandé qu'un alias de colonne soit composé de plusieurs mots.

Poneys OMG
la source
31
Les guillemets doubles sont généralement utilisés pour les noms d'objet (par exemple, le nom de colonne "Prénom"). Cela fait partie de la norme SQL-92.
LukLed
19
Non, je voulais dire les noms de colonnes, mais cela concerne aussi les alias. Je conseillerais d'utiliser des guillemets doubles pour les alias et les noms avec des caractères inhabituels, en raison de la norme SQL-92. SELECT * FROM USERS 'Users'ne fonctionne pas dans SQL Server, mais SELECT * FROM USERS "Users"fonctionne.
LukLed
122
Je me trompe toujours jusqu'à ce que je réalise une règle simple: [S] citation en anglais pour [S] trings, [D] ouble citation pour les choses dans la [D] atabase
Spacedman
4
Vous devez utiliser des guillemets doubles pour les identifiants. Les guillemets simples vont à l'encontre de la norme.
Erwin Brandstetter
6
SELECT PRODUCT.id 'product_id'ne pas travailler dans Oracle. Les guillemets simples sont uniquement pour les littéraux de caractères. Ils ne peuvent pas être utilisés pour les identifiants en SQL (standard) (bien que certains SGBD ignorent simplement le standard SQL en ce qui concerne les identifiants entre guillemets)
a_horse_with_no_name
80

Une règle simple pour nous de nous rappeler quoi utiliser dans ce cas:

  • [ S ] les guillemets sont pour les chaînes [ S ]; [ D ] les guillemets sont pour les identificateurs de [ D ] atabase;

Dans MySQL et MariaDB, le symbole ` (backtick) est le même que le " symbole. Vous pouvez utiliser " lorsque votre SQL_MODEest ANSI_QUOTESactivé.

Please_Dont_Bully_Me_SO_Lords
la source
4
Pour clarifier, le backtick (`) peut être utilisé pour délimiter les identificateurs, que ANSI_QUOTES soit activé ou non, mais si ANSI_QUOTES est activé, alors" vous ne pouvez pas utiliser de guillemets doubles pour citer des chaînes littérales, car il est interprété comme un identificateur ". ( source ). (Tout cela suppose que vous parlez de MySQL, l'esprit.)
Sam
Hou la la! Excellent mémo!
Alex Yu
Mais [ S ] les guillemets sont également pour [ D ] mangé des littéraux. : - /
Bill Karwin
Les littéraux de date comptent comme chaînes dans la plupart des SGBD
Please_Dont_Bully_Me_SO_Lords
64

Les guillemets simples délimitent une constante chaîne ou une constante date / heure.

Les guillemets doubles délimitent les identificateurs, par exemple les noms de table ou les noms de colonne. Cela n'est généralement nécessaire que lorsque votre identifiant ne correspond pas aux règles des identifiants simples.

Voir également:

Vous pouvez faire en sorte que MySQL utilise des guillemets doubles selon la norme ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Vous pouvez faire en sorte que Microsoft SQL Server utilise des guillemets doubles selon la norme ANSI:

SET QUOTED_IDENTIFIER ON
Bill Karwin
la source
36

Dans ANSI SQL, les guillemets doubles citent des noms d'objets (par exemple des tables) qui leur permettent de contenir des caractères non autorisés autrement, ou d'être les mêmes que des mots réservés (éviter cela, vraiment).

Les guillemets simples sont pour les chaînes.

Cependant, MySQL est inconscient de la norme (à moins que son SQL_MODE ne soit modifié) et leur permet d'être utilisés de manière interchangeable pour les chaînes.

De plus, Sybase et Microsoft utilisent également des crochets pour la citation des identifiants.

C'est donc un peu spécifique au fournisseur.

D'autres bases de données telles que Postgres et IBM adhèrent en fait à la norme ansi :)

MarkR
la source
4
MySql utilise backtick `pour la citation des identifiants. (juste pour l'achèvement)
dar7yl
1
Exemple: si vous voulez nommer une colonne Postgres "date" (qui est réservée), vous devrez la mettre entre guillemets.
fny
9

J'utilise ce mnémonique:

  • Les guillemets simples sont pour les chaînes (une chose)
  • Les guillemets doubles sont pour les noms de tables et les noms de colonnes (deux choses)

Ce n'est pas 100% correct selon les spécifications, mais ce mnémonique m'aide (l'être humain).

guettli
la source
1

La différence réside dans leur utilisation. Les guillemets simples sont principalement utilisés pour référencer une chaîne dans WHERE, HAVING et également dans certaines fonctions SQL intégrées comme CONCAT, STRPOS, POSITION, etc.

Lorsque vous souhaitez utiliser un alias avec un espace entre les deux, vous pouvez utiliser des guillemets doubles pour faire référence à cet alias.

Par exemple

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

Voici une sous-requête d'une table de commandes ayant account_id comme clé étrangère que j'agrège pour savoir combien de commandes chaque compte a passées. Ici, j'ai donné à une colonne un nom aléatoire comme "nombre de" pour des raisons de finalité.

Écrivons maintenant une requête externe pour afficher les lignes où "count of" est supérieur à 20.

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

Vous pouvez également appliquer le même cas aux expressions de table commune.

Ayushh Srivastava
la source