SQL'de tek ve çift tırnaklar arasındaki fark nedir?


Yanıtlar:


154

SQL'de bir dizenin başlangıcını ve sonunu belirtmek için tek tırnak işaretleri kullanılır. Çift tırnak işaretleri genellikle SQL'de kullanılmaz, ancak bu veritabanından veritabanına değişebilir.

Tek tırnak kullanmaya devam edin.

Zaten birincil kullanım bu. Sütun takma adı için tek tırnak işaretleri kullanabilirsiniz - burada uygulama kodunuzda başvuruda bulunduğunuz sütun adının, sütunun veritabanında gerçekten adlandırılandan başka bir şey olmasını istiyorsunuz. Örneğin: PRODUCT.idolarak daha okunabilir olur product_id, bu nedenle aşağıdakilerden birini kullanırsınız:

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

Ya Oracle, SQL Server, MySQL… çalışır ama bazıları TOAD IDE tek tırnak yaklaşımı kullanırken bazı keder vermek gibi görünüyor dedi biliyorum.

Sütun takma adı boşluk karakteri içerdiğinde tek tırnak işareti kullanmanız gerekir product id, ancak sütun takma adının birden fazla kelime olması önerilmez.


31
Çift tırnak işaretleri genellikle nesne adlarında kullanılır (örn. "Ad" sütun adı). Bu SQL-92 standardının bir parçasıdır.
LukLed

19
Hayır. Sütun isimleri demek istedim ama takma adlarla da ilgili. SQL-92 standardı nedeniyle, sıra dışı karakterlere sahip takma adlar ve adlar için çift tırnak işareti kullanmanızı öneririm. SELECT * FROM USERS 'Users'SQL Server'da SELECT * FROM USERS "Users"çalışmaz , ancak çalışır .
LukLed

122
Ben basit bir kural fark edene kadar her zaman yanlış anlıyorum: [S] trings için [S] ingle alıntı, [D] atabase'de şeyler için [D] ouble alıntı
Spacedman

4
Tanımlayıcılar için çift tırnak kullanmalısınız. Tek tırnak standartlara aykırıdır.
Erwin Brandstetter

6
SELECT PRODUCT.id 'product_id'olacak değil Oracle çalışır. Tek tırnak işaretleri yalnızca karakter değişmezleri içindir. (Standart)
SQL'deki

80

Bu durumda ne kullanacağımızı hatırlamamız için basit bir kural:

  • [ S ] ingle tırnakları [ S ] eğilimleri içindir; [ D ] çift tırnak [ D ] veritabanı tanımlayıcıları içindir;

MySQL ve mariadb olarak, ` (vurgu işareti) sembolü aynıdır " sembolü. Kullanabilirsiniz " senin zaman SQL_MODEgelmiştir ANSI_QUOTESsağladı.


4
Açıklığa kavuşturmak için, backtick (`), ANSI_QUOTES etkinleştirilmiş olsun ya da olmasın tanımlayıcıları sınırlamak için kullanılabilir, ancak ANSI_QUOTES etkinleştirilmişse," tanımlayıcı olarak yorumlandığından, değişmez dizeleri alıntılamak için çift tırnak işareti kullanamazsınız. " ( kaynak ). (Tüm bunlar MySQL hakkında konuştuğunuzu varsayar, zihin.)
Sam

Vaov! Mükemmel not!
Alex Yu

Ancak [ S ] ingle alıntıları [ D ] değişmez değerleri için de geçerlidir. : - /
Bill Karwin

Tarih değişmezleri, çoğu
DBMS'de

64

Tek tırnak, bir dize sabitini veya bir tarih / saat sabitini sınırlar.

Çift tırnak işaretleri, tablo adları veya sütun adları için sınırlayıcı tanımlayıcıları içerir. Bu genellikle yalnızca tanımlayıcınız basit tanımlayıcıların kurallarına uymadığında gereklidir.

Ayrıca bakınız:

MySQL'in ANSI standardına göre çift tırnak kullanmasını sağlayabilirsiniz:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Microsoft SQL Server'ın ANSI standardı başına çift tırnak kullanmasını sağlayabilirsiniz:

SET QUOTED_IDENTIFIER ON

36

ANSI SQL'de çift tırnak, başka türlü izin verilmeyen karakterleri içermelerine veya ayrılmış sözcüklerle aynı olmalarına izin veren nesne adlarını (örn. Tablolar) tırnak içine alır (Bundan kaçının).

Tek tırnak işaretleri dize içindir.

Bununla birlikte, MySQL (SQL_MODE değiştirilmediği sürece) standarda açık değildir ve dizeler için birbirlerinin yerine kullanılmasına izin verir.

Ayrıca, Sybase ve Microsoft, tanımlayıcı alıntıları için köşeli parantez kullanır.

Yani biraz satıcıya özel.

Postgres ve IBM gibi diğer veritabanları aslında ansi standardına uyar :)


4
MySql, tanımlayıcı alıntı için backtick `i kullanır. (sadece tamamlama için)
dar7yl

1
Örnek: Bir Postgres sütununa "ayrılmış" adını vermek istiyorsanız (ayrılmış), bunu iki kez alıntı yapmanız gerekir.
fny

9

Bu anımsatıcıyı kullanıyorum:

  • Tek tırnak dizgiler içindir (tek şey)
  • Çift tırnak işaretleri tablo adları ve sütun adları içindir (iki şey)

Spesifikasyonlara göre bu% 100 doğru değil, ama bu anımsatıcı bana (insan) yardımcı oluyor.


1

Fark kullanımlarında yatıyor. Tek tırnaklar çoğunlukla WHERE, HAVING ve ayrıca CONCAT, STRPOS, POSITION gibi yerleşik SQL işlevlerinde bir dizeyi belirtmek için kullanılır.

Aralarında boşluk olan bir takma ad kullanmak istediğinizde, bu takma adı belirtmek için çift tırnak kullanabilirsiniz.

Örneğin

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

Her hesabın kaç sipariş verdiğini bilmek için topladığım account_id yabancı anahtar olarak sipariş tablosundan bir alt sorgu. Burada bir sütun herhangi bir rastgele isim vermek amacıyla "saymak" olarak verdim.

Şimdi "sayım" ın 20'den büyük olduğu satırları görüntülemek için bir dış sorgu yazalım.

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

Aynı durumu Ortak Tablo ifadelerine de uygulayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.