Apa perbedaan antara tanda kutip tunggal dan ganda dalam SQL?

225

Apa perbedaan antara tanda kutip tunggal dan tanda kutip ganda dalam SQL?

Vineet
sumber

Jawaban:

154

Kutipan tunggal digunakan untuk menunjukkan awal dan akhir suatu string dalam SQL. Kutipan ganda umumnya tidak digunakan dalam SQL, tetapi itu dapat bervariasi dari basis data ke basis data.

Tetap menggunakan tanda kutip tunggal.

Lagi pula, itulah penggunaan utama. Anda dapat menggunakan tanda kutip tunggal untuk alias kolom - di mana Anda ingin nama kolom yang Anda rujuk dalam kode aplikasi Anda menjadi sesuatu selain dari apa yang sebenarnya disebut kolom dalam database. Misalnya: PRODUCT.idakan lebih mudah dibaca product_id, jadi Anda menggunakan salah satu dari berikut ini:

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

Baik bekerja di Oracle, SQL Server, MySQL ... tapi saya tahu beberapa mengatakan bahwa TOAD IDE tampaknya memberikan sedikit kesedihan ketika menggunakan pendekatan tanda kutip tunggal.

Anda harus menggunakan tanda kutip tunggal ketika alias kolom menyertakan karakter spasi, misalnya product id, tetapi tidak disarankan praktik untuk alias kolom lebih dari satu kata.

OMG Ponies
sumber
31
Kutipan ganda biasanya digunakan untuk nama-nama objek (mis. Nama kolom "Nama depan"). Itu adalah bagian dari standar SQL-92.
LukLed
19
Tidak. Maksud saya nama kolom, tetapi juga menyangkut alias. Saya akan menyarankan untuk menggunakan tanda kutip ganda untuk alias dan nama dengan karakter yang tidak biasa, karena standar SQL-92. SELECT * FROM USERS 'Users'tidak bekerja di SQL Server, tetapi SELECT * FROM USERS "Users"tidak.
LukLed
122
Saya selalu mendapatkan kesalahan ini sampai saya menyadari aturan sederhana: [S] kutipan tunggal untuk [S] trings, [D] ouble quote untuk hal-hal di [D] atabase
Spacedman
4
Anda harus menggunakan tanda kutip ganda untuk pengidentifikasi. Kutipan tunggal bertentangan dengan standar.
Erwin Brandstetter
6
SELECT PRODUCT.id 'product_id'tidak akan berfungsi di Oracle. Kutipan tunggal hanya untuk karakter literal. Mereka tidak dapat digunakan untuk pengidentifikasi dalam (standar) SQL (meskipun beberapa DBMS mengabaikan standar SQL ketika datang ke pengidentifikasi yang dikutip)
a_horse_with_no_name
80

Aturan sederhana bagi kita untuk mengingat apa yang harus digunakan dalam hal ini:

  • [ S ] perapian di tungku kutipan adalah untuk [ S ] Trings; [ D ] kutipan berlaku untuk [ D ] pengidentifikasi basis data;

Di MySQL dan MariaDB, simbol ` (backtick) sama dengan " simbol. Anda dapat menggunakan " ketika Anda SQL_MODEtelah ANSI_QUOTESmengaktifkan.

Please_Dont_Bully_Me_SO_Lords
sumber
4
Untuk memperjelas, backtick (`) dapat digunakan untuk membatasi pengidentifikasi apakah ANSI_QUOTES diaktifkan atau tidak, tetapi jika ANSI_QUOTES diaktifkan, maka" Anda tidak dapat menggunakan tanda kutip ganda untuk mengutip string literal, karena itu ditafsirkan sebagai pengidentifikasi. " ( sumber ). (Ini semua menganggap Anda berbicara tentang MySQL, pikiran.)
Sam
Wow! Memo yang luar biasa!
Alex Yu
Tapi [ S ] perapian di tungku kutipan juga untuk [ D ] makan literal. : - /
Bill Karwin
Literal
64

Kutipan tunggal membatasi konstanta string atau konstanta tanggal / waktu.

Tanda kutip ganda membatasi pengidentifikasi misalnya nama tabel atau nama kolom. Ini umumnya hanya diperlukan ketika pengidentifikasi Anda tidak sesuai dengan aturan untuk pengidentifikasi sederhana.

Lihat juga:

Anda dapat membuat MySQL menggunakan tanda kutip ganda per standar ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Anda dapat membuat Microsoft SQL Server menggunakan tanda kutip ganda per standar ANSI:

SET QUOTED_IDENTIFIER ON
Bill Karwin
sumber
36

Dalam ANSI SQL, tanda kutip ganda mengutip nama objek (misalnya tabel) yang memungkinkan mereka memuat karakter yang tidak diizinkan, atau sama dengan kata-kata yang dipesan (Hindari ini, sungguh).

Kutipan tunggal untuk string.

Namun, MySQL tidak menyadari standar (kecuali SQL_MODE-nya diubah) dan memungkinkannya digunakan secara bergantian untuk string.

Selain itu, Sybase dan Microsoft juga menggunakan tanda kurung siku untuk kutipan pengenal.

Jadi ini agak spesifik untuk vendor.

Basis data lain seperti Postgres dan IBM benar-benar mematuhi standar ansi :)

MarkR
sumber
4
MySql menggunakan backtick `untuk mengutip pengidentifikasi. (hanya untuk penyelesaian)
dar7yl
1
Contoh: Jika Anda ingin memberi nama kolom "tanggal" Postgres (yang dicadangkan), Anda harus menggandakan penawaran itu.
fny
9

Saya menggunakan mnemonik ini:

  • Kutipan tunggal untuk string (satu hal)
  • Kutipan ganda untuk nama tabel dan nama kolom (dua hal)

Ini tidak 100% benar menurut spesifikasi, tetapi mnemonik ini membantu saya (manusia).

guettli
sumber
1

Perbedaannya terletak pada penggunaannya. Kutipan tunggal sebagian besar digunakan untuk merujuk string di WHERE, HAVING dan juga di beberapa fungsi SQL bawaan seperti CONCAT, STRPOS, POSISI dll.

Saat Anda ingin menggunakan alias yang memiliki ruang di antaranya, Anda bisa menggunakan tanda kutip ganda untuk merujuk alias itu.

Sebagai contoh

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

Berikut adalah subquery dari tabel pesanan yang memiliki account_id sebagai kunci Asing yang saya gabungkan untuk mengetahui berapa banyak pesanan yang ditempatkan setiap akun. Di sini saya telah memberikan satu kolom nama acak sebagai "hitungan" demi tujuan.

Sekarang mari kita menulis kueri luar untuk menampilkan baris di mana "hitungan" lebih besar dari 20.

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

Anda dapat menerapkan kasus yang sama untuk ekspresi Common Table juga.

Ayushh Srivastava
sumber