Яка різниця між одинарними та подвійними лапками в SQL?


Відповіді:


153

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


31
Подвійні лапки зазвичай використовуються для імен об'єктів (наприклад, назва стовпця "Ім'я"). Це частина стандарту SQL-92.
LukLed

19
Ні. Я мав на увазі назви стовпців, але це стосується і псевдонімів. Я б радив використовувати подвійні лапки для псевдонімів та імен з незвичайними символами, через стандарт SQL-92. SELECT * FROM USERS 'Users'не працює в SQL Server, але є SELECT * FROM USERS "Users".
LukLed

122
Я завжди помиляюсь, поки не зрозумів просте правило: [S] цитата впуску для [S] трингсів, [D] необмежена цитата для речей у [D]
atabase

4
Слід використовувати подвійні лапки для ідентифікаторів. Одиночні котирування Goe проти стандарту.
Ервін Брандстеттер

6
SELECT PRODUCT.id 'product_id'не буде працювати в Oracle. Одиночні лапки призначені лише для літературних символів. Їх не можна використовувати для ідентифікаторів у (стандартному) SQL (хоча деякі СУБД просто ігнорують стандарт SQL, коли мова заходить про цитовані ідентифікатори)
a_horse_with_no_name

80

Просте для нас правило пам’ятати, що використовувати в такому випадку:

  • [ S ] котирування ingle призначені для [ S ] трингу; [ D ] необмежені лапки призначені для ідентифікаторів [ D ] бази даних;

В MySQL і MariaDB, то ` (лапки) символ такий же , як « символ. Ви можете використовувати » , коли ваш SQL_MODEбув ANSI_QUOTESвключений.


4
Для уточнення, backtick (`) може використовуватися для розмежування ідентифікаторів, включено чи ні ANSI_QUOTES, але якщо ANSI_QUOTES увімкнено," ви не можете використовувати подвійні лапки для цитування буквальних рядків, оскільки він інтерпретується як ідентифікатор ". ( джерело ). (Це все припускає, що ви говорите про MySQL, розум.)
Сем,

Оце Так! Відмінна пам’ятка!
Алекс Юй

Але цитати [ S ] ingle також є для [ 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 :)


4
MySql використовує backtick `для котирування ідентифікатора. (тільки для завершення)
dar7yl

1
Приклад: Якщо ви хочете назвати стовпчик Postgres "дата" (який зарезервовано), вам потрібно буде подвоїти його.
fny

9

Я використовую цей мнемонічний:

  • Одиночні цитати для рядків (одне)
  • Подвійні лапки призначені для імен таблиць та назв стовпців (дві речі)

Це не на 100% правильно відповідно до специфікацій, але ця мнемоніка допомагає мені (людині).


1

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

Якщо ви хочете використовувати псевдонім, який має пробіл між ними, ви можете використовувати подвійні лапки, щоб посилатися на цей псевдонім.

Наприклад

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

Ось підзапит із таблиці замовлень, що має account_id як зовнішній ключ, який я агрегую, щоб знати, скільки замовлень розміщено в кожному обліковому записі. Тут я дав одному стовпчику будь-яку випадкову назву як "рахувати" заради мети.

Тепер напишемо зовнішній запит, щоб відобразити рядки, де "count of" більше 20.

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

Ви можете застосувати той самий випадок і до виразів загальної таблиці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.