INSERT vs INSERT INTO

90

Saya telah bekerja dengan T-SQL di MS SQL untuk beberapa waktu sekarang dan entah bagaimana setiap kali saya harus memasukkan data ke dalam tabel, saya cenderung menggunakan sintaks:

INSERT INTO myTable <something here>

Saya mengerti bahwa kata kunci INTOadalah opsional di sini dan saya tidak harus menggunakannya tetapi entah bagaimana kata kunci itu menjadi kebiasaan dalam kasus saya.

Pertanyaanku adalah:

  • Apakah ada implikasi penggunaan INSERTsintaks versus INSERT INTO?
  • Mana yang sepenuhnya memenuhi standar?
  • Apakah keduanya valid dalam implementasi standar SQL lainnya?
kristof
sumber

Jawaban:

94

INSERT INTOadalah standarnya. Meskipun INTObersifat opsional di sebagian besar implementasi, ini diperlukan di beberapa implementasi, jadi sebaiknya sertakan untuk memastikan bahwa kode Anda portabel.

Anda dapat menemukan tautan ke beberapa versi standar SQL di sini . Saya menemukan versi HTML dari standar yang lebih lama di sini .

Bill the Lizard
sumber
2
Buku "SQL-99 Complete, Really" mengatakan bahwa Sybase (dan karenanya MS SQL Server) berperilaku tidak standar, memungkinkan INTO menjadi opsional. Merek database lain membutuhkan kata kunci.
Bill Karwin
2
Baik. Jika Anda selalu menggunakan INTO, Anda tidak perlu mengingat mana yang menganggapnya opsional. Semua implementasi memungkinkan untuk digunakan.
Bill the Lizard
21

Mereka adalah hal yang sama, INTOsepenuhnya opsional dalam T-SQL (dialek SQL lain mungkin berbeda).

Bertentangan dengan jawaban lain, saya pikir itu merusak keterbacaan untuk digunakan INTO.

Menurut saya ini adalah hal yang konseptual: Dalam persepsi saya, saya tidak memasukkan baris ke dalam tabel bernama "Pelanggan", tetapi saya memasukkan Pelanggan . (Ini terkait dengan fakta yang saya gunakan untuk memberi nama tabel saya dalam bentuk tunggal, bukan jamak).

Jika Anda mengikuti konsep pertama, INSERT INTO Customerkemungkinan besar akan "terasa tepat" untuk Anda.

Jika Anda mengikuti konsep kedua, kemungkinan besar itu INSERT Customeruntuk Anda.

Tomalak
sumber
5
Saya pikir risiko dengan pendekatan Anda adalah Anda dapat mengarahkan programmer baru untuk mengacaukan objek dengan tabel.
Dave DuPlantis
12
Jawaban Anda benar secara faktual. Sungguh memalukan ketika orang-orang menolak sudut pandang yang berlawanan. Menurut saya, salah satu manfaat SO adalah mendengarkan pendapat yang berbeda-beda itu.
DOK
Ini bukan masalah berpikir dalam objek dan tabel. Ini berpikir secara konseptual sebagai model relasional entitas.
Andre Figueiredo
@DaveDuPlantis Ah, kekeliruan Jackie Treehorn. +1
ruffin
10

Ini mungkin opsional di mySQL, tetapi wajib di beberapa DBMS lain, misalnya Oracle. Jadi SQL akan lebih berpotensi portabel dengan kata kunci INTO, untuk apa nilainya.

Tony Andrews
sumber
4

Satu pelajaran yang saya dapat dari masalah ini adalah Anda harus selalu konsisten! Jika Anda menggunakan INSERT INTO, jangan gunakan INSERT juga. Jika Anda tidak melakukannya, beberapa programmer mungkin akan menanyakan pertanyaan yang sama lagi.

Berikut adalah contoh kasus lain yang terkait: Saya memiliki kesempatan untuk memperbarui prosedur tersimpan yang sangat lama di MS SQL 2005. Masalahnya adalah terlalu banyak data yang dimasukkan ke tabel hasil. Saya harus mencari tahu dari mana data itu berasal. Saya mencoba mencari tahu di mana catatan baru ditambahkan. Di bagian awal SP, saya melihat beberapa INSERT INTO. Kemudian saya mencoba mencari "INSERT INTO" dan mengupdatenya, tetapi saya melewatkan satu tempat di mana hanya "INSERT" yang digunakan. Yang itu sebenarnya menyisipkan 4k + baris data kosong di beberapa kolom! Tentu saja, saya hanya perlu mencari INSERT. Namun, itu terjadi pada saya. Saya menyalahkan programmer IDIOT sebelumnya :) :)

David.Chu.ca
sumber
Sepertinya penulis membuatnya dengan INSERT INTO dan beberapa menempatkan INSERT dalam pemeliharaan. Sayangnya, itu terjadi lebih banyak daripada yang "seharusnya".
Andre Figueiredo
3

Di SQL Server 2005, Anda dapat memiliki sesuatu di antara INSERT dan INTO seperti ini:

MASUKKAN atas (5) KE tTable1 PILIH * DARI tTable2;

Meskipun bekerja tanpa INTO, saya lebih suka menggunakan INTO agar mudah dibaca.

devXen
sumber
1

Keduanya melakukan hal yang sama. INTO bersifat opsional (dalam T-SQL SQL Server) tetapi membantu keterbacaan.

DOK
sumber
0

Saya lebih suka menggunakannya. Ia memelihara sama merasakan sintaks deliniasi dan mudah dibaca sebagai bagian lain dari bahasa SQL, seperti group BY, order BY.

AgentThirteen
sumber
0

Saya mulai menggunakan SQL di ORACLE, jadi ketika saya melihat kode tanpa INTO, kode itu terlihat 'rusak' dan membingungkan.

Ya, itu hanya pendapat saya, dan saya tidak mengatakan Anda harus selalu menggunakan INTO. Tetapi jika Anda tidak melakukannya, Anda harus menyadari bahwa banyak orang lain mungkin akan memikirkan hal yang sama, terutama jika mereka belum mulai membuat skrip dengan implementasi yang lebih baru.

Dengan SQL saya pikir itu juga sangat penting untuk menyadari bahwa Anda MENAMBAHKAN BARIS ke TABEL, dan tidak bekerja dengan objek. Saya pikir tidak akan membantu bagi pengembang baru untuk menganggap baris / entri tabel SQL sebagai objek. Sekali lagi, hanya pendapat saya.

Garry_G
sumber
0

Jika tersedia gunakan fungsi standar. Bukan berarti Anda membutuhkan portabilitas untuk database khusus Anda, tetapi kemungkinan besar Anda membutuhkan portabilitas untuk pengetahuan SQL Anda. Contoh T-SQL yang tidak menyenangkan adalah penggunaan isnull, gunakan coalesce!

Tom
sumber