Pregunta INSERT vs INSERT INTO


He estado trabajando con T-SQL en MS SQL desde hace un tiempo y, de alguna manera, cada vez que tengo que insertar datos en una tabla tiendo a usar la sintaxis:

INSERT INTO myTable <something here>

Entiendo esa palabra clave INTO es opcional aquí y no tengo que usarlo, pero de alguna manera se convirtió en hábito en mi caso.

Mi pregunta es:

  • ¿Hay alguna implicación de usar INSERT sintaxis versus INSERT INTO?
  • ¿Cuál cumple completamente con el estándar?
  • ¿Son ambos válidos en otras implementaciones de SQL estándar?

74
2017-10-24 15:02


origen


Respuestas:


INSERT INTO es el estándar. Aunque INTO es opcional en la mayoría de las implementaciones, se requiere en algunas, por lo que es una buena idea incluirlo para garantizar que su código sea portátil.

Puede encontrar enlaces a varias versiones del estándar SQL aquí. Encontré una versión HTML de un estándar anterior aquí.


76
2017-10-24 15:06



Ellos son la misma cosa, INTO es completamente opcional en T-SQL (otros dialectos SQL pueden diferir).

Contrariamente a las otras respuestas, creo que afecta la legibilidad para usar INTO.

Creo que es una cuestión conceptual: en mi opinión, no estoy insertando un fila en una tabla llamada "Cliente", pero estoy insertando un Cliente. (Esto está relacionado con el hecho de que uso para nombrar mis tablas en singular, no en plural).

Si sigues el primer concepto, INSERT INTO Customer lo más probable es que "se sienta bien" para ti.

Si sigues el segundo concepto, lo más probable es que INSERT Customer para ti.


19
2017-10-24 15:10



Puede ser opcional en mySQL, pero es obligatorio en algunos otros DBMS, por ejemplo Oracle. Por lo tanto, SQL será más potencialmente portátil con la palabra clave INTO, por lo que vale.


10
2017-10-24 15:08



Una lección que me incliné sobre este tema es que siempre debes mantenerlo constante. Si usa INSERT INTO, no use INSERT también. Si no lo haces, algunos programadores pueden hacer la misma pregunta nuevamente.

Aquí está mi otro caso de ejemplo relacionado: tuve la oportunidad de actualizar un procedimiento almacenado muy largo en MS SQL 2005. El problema es que se insertaron demasiados datos en una tabla de resultados. Tenía que averiguar de dónde provenían los datos. Traté de averiguar dónde se agregaron nuevos registros. En la sección inicial de SP, vi varios INSERT INTOs. Luego traté de encontrar "INSERT INTO" y actualizarlos, pero me perdí un lugar donde solo se utilizó "INSERT". ¡Ese realmente insertó 4k + filas de datos vacíos en algunas columnas! Por supuesto, debería buscar INSERT. Sin embargo, eso me pasó a mí. Culpo al programador anterior IDIOT :) :)


4
2017-10-24 15:52



En SQL Server 2005, podría tener algo entre INSERT y INTO así:

INSERTAR arriba (5) INTO tTable1 SELECT * FROM tTable2;

Aunque funciona sin INTO, prefiero utilizar INTO para facilitar la lectura.


3
2018-03-25 00:39



Ambos hacen la misma cosa. INTO es opcional (en T-SQL de SQL Server) pero ayuda a la legibilidad.


1
2017-10-24 15:05



Prefiero usarlo Mantiene la misma sensación de delineación de sintaxis y legibilidad que otras partes del lenguaje SQL, como group BY, order BY.


0
2017-10-24 15:11



Empecé a wtitar SQL en ORACLE, así que cuando veo el código sin INTO simplemente parece 'roto' y confuso.

Sí, es solo mi opinión, y no te estoy diciendo debería siempre use INTO. Pero no deberías saber que muchas otras personas pensarán lo mismo, especialmente si no han comenzado a crear scripts con implementaciones más nuevas.

Con SQL, creo que también es muy importante darse cuenta de que está agregando una FILA a una TABLA, y no trabajando con objetos. Creo que no sería útil para un desarrollador nuevo pensar en las filas / entradas de la tabla SQL como objetos. De nuevo, solo mi opinión.


0
2018-02-10 08:35



Si está disponible, use la función estándar. No es que alguna vez necesite portabilidad para su base de datos en particular, pero es probable que necesite portabilidad para su conocimiento de SQL. Un ejemplo particularmente desagradable de T-SQL es el uso de isnull, use coalesce!


0
2017-10-25 16:04