INSERT vs INSERT INTO

91

Trabalho com T-SQL no MS SQL há algum tempo e, de alguma forma, sempre que preciso inserir dados em uma tabela, costumo usar a sintaxe:

INSERT INTO myTable <something here>

Eu entendo que a palavra INTO- chave é opcional aqui e eu não preciso usá-la, mas de alguma forma ela se tornou um hábito no meu caso.

Minha pergunta é:

  • Existem implicações no uso de INSERTsintaxe versus INSERT INTO?
  • Qual está em total conformidade com o padrão?
  • Ambos são válidos em outras implementações do padrão SQL?
Kristof
fonte

Respostas:

96

INSERT INTOé o padrão. Embora INTOseja opcional na maioria das implementações, é necessário em algumas, então é uma boa ideia incluí-lo para garantir que seu código seja portátil.

Você pode encontrar links para várias versões do padrão SQL aqui . Encontrei uma versão HTML de um padrão mais antigo aqui .

Bill the Lizard
fonte
2
O livro "SQL-99 Complete, Really" diz que o Sybase (e, portanto, o MS SQL Server) se comporta de maneira não padronizada, permitindo que INTO seja opcional. Outras marcas de banco de dados exigem a palavra-chave.
Bill Karwin,
2
Direito. Se você sempre usa INTO, não precisa se lembrar de quais o consideram opcional. Todas as implementações permitem que ele seja usado.
Bill the Lizard,
22

Eles são a mesma coisa, INTOé totalmente opcional no T-SQL (outros dialetos SQL podem ser diferentes).

Ao contrário das outras respostas, acho que prejudica a legibilidade de uso INTO.

Acho que é uma coisa conceitual: Na minha percepção, não estou inserindo uma linha em uma tabela chamada "Cliente", mas estou inserindo um Cliente . (Isso está relacionado ao fato de que costumo nomear minhas tabelas no singular, não no plural).

Se você seguir o primeiro conceito, INSERT INTO Customerprovavelmente "parecerá certo" para você.

Se você seguir o segundo conceito, provavelmente será INSERT Customerpara você.

Tomalak
fonte
5
Acho que o risco de sua abordagem é que você pode levar novos programadores a confundir objetos com tabelas.
Dave DuPlantis
12
Sua resposta é factualmente correta. É uma pena quando as pessoas votam contra pontos de vista opostos. Acho que um dos benefícios do SO é ouvir essas opiniões divergentes.
DOK
Não se trata de pensar em objetos e tabelas. É pensar de forma conceitual como um modelo relacional de entidade.
André Figueiredo
@DaveDuPlantis Ah, a falácia de Jackie Treehorn. +1
ruffin de
10

Pode ser opcional em mySQL, mas é obrigatório em alguns outros DBMSs, por exemplo Oracle. Portanto, o SQL será potencialmente mais portátil com a palavra-chave INTO.

Tony Andrews
fonte
4

Uma lição que aprendi sobre esse assunto é que você deve sempre mantê-lo consistente! Se você usar INSERT INTO, não use INSERT também. Se você não fizer isso, alguns programadores podem fazer a mesma pergunta novamente.

Aqui está meu outro caso de exemplo relacionado: Tive a chance de atualizar um procedimento armazenado muito longo no MS SQL 2005. O problema é que muitos dados foram inseridos em uma tabela de resultados. Tive que descobrir de onde vieram os dados. Tentei descobrir onde novos registros foram adicionados. Na seção inicial de SP, vi vários INSERT INTOs. Então tentei encontrar "INSERT INTO" e atualizei-os, mas perdi um lugar onde apenas "INSERT" foi usado. Aquele na verdade inseriu 4k + linhas de dados vazios em algumas colunas! Claro, devo apenas pesquisar INSERT. No entanto, isso aconteceu comigo. Eu culpo o programador anterior IDIOT :) :)

David.Chu.ca
fonte
Parece mais que o autor o criou com INSERT INTO e alguns colocaram um INSERT em uma manutenção. Acontece muito, muito mais do que "deveria", infelizmente.
André Figueiredo
3

No SQL Server 2005, você poderia ter algo entre INSERT e INTO assim:

INSERT top (5) INTO tTable1 SELECT * FROM tTable2;

Embora funcione sem o INTO, prefiro usar o INTO para facilitar a leitura.

devXen
fonte
1

Ambos fazem a mesma coisa. INTO é opcional (no T-SQL do SQL Server), mas ajuda na legibilidade.

DOK
fonte
0

Eu prefiro usar. Ele mantém a mesma sensação sintaxe delineação e legibilidade como outras partes da linguagem SQL, como group BY, order BY.

Agente Treze
fonte
0

Comecei a wtiting SQL no ORACLE, então quando vejo o código sem INTO parece apenas 'quebrado' e confuso.

Sim, é apenas minha opinião, e não estou dizendo que você deve sempre usar INTO. Mas se você não fizer isso, você deve estar ciente de que muitas outras pessoas provavelmente pensarão a mesma coisa, especialmente se ainda não começaram a criar scripts com implementações mais recentes.

Com SQL eu acho também muito importante perceber que você ESTÁ adicionando uma LINHA a uma TABELA, e não trabalhando com objetos. Acho que não seria útil para um novo desenvolvedor pensar em linhas / entradas de tabelas SQL como objetos. Novamente, apenas minha opinião.

Garry_G
fonte
0

Se disponível, use a função padrão. Não que você precise de portabilidade para seu banco de dados específico, mas é provável que precise de portabilidade para seu conhecimento de SQL. Um exemplo particularmente desagradável de T-SQL é o uso de isnull, use coalesce!

Tom
fonte