Risposte:
Le virgolette singole vengono utilizzate per indicare l'inizio e la fine di una stringa in SQL. Le virgolette doppie generalmente non vengono utilizzate in SQL, ma possono variare da un database all'altro.
Attenersi all'utilizzo di virgolette singole.
Questo è comunque l'uso principale. È possibile utilizzare virgolette singole per un alias di colonna, in cui si desidera che il nome della colonna a cui si fa riferimento nel codice dell'applicazione sia diverso da quello che la colonna viene effettivamente chiamata nel database. Ad esempio: PRODUCT.id
sarebbe più leggibile come product_id
, quindi si utilizza una delle seguenti opzioni:
SELECT PRODUCT.id AS product_id
SELECT PRODUCT.id 'product_id'
Funziona in Oracle, SQL Server, MySQL ... ma so che alcuni hanno detto che l'IDE TOAD sembra dare un po 'di dolore quando si utilizza l'approccio a virgolette singole.
È necessario utilizzare virgolette singole quando l'alias di colonna include un carattere spazio, ad esempio product id
, ma non è consigliabile che l'alias di colonna sia più di una parola.
SELECT * FROM USERS 'Users'
non funziona in SQL Server, ma SELECT * FROM USERS "Users"
funziona.
SELECT PRODUCT.id 'product_id'
sarà non lavorare in Oracle. Le virgolette singole sono solo per i letterali dei personaggi. Non possono essere utilizzati per identificatori in (standard) SQL (anche se alcuni DBMS ignorano semplicemente lo standard SQL quando si tratta di identificatori tra virgolette)
Una semplice regola per noi per ricordare cosa usare in tal caso:
In MySQL e MariaDB, il ` simbolo (backtick) è lo stesso del " simbolo. Si può usare " quando il vostro SQL_MODE
è ANSI_QUOTES
abilitato.
Le virgolette singole delimitano una costante stringa o una costante data / ora.
Le virgolette doppie delimitano gli identificatori, ad esempio nomi di tabelle o nomi di colonne. Questo è generalmente necessario solo quando l'identificatore non si adatta alle regole per identificatori semplici.
Guarda anche:
Puoi fare in modo che MySQL utilizzi le virgolette doppie secondo lo standard ANSI:
SET GLOBAL SQL_MODE=ANSI_QUOTES
È possibile fare in modo che Microsoft SQL Server utilizzi le virgolette doppie secondo lo standard ANSI:
SET QUOTED_IDENTIFIER ON
In ANSI SQL, le virgolette doppie citano i nomi degli oggetti (ad es. Tabelle) che consente loro di contenere caratteri non consentiti altrimenti, o essere gli stessi delle parole riservate (evitare questo, davvero).
Le virgolette singole sono per le stringhe.
Tuttavia, MySQL è ignaro dello standard (a meno che il suo SQL_MODE non venga modificato) e consenta che vengano utilizzati in modo intercambiabile per le stringhe.
Inoltre, Sybase e Microsoft usano anche parentesi quadre per la quotazione degli identificativi.
Quindi è un po 'specifico del fornitore.
Altri database come Postgres e IBM aderiscono allo standard ansi :)
La differenza sta nel loro utilizzo. Le virgolette singole vengono utilizzate principalmente per fare riferimento a una stringa in WHERE, HAVING e anche in alcune funzioni SQL integrate come CONCAT, STRPOS, POSITION ecc.
Quando si desidera utilizzare un alias con uno spazio intermedio, è possibile utilizzare virgolette doppie per fare riferimento a tale alias.
Per esempio
(select account_id,count(*) "count of" from orders group by 1)sub
Ecco una sottoquery di una tabella ordini con account_id come chiave esterna che sto aggregando per sapere quanti ordini ha effettuato ciascun account. Qui ho dato a una colonna qualsiasi nome casuale come "count of" per motivi di scopo.
Ora scriviamo una query esterna per visualizzare le righe in cui "count of" è maggiore di 20.
select "count of" from
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;
È possibile applicare lo stesso caso anche alle espressioni di tabella comune.