Existe um bom motivo para usar maiúsculas para palavras-chave SQL? [fechadas]

128

O padrão parece estar em maiúsculas, mas existe realmente algum motivo para usar maiúsculas para palavras-chave? Comecei a usar maiúsculas porque estava apenas tentando corresponder ao que o SQL Server me dava sempre que tentava criar algo, como um novo procedimento armazenado. Mas então, eu me senti péssima pelo meu dedo (quinto), que sempre precisa pressionar o Shiftbotão, então parei de usar letras maiúsculas. Alguma razão para eu voltar para maiúsculas?

Edit : Obrigado pelas respostas pessoal. Eu ainda não estava programando nos dias em que o COBOL era rei, então não estava ciente disso. Eu vou ficar com letras minúsculas a partir de agora.

Hertanto Lie
fonte
9
Experimente a tecla CAPS LOCK. :)
MusiGenesis
7
Ainda tenho que ativar o CAPS LOCK quando quero escrever palavras-chave e depois desativar quando não estiver escrevendo palavras-chave e ativar o CAPS LOCK novamente e assim por diante. É apenas um aborrecimento.
Hertanto Lie
17
CAPS wha ... Oh, você quer dizer minha terceira tecla Ctrl?
Dave Sherohman 04/04/08
2
IIRC, o engraçado é que, se você verificar os procedimentos sp_ ​​no MSSQL, eles serão todos em letras minúsculas.
21909 Benjol
1
@ Benjol, nem todos eles, mas definitivamente muitos deles como sp_who. É uma boa idéia, pelo menos, tentar ser consistente no mesmo ramo, o que a Microsoft não faz em muitos "casos". Chalaça, pretendida. LOL
Gordon Bell

Respostas:

107

É apenas uma questão de estilo, provavelmente originada nos dias em que os editores não faziam a coloração do código.

Eu costumava preferir todas as letras maiúsculas, mas agora estou me inclinando para todas as letras minúsculas.

Mitch Wheat
fonte
6
+1 Acho que não fui o único a usar todas as palavras-chave mais baixas.
dance2die
2
Eu diria que isso remonta aos dias em que os editores não faziam a coloração do código.
22709 Benjol
10
Tenho certeza de que remonta aos dias em que muitas máquinas não suportavam caracteres minúsculos.
Nate CK
1
Eu acho que ele vai voltar para os dias antes monitores coloridos;)
walrii
150

Pessoalmente, eu não gosto do meu SQL gritando comigo. Lembra-me de básico ou de COBOL.

Por isso, prefiro minha letra minúscula T-SQL com nomes de objetos de banco de dados MixedCase.

É muito mais fácil ler, e literais e comentários se destacam.

Gordon Bell
fonte
8
É muito uma questão de gosto. Na minha experiência, a quantidade de gritos não é muito grande - prefiro as palavras-chave maiúsculas porque é muito mais fácil ler e os literais e comentários se destacam.
Jonathan Leffler
93
+1 para "Eu não gosto do meu SQL gritando comigo"
dance2die
8
Não gosto de nenhuma linguagem gritando comigo, mas isso não chega à questão de saber se maiúsculas é uma boa idéia no SQL.
precisa saber é
85

SQL está velho. O CASO SUPERIOR ESTÁ GRITANDO. Parece estranho e talvez feio.

Embora seja indiscutivelmente verdade, nenhum deles aborda os motivos especiais da linguagem SQL para que palavras-chave em maiúsculas sejam uma boa convenção.

Ao contrário de muitas linguagens mais recentes, o SQL possui um grande número de palavras - chave e depende da capacidade do leitor de distinguir palavras-chave versus identificadores para analisar mentalmente a sintaxe.

A resposta direta à sua pergunta, então, é mais uma resposta para "por que o leitor de código SQL se beneficia tanto das palavras-chave maiúsculas, quando isso não é verdade para a maioria das linguagens modernas?":

  • Confiar em manter as palavras - chave na cabeça é razoável para muitas linguagens modernas, mas irracional para SQL ; possui muitas palavras-chave e muitas variantes.

  • Confiar em sinais de pontuação é razoável para a maioria das linguagens modernas, mas irracional para SQL ; possui muito pouco, dependendo da ordem precisa das palavras-chave para indicar a sintaxe.

  • Contar com marcadores automáticos para distinguir palavras-chave é razoável para linguagens modernas em casos comuns, mas ignora a realidade do que os marcadores podem obter para o SQL . A maioria não cobre todas as palavras-chave de todas as variantes do SQL e, independentemente disso, o SQL é frequentemente e rotineiramente lido em contextos em que um marcador não ajuda.

Esses são alguns dos motivos, específicos para SQL, de que o leitor de código SQL é melhor atendido ao padronizar letras maiúsculas para palavras-chave e usar apenas letras não maiúsculas (ou seja, minúsculas ou mistas) para identificadores.

Realçar às vezes pode ajudar. Mas somente se o marcador souber que você possui SQL; e muitas vezes temos o SQL em um contexto em que o editor / formatador não pode razoavelmente saber que está lidando com o SQL. Os exemplos incluem consultas em linha, documentação do programador e seqüências de texto no código de outro idioma. O mesmo não é verdade em qualquer lugar próximo com tanta freqüência para linguagens como Python ou C ++; sim, o código deles às vezes aparece nesses locais, mas não é rotineiramente feito da maneira que é com o código SQL.

Além disso, o leitor normalmente usa um marcador que conhece apenas um subconjunto das palavras-chave que sua implementação SQL específica usa. Muitas das palavras-chave menos comuns não serão destacadas, exceto por uma que conhece intimamente sua variante SQL. Portanto, o leitor, mesmo que esteja usando um marcador, ainda precisa de uma maneira mais direta de distinguir palavras-chave em qualquer instrução SQL moderadamente complexa.

Assim, o leitor frequentemente - e o escritor não pode saber antecipadamente quando isso será - precisar de assistência do conteúdo da própria instrução SQL, para saber o que o escritor pretende como uma palavra-chave e o que pretende como um identificador. Portanto, o próprio conteúdo SQL precisa distinguir palavras-chave para o leitor , e usar palavras-chave em maiúsculas é a maneira convencional e útil de fazer isso.

nariz grande
fonte
Eu sinto que o motivo desta pergunta é muito bom. Sua resposta está bem explicada, mas ainda parece um pouco baseada em opiniões. Não sinto que o SQL tenha tantas palavras-chave. De qualquer forma, depois das 50 palavras-chave mais frequentes, com que frequência você vê outras pessoas? Ainda importa mostrá-los em maiúsculas? Como não são freqüentes, eles tendem a atrair atenção de qualquer maneira, não são? Obviamente, essas malditas 'palavras-chave não reservadas' como sql-server throwmerecem tratamento especial, mas maiúsculas é apenas uma opção entre muitas.
Frédéric
1
@ Frédéric, você parece estar argumentando que o leitor não precisa que palavras-chave menos conhecidas sejam marcadas como palavras-chave. Não, essas palavras não atraem atenção exatamente porque não se pode esperar que o leitor saiba que essas são palavras-chave; é por isso que eles precisam ser distinguidos como palavras-chave como qualquer outra.
Bignose
Talvez eu seja muito ignorante sobre SQL nos meus muitos anos de programação com SQL, mas até agora acredito que sempre encontrei quase imediatamente palavras-chave que eu não sabia, porque elas estavam resultando em uma construção SQL incomum, pelo menos para alguém que não conhecê-los.
Frédéric
33

Os exemplos de Gordon Bell não estão exatamente corretos; geralmente, apenas as palavras-chave são destacadas, não a consulta inteira. Seu segundo exemplo seria assim:

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

Acho isso muito mais fácil de ler, pois as palavras-chave se destacam mais. Mesmo com o destaque da sintaxe, acho o exemplo sem capitalização muito mais difícil de ler.

Na minha empresa, vamos um pouco mais longe com a nossa formatação 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
davidtbernal
fonte
1
Sim, é assim que eu também gosto.
David The Man
6
O problema é ... Se você capitalizar ao executar comandos ad-hoc em um prompt, sempre será 1/2 mais rápido que alguém que não os capitaliza se precisar executar comandos ad-hoc na produção quando assuntos. Então, escrevo tudo em letras minúsculas e depois "embelezá-lo" antes do check-in quando alguém reclama que não pode lê-lo porque não sabe como executar um marcador de sintaxe. E eu não sei sobre você, mas as três vezes por ano em que preciso executar comandos ad-hoc em velocidade de produção realmente são importantes, então os 50% dos dias úteis em que pratiquei escrevendo consultas de teste em minúsculas realmente valem a pena.
7
E no banco de dados da minha empresa (criado em algum lugar nos anos 90) todos os nomes de tabelas, colunas, índices, procedimentos armazenados etc. estão todos em maiúsculas, portanto, procuramos palavras-chave SQL em minúsculas. ;)
Andreas
1
Uau 1/2 o mais rápido. Acho que não!
Iharob Al Asimi
33

Houve um tempo em que a maioria das pessoas não tinha a possibilidade de codificar qualquer coisa além das letras maiúsculas de maiúsculas, porque a codificação relevante (ASCII) ainda não foi inventada. Apenas seis bits estavam disponíveis . QUANDO O SQL É MAIS RECENTE, AS LETRAS DE CASO MAIS BAIXAS NÃO FORAM PRÁTICAS COMUM NA PROGRAMAÇÃO AINDA.

OBSERVE QUE ALGUMAS PESSOAS RECLAMAM QUE A BASE DE DADOS TERÁ UM SENTIDO DE URGÊNCIA E EXECUTARÁ AS SUAS QUESTÕES MAIS RAPIDAMENTE.

Lukas Eder
fonte
Então, não é uma boa razão hoje então.
Bignose
1
@ BIGNOSE: NÃO, ABSOLUTAMENTE NÃO!
Lukas Eder
1
Eu acho que essa é a melhor resposta. Infelizmente, eu odeio letras minúsculas nas palavras-chave SQL e não consigo encontrar uma maneira de gostar de letras minúsculas. Estou louco?
Iharob Al Asimi
@IharobAlAsimi SIM, VOCÊ É LOUCO. POR QUE ESCREVER INGLÊS EM CASO INFERIOR, MAS O MOT ESTRUTURADO INGLÊS?
Lukas Eder
24

Menos de 10% das letras no texto que lemos são maiúsculas. Portanto, nossos cérebros estão mais interessados ​​em reconhecer letras minúsculas do que letras maiúsculas. Estudos mostraram que demora mais para ler o texto em maiúsculas. Aqui está apenas um exemplo:

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

Acho que o exemplo acima enfatiza que, mesmo quando você está falando de apenas uma ou duas palavras, isso faz a diferença.

AaronLS
fonte
5
Não estamos falando de ler um romance em letras maiúsculas; estamos falando de um punhado de palavras-chave que são apenas uma parte do texto.
Casey
6
Você está perdendo o objetivo. Não se trata de quantas palavras estamos lendo, é sobre o que nosso cérebro foi treinado para fazer rapidamente. Uma placa de rua, por exemplo, certamente não é um romance, mas eles chegaram à mesma conclusão. Quando aprendemos a ler, começamos a ler cada letra, mas eventualmente nosso cérebro começa a reconhecer uma palavra como um grupo de padrões. É melhor se esses padrões forem consistentes. Lembre-se de que as letras maiúsculas geralmente são um padrão diferente das letras minúsculas, e não apenas uma versão maior.
AaronLS 23/02
1
Mas há muito poucas palavras-chave e elas aparecem repetidas vezes; portanto, o reconhecimento deve ser igualmente rápido para quem usa o SQL por um período de tempo.
Casey
3
É verdade que definitivamente não é algo difícil e rápido. Mas existem apenas algumas palavras-chave muito comuns. Há um grande conjunto que não é, e muitas vezes as pessoas expandem essa prática de maiúsculas e minúsculas para coisas que são funções internas, mas não necessariamente palavras-chave de linguagem sintática. Na prática, na verdade, eu ainda uso algumas palavras-chave como SELECT / WHERE / GROUP BY, que indicam o início de uma seção principal de uma consulta. Mas todas as outras palavras-chave, tais como builtin funções gosto cast, rankeu minúsculas.
AaronLS
19

É porque o SQL é uma linguagem tão antiga ( 1974 ) que, quando foi concebida, a maioria dos teclados não tinha letras minúsculas! A documentação do idioma simplesmente refletia a tecnologia da época.

Pesquisas comprovaram que TODOS OS CAPS são mais difíceis de ler, tanto que a Administração Federal de Rodovias dos EUA determinou o uso de sinais em maiúsculas e minúsculas em seu Manual sobre dispositivos uniformes de controle de tráfego, que declara:

As letras para nomes de lugares, ruas e rodovias nas placas de guia convencionais devem ser uma combinação de letras minúsculas com letras maiúsculas iniciais.

O New York Post também publicou:

Estudos mostraram que é mais difícil ler sinais de letras maiúsculas, e os milissegundos extras gastos olhando para longe da estrada demonstraram aumentar a probabilidade de acidentes, principalmente entre os motoristas mais velhos.

Não há boas razões para usar letras maiúsculas e boas razões para não usar.

Pessoalmente, detesto usar maiúsculas para palavras-chave SQL. Acho mais difícil ler e absurdo hoje em dia.

A linguagem SQL é definida como sem distinção entre maiúsculas e minúsculas. Tire o dedo dessa tecla shift!

Boêmio
fonte
3
Penso que a prevalência de boas razões apresentadas em outras respostas contraria a sua afirmação "não há boas razões para usar letras maiúsculas".
precisa saber é
7
@bignose Oh, existem razões ... Eu simplesmente não acho que sejam boas. Na minha experiência, quanto mais junior o programador SQL, maior a probabilidade de usar maiúsculas. Por outro lado, nunca conheci um codificador SQL competente que use letras maiúsculas.
Bohemian
3
Concordo absolutamente. A prevalência de outras "respostas" não as torna corretas, apenas as torna prevalecentes. TODAS AS CAIXAS SUPERIORES SÃO PERMANECIDAS POR QUEM OS COMPUTADORES NÃO TÊM CAIXA NOS SEUS TECLADOS OU NAS SUAS REPRESENTAÇÕES DE PERSONAGENS. É APENAS TOLVO HOJE.
Charles Bretana
Sim, e desgastar a tecla CAPS LOCK ou apertar os dedos pressionando as teclas Shift desnecessariamente.
Gordon Bell
9
Sinto cheiro de raciocínio circular aqui. Se o motivo for apresentado em favor da discriminação de palavras-chave com maiúsculas e minúsculas, você o descartará por não ser um bom motivo. Se o motivo for apresentado por um codificador SQL, mas discordar de sua posição, você os descartará como não sendo um codificador SQL competente . Penso que, com base nisso, podemos descartar isso como argumento inválido.
Bignose
8

Letras maiúsculas podem fornecer um ganho na visibilidade das palavras-chave, mas você pode compensar com o realce e o recuo do código.
Usamos letras minúsculas porque o editor de consultas e outras ferramentas fazem maravilhas na edição do código t-sql e não vemos necessidade de torturar o dedo mindinho.

Ovidiu Pacurar
fonte
2
O editor de consultas e o t-sql são os únicos lugares em que alguém lerá seu código SQL? Como você sabe?
Bignose
8

Macaco vê, macaco faz por mim. Correspondência de padrões - se eu fizer da maneira que vi, a estrutura das cláusulas se alinha mentalmente mais facilmente.

dkretz
fonte
7

Letras maiúsculas são menos legíveis. O contorno de todas as palavras tem o formato de caixas; não há descendentes ou ascendentes. FTW em minúsculas!

Lance Fisher
fonte
3
O motivo que você fornece apoia a posição de que letras maiúsculas ajudam a distinguir palavras-chave das demais.
precisa saber é
5
@ bignose Se SQL lê como linguagem humana, por que precisamos de maiúsculas? Não precisamos colocar em maiúscula nossos verbos OU preposições na linguagem humana. Imagine se cada frase parecesse com isso. Acho isso menos legível do que a escrita regular. As palavras em maiúsculas nessas duas frases fazem meu cérebro parar e dizê-las mais lentamente que o resto da frase, diminuindo a velocidade da minha leitura e tornando o fluxo menos natural.
21815 Chris Middleton
1
A linguagem humana perdoa muito a ambiguidade na sintaxe. Linguagens de computador não são, é por isso que essas ambiguidades precisam ser minimizadas. A sintaxe SQL não ajuda nisso, portanto, nós humanos precisamos usar as ferramentas disponíveis; A sintaxe SQL não tem muito, por isso evoluímos a convenção de usar maiúsculas em palavras-chave.
Bignose
5

Acho mais legível. O mesmo para ter uma nova linha para o início de cada cláusula e recuar entre cláusulas.

Mark Bostleman
fonte
2

Tente um produto de formatação (eu uso o SQL Prompt / SQL Refactor do Red Gate). Você pode definir como deseja que a capitalização funcione e seu código sempre será sempre formatado. Descanse seu mindinho e deixe o computador fazer o trabalho por você.

gfrizzle
fonte
1
Este conselho ignora os muitos contextos em que o SQL está sendo lido. É totalmente impraticável a leitura de código já escrito por outra pessoa; se uma ferramenta como essa é necessária apenas para tornar a SQL mal formatada legível, esse é um argumento a favor de uma convenção como a abordada nesta pergunta.
precisa saber é
mas essa abordagem é boa se você deseja padrões em toda a organização. Se você quiser normas, a opinião não importa
Trubs
2

Um dos motivos para continuar usando maiúsculas é quando você (ou outra pessoa) está visualizando o código em algo como o bloco de notas, facilitando a leitura. ou seja, você pode diferenciar facilmente entre as "palavras-chave" e os nomes das tabelas, SP's, udf's etc.

CPU_BUSY
fonte
1

À excepção da conformidade por causa das conformidades, não. Embora seja um tópico muito subjetivo, prefiro usar maiúsculas e minúsculas para todo o SQL. O SQL é muito mais fácil de ler e nada se perde nos IDEs modernos, onde as palavras-chave são todas codificadas por cores.

Charles Bretana
fonte
Como muitas outras respostas aqui apresentaram razões, eu não acho que sua resposta está correta: Não são razões “que não sejam conformes, pelo amor de conformidade”.
precisa saber é
... então o que são? Embora esteja sempre aberto a novas informações, francamente, nunca conheci nenhuma.
Charles Bretana 16/05
Eu já mencionei muitas razões , então agora você está ciente.
Bignose
2
nenhuma dessas razões é válida, são preferências pessoais. Sinta-se à vontade para fazer o que sua preferência pessoal exigir, mas não caracterize uma preferência como regra ou prática recomendada.
Charles Bretana
1

O intellisense / autocompletar no Microsoft SQL Server Management Studio permite maiúsculas ou minúsculas para palavras reservadas, mas as funções em maiúsculas chamam como MAX (), SUM ().

Mesmo assim, o analisador ainda permite que versões em minúsculas de max () e sum () sejam processadas.

Isso implica uma ambivalência com relação à natureza da execução e, portanto, é simplesmente uma questão de preferência pessoal.

Conta
fonte
4
Sim, e no SSMS "Opções -> Editor de texto -> Transact-SQL -> Intellisense", você pode definir o padrão como 'Minúsculas', se preferir.
Gordon Bell
0

Não gosto de nada escrito em letras maiúsculas (e odeio digitar letras maiúsculas ainda mais), mas não consegui me convencer a ir contra a comunidade. Como de costume, o Vim e seus pacotes associados são a solução para muitos problemas:

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

Basta digitar como normal e as palavras-chave serão colocadas em maiúsculas automaticamente enquanto você digita. Eu não usei todos os encantamentos obscuros do SQL, mas ainda não me falhou.

Ferdinand van Wyk
fonte
-2

Eu chamo a maior parte do meu código mySQL a partir do PHP e faço toda a minha edição do PHP no vim (ou suponho, neste caso, VIM ;-). Agora tenho certeza de que existem plugins para destacar o código mySQL no PHP, mas não o encontrei e não tenho tempo para procurá-lo. Portanto, prefiro ter tudo em maiúsculas. Eu acho isso:

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 );

Ajuda-me a distinguir entre PHP e SQL muito melhor do que isso:

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 );

Além disso, por alguma razão, eu odeio misturar allcaps com camel case, assim:

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

Isso IDme irrita. Em vez disso, deveria ser id? ou iD?

puk
fonte
3
Não, não, não, camelCase é para nomes de variáveis, não para nomes de colunas. Use maiúsculas e minúsculas para nomes de colunas ... InsertDate, AlterDate, ...
Gordon Bell
1
O padrão SQL requer implementações para ignorar maiúsculas e minúsculas nos identificadores (as dobra para maiúsculas). Portanto, seu código não deve depender das diferenças entre maiúsculas e minúsculas nos identificadores, e a maneira convencional de fazer isso é fazer identificadores all_lower_case.
Bignose
3
@bignose Eu não sou um grande fã do sublinhado uma vez que diminui ppm
puk