C'è un buon motivo per usare le maiuscole per le parole chiave SQL? [chiuso]


128

L'impostazione predefinita sembra essere maiuscola, ma c'è davvero qualche motivo per utilizzare le maiuscole per le parole chiave? Ho iniziato a utilizzare le maiuscole perché stavo solo cercando di abbinare ciò che SQL Server mi offre ogni volta che provo a creare qualcosa, come una nuova procedura memorizzata. Ma poi, mi sono sentito male per il mio bambino (5 °) dito, che ha sempre bisogno di tenere premuto il Shiftpulsante, quindi ho smesso di usare le maiuscole. Qual è il motivo per cui dovrei tornare alle maiuscole?

Modifica : grazie per le risposte ragazzi. Non programmavo ancora ai tempi in cui COBOL era il re, quindi non ne ero a conoscenza. Attaccherò con lettere minuscole da ora in poi.


9
Prova il tasto BLOC MAIUSC. :)
MusiGenesis,

7
Devo ancora attivare BLOC MAIUSC quando voglio scrivere parole chiave e poi disattivarlo quando non scrivo parole chiave e riattivare BLOC MAIUSC e così via e così via. È solo una seccatura.
Hertanto Lie

17
CAPS wha ... Oh, vuoi dire il mio terzo tasto Ctrl?
Dave Sherohman,

2
IIRC, la cosa divertente è che se dai un'occhiata alle procedure sp_ in MSSQL, sono tutte in minuscolo.
Benjol,

1
@Benjol, non tutti ma sicuramente molti come sp_who. È una buona idea provare almeno ad essere coerenti nello stesso sproc, che Microsoft non è in molti "casi". Gioco di parole, inteso. LOL
Gordon Bell,

Risposte:


107

È solo una questione di stile, probabilmente originaria ai tempi in cui gli editor non eseguivano la colorazione del codice.

Preferivo tutte le lettere maiuscole, ma ora sono incline verso tutte le lettere minuscole.


6
+1 Suppongo di non essere stato l'unico a utilizzare tutti gli abbassa per le parole chiave.
dance2die,

2
Vorrei supporre che risalisse ai giorni in cui i redattori non facevano la colorazione del codice.
Benjol,

10
Sono abbastanza sicuro che risale ai giorni in cui molte macchine non supportavano i caratteri minuscoli.
Nate CK,

1
Immagino che risale ai giorni precedenti ai monitor a colori;)
walrii,

150

Personalmente, non mi piace il mio SQL che urla contro di me. MI RICORDA DI BASE O DI COBOL.

Quindi preferisco la mia minuscola T-SQL con i nomi degli oggetti del database MixedCase.

È molto più facile da leggere e spiccano valori letterali e commenti.


8
È così una questione di gusti. Nella mia esperienza, la quantità di urla non è troppo grande: preferisco le parole chiave maiuscole perché è molto più facile da leggere e letterali e commenti si distinguono.
Jonathan Leffler,

93
+1 per "NON MI PIACCIONO IL MIO SQL YELLING AT ME"
dance2die

8
Non mi piace il linguaggio che mi urla contro, ma questo non fa capire se maiuscole siano una buona idea in SQL.
bignose il

85

SQL È VECCHIO. IL CASO SUPERIORE STA GRIDANDO. Sembra strano e brutta.

Sebbene sia verosimilmente vero, nessuno di questi affronta i motivi speciali del linguaggio SQL per cui le parole chiave in maiuscolo sono una buona convenzione.

A differenza di molti linguaggi più recenti, SQL ha un gran numero di parole chiave e si affida alla capacità del lettore di distinguere parole chiave e identificatori per analizzare mentalmente la sintassi.

La risposta diretta alla tua domanda, quindi, è più una risposta a "perché il lettore di codice SQL trae così tanto vantaggio dalle parole chiave maiuscole, quando ciò non è vero per la maggior parte delle lingue moderne?":

  • Fare affidamento sul mantenere le parole chiave nella propria testa è ragionevole per molte lingue moderne, ma irragionevole per SQL ; ha troppe parole chiave e troppe varianti.

  • Affidarsi ai segni di punteggiatura è ragionevole per la maggior parte dei linguaggi moderni, ma irragionevole per SQL ; ne ha troppo pochi, invece dipende dall'ordine preciso delle parole chiave per indicare la sintassi.

  • Fare affidamento su evidenziatori automatici per distinguere le parole chiave è ragionevole per le lingue moderne nei casi normali, ma ignora la realtà di ciò che gli evidenziatori possono ottenere per SQL . La maggior parte non copre tutte le parole chiave di tutte le varianti di SQL e, indipendentemente da ciò, SQL viene letto frequentemente e regolarmente in contesti in cui un evidenziatore non aiuta.

Questi sono alcuni dei motivi, specifici di SQL, per cui il lettore di codice SQL è meglio servito standardizzando le maiuscole per le parole chiave e usando solo identificativi non maiuscoli (cioè inferiori o misti).

L'evidenziazione a volte può aiutare. Ma solo se l'evidenziatore sa che hai SQL; e molto spesso abbiamo SQL in un contesto in cui l'editor / formatter non può ragionevolmente sapere che ha a che fare con SQL. Gli esempi includono query in linea, documentazione del programmatore e stringhe di testo all'interno del codice di un'altra lingua. Lo stesso non è vero ovunque vicino così spesso per linguaggi come Python o C ++; sì, il loro codice a volte appare in quei posti, ma non è fatto abitualmente come nel codice SQL.

Inoltre, il lettore utilizzerà comunemente un evidenziatore che conosce solo un sottoinsieme delle parole chiave utilizzate dall'implementazione SQL specifica. Molte delle parole chiave meno comuni non verranno evidenziate se non da una che conosce intimamente la tua variante SQL. Quindi il lettore, anche se sta usando un evidenziatore, ha ancora bisogno di un modo più diretto per distinguere le parole chiave in qualsiasi istruzione SQL moderatamente complessa.

Quindi il lettore frequentemente - e lo scrittore non può sapere in anticipo quando sarà - avrà bisogno del supporto del contenuto dell'istruzione SQL stessa, per sapere cosa intende lo scrittore come parola chiave e cosa si intende come identificatore. Quindi il contenuto SQL stesso deve distinguere le parole chiave per il lettore e l'uso di parole chiave maiuscole è il modo convenzionale e utile per farlo.


Sento che la ragione stretta di questa domanda è abbastanza buona. La tua risposta è ben spiegata, ma sembra ancora basata sull'opinione. Non mi sembra che SQL abbia così tante parole chiave. Ad ogni modo, dopo le 50 parole chiave più frequenti, con quale frequenza vedi gli altri? È ancora importante mostrarli in maiuscolo? Dato che sono poco frequenti, tendono comunque ad attirare l'attenzione, no? Naturalmente, quelle dannatamente complicate "parole chiave non riservate" come sql-server throwmeritano un trattamento speciale, ma il maiuscolo è solo un'opzione tra molti.
Frédéric,

1
@ Frédéric, sembra che tu stia sostenendo che il lettore non ha bisogno di parole chiave meno conosciute per essere contrassegnato come parole chiave. No, tali parole non attirano l'attenzione proprio perché non ci si può aspettare che il lettore sappia che sono parole chiave; ecco perché devono essere distinti come parole chiave come qualsiasi altro.
Bignose il

Forse sono troppo ignorante su SQL nonostante i miei molti anni di programmazione con SQL, ma fino ad ora credo di aver sempre individuato quasi immediatamente parole chiave che non sapevo, perché stavano dando origine a un costrutto SQL insolito, almeno per qualcuno che non lo fa conoscerli.
Frédéric,

33

Gli esempi di Gordon Bell non sono esattamente corretti; in genere, vengono evidenziate solo le parole chiave, non l'intera query. Il suo secondo esempio sarebbe simile a:

SELECT name, id, xtype, uid, info, status, 
base_schema_ver, replinfo, parent_obj, crdate, 
ftcatid, schema_ver, stats_schema_ver, type, 
userstat, sysstat, indexdel, refdate, version, 
deltrig, instrig, updtrig, seltrig, category, cache
FROM sysobjects
WHERE category = 0
AND xtype IN ('U', 'P', 'FN', 'IF', 'TF')
ORDER BY 1

Lo trovo molto più facile da leggere, dal momento che le parole chiave si distinguono di più. Anche con l'evidenziazione della sintassi, trovo l'esempio non capitalizzato molto più difficile da leggere.

Nella mia azienda, andiamo un po 'più in là con la nostra formattazione SQL.

SELECT      name, id, xtype, uid, info, status, 
            base_schema_ver, replinfo, parent_obj, crdate, 
            ftcatid, schema_ver, stats_schema_ver, type, 
            userstat, sysstat, indexdel, refdate, version, 
            deltrig, instrig, updtrig, seltrig, category, cache
FROM sysobjects
LEFT JOIN systhingies ON
    sysobjects.col1=systhingies.col2
WHERE category = 0
    AND xtype IN ('U', 'P', 'FN', 'IF', 'TF')
ORDER BY 1

1
Sì, è così che mi piace anche.
David The Man,

6
Il problema è ... Se capitalizzi quando esegui comandi ad hoc su un prompt, sarai sempre 1/2 più veloce di qualcuno che non li capitalizza se devi mai eseguire comandi ad hoc in produzione quando che conta. Quindi scrivo tutto in minuscolo e poi "abbellisco" prima del check-in quando qualcuno si lamenta di non poterlo leggere perché non sa come eseguire un evidenziatore di sintassi. E non ti conosco, ma le 3 volte all'anno che devo eseguire comandi ad-hoc nella velocità di produzione sono davvero importanti, quindi il 50% dei giorni lavorativi in ​​cui mi sono esercitato a scrivere domande di prova in tutti i casi, paga davvero.

7
E nel database della mia azienda (creato da qualche parte negli anni '90) tutti i nomi di tabl, le colonne, gli indici, le procedure memorizzate ecc. Sono tutti in maiuscolo, quindi cerchiamo parole chiave SQL minuscole. ;)
Andreas,

1
Wow 1/2 più veloce. Io non la penso così!
Iharob Al Asimi,

33

C'ERA UNA VOLTA QUANDO LA MAGGIOR PARTE DELLE PERSONE NON HA AVUTO LA POSSIBILITÀ DI ENTRARE NIENTE OLTRE LE LETTERE DEL CASO SUPERIORE PERCHÉ NON È STATA ANCORA INVENTATA LA RILEVANTE ENCODING (ASCII). SONO DISPONIBILI SOLO SEI BIT . MENTRE SQL PIÙ RECENTE, LE LETTERE DI CASI INFERIORI NON SONO STATE COMUNI ANCORA NELLA PROGRAMMAZIONE.

NOTA BENE CHE ALCUNE PERSONE RICHIEDONO CHE IL DATABASE OTTENERÀ UN SENSO DI URGENZA E GIRÀ LE VOSTRE DOMANDE PIÙ RAPIDAMENTE.


Quindi, non una buona ragione oggi allora.
bignose,

1
@BIGNOSE: NO, ASSOLUTAMENTE NO!
Lukas Eder,

1
Penso che questa sia la risposta migliore. Purtroppo, odio solo le lettere minuscole nelle parole chiave SQL e non riesco a trovare un modo per apprezzare le lettere minuscole, sono pazzo?
Iharob Al Asimi,

@IharobAlAsimi SÌ SEI PAZZO. PERCHÉ SCRIVI L'INGLESE IN CASSA INFERIORE, MA MOT INGLESE STRUTTURATO?
Lukas Eder,

24

Meno del 10% delle lettere nel testo che leggiamo sono in maiuscolo. Quindi i nostri cervelli sono più desiderosi di riconoscere le lettere minuscole rispetto a quelle maiuscole. Gli studi hanno dimostrato che ci vuole più tempo per leggere il testo in maiuscolo. Ecco solo un esempio:

http://www.guardian.co.uk/media/mind-your-language/2010/oct/04/new-york-street-signs-capitals

L'esempio sopra, penso, sottolinea che anche quando parli di una o due parole, fa la differenza.


5
Non stiamo parlando di leggere un romanzo in maiuscolo; stiamo parlando di una manciata di parole chiave che sono solo una parte del testo.
Casey,

6
Ti manca il punto. Non si tratta di quante parole stiamo leggendo, si tratta di ciò che il nostro cervello è stato addestrato a fare rapidamente. Un segnale stradale, ad esempio, non è certamente un romanzo, ma sono giunti alla stessa conclusione. Quando impariamo a leggere, iniziamo a leggere ogni lettera, ma alla fine il nostro cervello inizia a riconoscere una parola come un gruppo di schemi. È meglio se questi schemi sono coerenti. Ricorda che le lettere maiuscole sono spesso un modello diverso da lettere minuscole e non solo una versione più grande.
AaronLS,

1
Ma ci sono pochissime parole chiave che compaiono ripetutamente; il riconoscimento dovrebbe quindi essere altrettanto veloce per chiunque abbia utilizzato SQL per un certo periodo di tempo.
Casey,

3
È vero, sicuramente non è qualcosa di duro e veloce. Ma ci sono solo poche parole chiave molto comuni. C'è un ampio set che non lo è, e spesso le persone espandono questa pratica di maiuscole e minuscole in cose che sono funzioni incorporate ma non necessariamente parole chiave del linguaggio sintattico. In pratica, in realtà ho ancora una manciata di parole chiave come SELECT / WHERE / GROUP BY che indicano l'inizio di una sezione principale di una query. Ma tutte le altre parole chiave, come ad esempio incorporato funzioni come cast, rank, abbasso caso.
AaronLS,

19

È perché SQL è un linguaggio così vecchio ( 1974 ) che quando è stato concepito, la maggior parte delle tastiere non aveva lettere minuscole! La documentazione linguistica rifletteva semplicemente la tecnologia del tempo.

La ricerca ha dimostrato che TUTTI I CAPS sono più difficili da leggere, al punto che la Federal Highway Administration degli Stati Uniti ha imposto l'uso di cartelli misti nel loro Manuale sui dispositivi di controllo uniforme del traffico, che afferma:

Le lettere per i nomi di luoghi, strade e autostrade sui cartelli stradali convenzionali devono essere una combinazione di lettere minuscole con lettere maiuscole iniziali.

Il New York Post ha anche pubblicato:

Gli studi hanno dimostrato che è più difficile leggere i segni di maiuscole e che quei millisecondi extra trascorsi a guardare lontano dalla strada hanno dimostrato di aumentare la probabilità di incidenti, in particolare tra i conducenti più anziani.

Non ci sono buoni motivi per usare lettere maiuscole e buoni motivi per non farlo.

Personalmente detesto usare maiuscole per le parole chiave SQL. Trovo più difficile da leggere e assurdo in questo giorno ed età.

Il linguaggio SQL è definito senza distinzione tra maiuscole e minuscole. Togli il dito dal tasto Maiusc!


3
Penso che la prevalenza di buone ragioni presentate in altre risposte parli contro la tua affermazione "non c'è una buona ragione per usare lettere maiuscole".
bignose il

7
@bignose Oh, ci sono ragioni ... Non penso proprio che siano buone. Nella mia esperienza, più giovane è il programmatore SQL, più è probabile che utilizzino lettere maiuscole. Al contrario, non ho mai incontrato un programmatore SQL competente che utilizza lettere maiuscole.
Boemo

3
Assolutamente d'accordo. La prevalenza di altre "risposte" non le rende corrette, ma le rende prevalenti. TUTTO IL CASO SUPERIORE È UN APPENDERE DAI COMPUTER WHEM NON HAI CUSTODIA SULLE LORO TASTIERE O NEI LORO RAPPRESENTANTI DEI CARATTERI. È SOLO SILLY OGGI.
Charles Bretana,

Sì, e consumando il tasto BLOC MAIUSC o stringendo le dita tenendo premuti i tasti Maiusc inutilmente.
Gordon Bell,

9
Sento odore di ragionamento circolare qui. Se il motivo viene presentato a favore di parole chiave discriminanti con un caso, lo scartate come non un buon motivo. Se il motivo è presentato da un programmatore SQL ma non è d'accordo con la tua posizione, li elimini come non un programmatore SQL competente . Penso che su tale base possiamo liquidarlo come argomento non valido.
Bignose,

8

Le maiuscole possono fornire un vantaggio nella visibilità delle parole chiave, ma puoi compensare l'evidenziazione e l'indentazione del codice.
Usiamo lettere minuscole perché l'editor di query e altri strumenti fanno miracoli nella modifica del codice t-sql e non vediamo la necessità di torturare il mignolo.


2
L'editor di query e t-sql sono gli unici posti dove chiunque leggerà il tuo codice SQL? Come lo sai?
bignose il

8

La scimmia vede, la scimmia fa per me. Pattern matching: se lo faccio nel modo in cui l'ho visto, la struttura delle clausole si allinea mentalmente più facilmente.


7

Le lettere maiuscole sono meno leggibili. Il contorno di tutte le parole ha la forma di scatole; non ci sono discendenti o ascendenti. FTW minuscolo!


3
Il motivo che assegni supporta la posizione che le maiuscole aiutano a distinguere le parole chiave dal resto.
bignose,

5
@bignose Se SQL legge come il linguaggio umano, perché abbiamo bisogno di maiuscole? Non abbiamo bisogno di mettere in maiuscolo i nostri verbi O preposizioni in linguaggio umano. Immagina SE OGNI frase sembrava COME questa. Lo trovo meno leggibile della normale scrittura. Le parole in maiuscolo in quelle due frasi fanno sì che il mio cervello si fermi e le dica più lentamente del resto della frase, rallentando la mia lettura e rendendo il flusso meno naturale.
Chris Middleton,

1
Il linguaggio umano perdona molto l'ambiguità nella sintassi. I linguaggi dei computer non lo sono, ecco perché è necessario ridurre al minimo tali ambiguità. La sintassi SQL non aiuta in questo, quindi noi umani dobbiamo usare gli strumenti disponibili; La sintassi SQL non ha molto, quindi abbiamo evoluto la convenzione di capitalizzare le parole chiave.
bignose,

5

Lo trovo più leggibile. Lo stesso per avere una nuova riga per l'inizio di ogni clausola e rientrare tra le clausole.


2

Prova un prodotto di formattazione (utilizzo SQL Prompt / SQL Refactor da Red Gate). Puoi impostare il modo in cui vuoi che funzioni la maiuscola e il tuo codice sarà sempre formattato in modo coerente. Riposa il tuo mignolo e lascia che il computer faccia il lavoro per te.


1
Questo consiglio ignora i molti contesti in cui viene letto SQL. È del tutto impraticabile leggere il codice già scritto da qualcun altro; se uno strumento come questo è necessario solo per rendere leggibile SQL formattato in modo errato, questo è un argomento a favore di una convenzione come quella affrontata da questa domanda.
bignose il

ma questo approccio è buono se desideri standard in tutta la tua organizzazione. Se vuoi standard, l'opinione non ha importanza
Trubs

2

Uno dei motivi per continuare a usare le maiuscole è quando tu (o qualcun altro) stai visualizzando il codice in qualcosa come il blocco note, rende più facile la lettura. cioè puoi facilmente distinguere tra le "parole chiave" e i tablename, gli SP, gli udf ecc


1

Altro che conformità per motivi di conformità, n. Sebbene sia un argomento molto soggettivo, preferisco usare il caso misto per tutto l'SQL. L'SQL è molto più facile da leggere e nulla viene perso nei moderni IDE in cui le parole chiave sono comunque tutte codificate a colori.


Poiché molte altre risposte qui hanno presentato ragioni, non credo che la tua risposta sia corretta: ci sono ragioni "diverse dalla conformità per motivi di conformità".
bignose il

... allora cosa sono? Sebbene sia sempre aperto a nuove informazioni, francamente, non ne sono mai stato a conoscenza.
Charles Bretana,

Ho già dato molte ragioni , quindi ora ne sei consapevole.
Bignose,

2
nessuna di queste sono ragioni valide, sono preferenze personali. Sentiti libero di fare secondo le tue preferenze personali, ma non caratterizzare una preferenza come regola o best practice.
Charles Bretana,

1

Il completamento automatico / intellisense in Microsoft SQL Server Management Studio consente l'uso di maiuscole o minuscole per le parole riservate, ma le funzioni in maiuscolo chiamano MAX (), SUM ().

Anche così, il parser consente comunque di elaborare versioni minuscole di max () e sum ().

Ciò implica un'ambivalenza rispetto alla natura dell'esecuzione, e quindi è semplicemente una questione di preferenza personale.


4
Sì, e in SSMS "Opzioni -> Editor di testo -> Transact-SQL -> Intellisense" è possibile impostare il valore predefinito su "Minuscole" se si preferisce.
Gordon Bell,

0

Non mi piace tutto ciò che è scritto in maiuscolo (e odio scrivere ancora di più in maiuscolo), ma non riesco a convincermi ad andare contro la comunità. Come sempre Vim e i suoi pacchetti associati sono la soluzione a tanti problemi:

http://www.vim.org/scripts/script.php?script_id=305

Digita semplicemente come normale e capitalizzerà automaticamente le parole chiave durante la digitazione. Non ho usato tutti gli oscuri incantesimi SQL ma non mi ha ancora deluso.


-2

Chiamo la maggior parte del mio codice mySQL da PHP, e faccio tutto il mio editing PHP all'interno di VIM (o suppongo che in questo caso, VIM ;-). Ora sono sicuro che ci sono plugin là fuori per evidenziare il codice mySQL all'interno di PHP, ma non l'ho trovato e non ho il tempo di andare a cercarlo. Pertanto, preferisco avere tutto in tutti i tappi. Lo trovo:

if ( !$bla ) 
{
   echo "select something from something where something";
}

if ( !$beepboop ) 
{
   echo "create table if not exists loremIpsum;
}

$query = "
CREATE TABLE IF NOT EXISTS HISTORY
(
   ID INT NOT NULL AUTO_INCREMENT,
   INSERTDATE TIMESTAMP DEFAULT NOW(),
   ALTERDATE TIMESTAMP(8) DEFAULT NOW(),
   DELETEDATE TIMESTAMP(8),
   ALTERCOUNT INT DEFAULT 0,
   SELECTCOUNT INT DEFAULT 0,

   PRIMARY KEY(ID),
)ENGINE=InnoDB
";

mysqlQuery( $query, $con );

Mi aiuta a distinguere tra PHP e SQL molto meglio di questo:

if ( !$bla ) 
{
   echo "select something from something where something";
}

if ( !$beepboop ) 
{
   echo "create table if not exists loremIpsum;
}

$query = "
create table if not exists history
(
   id int not null auto_increment,
   insertdate timestamp default now(),
   alterdate timestamp(8) default now(),
   deletedate timestamp(8),
   altercount int default 0,
   selectcount int default 0,

   primary key(id),
)engine=InnoDB
";

mysqlQuery( $query, $con );

Inoltre, per qualche motivo, odio mescolare tutti i tappi con la custodia di cammello, in questo modo:

CREATE TABLE IF NOT EXISTS history
(
   ID INT NOT NULL AUTO_INCREMENT,
   insertDate TIMESTAMP DEFAULT NOW(),
   alterDate TIMESTAMP(8) DEFAULT NOW(),
   deleteDate TIMESTAMP(8),
   alterCount INT DEFAULT 0,
   selectCount INT DEFAULT 0,

   PRIMARY KEY(ID),
)ENGINE=InnoDB

Questo IDmi irrita. Dovrebbe invece essere id? o iD?


3
No, no, no, camelCase è per i nomi delle variabili, non per i nomi delle colonne. Usa il caso corretto per i nomi delle colonne ... InsertDate, AlterDate, ...
Gordon Bell,

1
Lo standard SQL richiede che le implementazioni ignorino le maiuscole negli identificatori (le piega in maiuscole). Quindi il tuo codice non dovrebbe dipendere dalle differenze maiuscole negli identificatori e il modo convenzionale per farlo è quello di creare identificatori all_lower_case.
bignose il

3
@bignose Non sono un grande fan del carattere di sottolineatura poiché diminuisce wpm
puk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.