Menulis ke tabel sql c. Ubah permintaan menggunakan pernyataan SQL

Menulis ke tabel sql c.  Ubah permintaan menggunakan pernyataan SQL
Menulis ke tabel sql c. Ubah permintaan menggunakan pernyataan SQL

Artikel ini dikhususkan untuk mengisi tabel database dengan data, yaitu kita akan mempelajari perintah SQL untuk memasukkan record baru. Perlu dikatakan bahwa pencatatan dalam sebuah tabel dapat dilakukan dengan dua cara:

Metode nomor 1.
Mari kita coba menambahkan entri tentang negara baru ke tabel negara. Sintaks penambahannya adalah sebagai berikut:
MASUKKAN KE nama_tabel (bidang_1, bidang_2, ...) NILAI (Nilai_1, Nilai_2, ...); Berdasarkan struktur tabel kami, query SQL akan seperti ini:
MASUKKAN KE negara (nama_negara, nama_akronim) NILAI ("Rusia", "RU"); Beginilah cara kami menambahkan entri tentang negara “Rusia” ke tabel kami. Semuanya di sini harus jelas dan sederhana, yang utama adalah hati-hati melihat bidang mana yang Anda tunjukkan di tanda kurung pertama, dan tulis nilainya dalam urutan yang sama di tanda kurung kedua.

Metode nomor 2.
Metode kedua, menurut saya, sedikit lebih sederhana, karena Anda melihat apa yang Anda tetapkan dan di bidang mana. Percayalah, jika sebuah tabel memiliki jumlah kolom yang banyak, sangat mudah untuk membingungkan atau mengabaikan urutan kolom di kolom pertama dan urutan nilai di tanda kurung kedua. Sintaks dari metode kedua adalah:
MASUKKAN KE nama_tabel SET field_1 = Nilai_1, field_2 = Nilai_2, ... ; Ayo lanjutkan dalam contoh ini Mari tambahkan beberapa informasi ke tabel orang, karena fieldnya lebih banyak, dan keuntungan dari cara kedua akan langsung terasa:
MASUKKAN KE orang SET first_name="Ivan", last_name="Dulin", registrasi_date="2012-06-14", country="1"; Sekarang tabel kami berisi data berikut:


Anda mungkin memperhatikan bahwa kami tidak menentukan nilai usia, tetapi ternyata diisi... Semuanya benar - untuk bidang ini kami menetapkan nilai default sebagai 25. Jadi sekarang Ivan Dulin kami terdaftar di database dengan usia 25 tahun. Ini mungkin bukan contoh terbaik untuk menetapkan nilai default untuk bidang usia, namun Anda dapat mengatur properti tersebut ke bidang seperti, misalnya, peringkat pengguna situs, atau jumlah tampilan halaman. Mereka awalnya disetel ke 0.

Anda juga harus memperhatikan format tanggal di MySQL: YYYY-MM-DD. Jika Anda tidak mematuhinya, maka entri Anda tidak akan dimasukkan ke dalam tabel.

Seperti yang Anda lihat, bidang profesi diisi sebagai NULL, ini adalah nilai kosong. Untuk bidang ini.

Sebagai tambahan, perhatikan perintah berikut:
LOAD DATA LOCAL INFILE "D:\zapros.txt" KE TABEL orang; Menurutmu apa yang telah kita lakukan sekarang?! Dan kami melakukan hal berikut: menambahkan data ke tabel orang dari berkas permintaan.txt, yang terletak di drive D. Informasi dalam file harus memiliki struktur berikut:


Struktur data file harus memenuhi persyaratan berikut:
  1. Setiap entri baru harus dijelaskan pada baris baru
  2. Data harus ditentukan untuk semua bidang. Seperti yang Anda lihat, kami menentukan nilai NULL untuk bidang id, karena bertambah secara otomatis, sehingga MySQL sendiri akan memasukkan nilai yang diperlukan.
  3. Bidang dipisahkan satu sama lain dengan karakter tab (tombol Tab).
  4. Informasi yang Anda masukkan harus sesuai dengan tipe data bidang tertentu. Misalnya, tanggal dalam format YYYY-MM-DD, bilangan bulat untuk bilangan bulat, dll.
Dengan demikian, Anda telah mempelajari cara memasukkan data baru ke dalam tabel database Anda. Untuk mengkonsolidasikan materi yang telah Anda pelajari, masukkan sendiri informasi berikut:

Tabel profesi:

Tabel orang:

nama_depan nama_belakang usia tanggal_pendaftaran negara profesi
Leonid Bilak 45 2012-06-20 2 1
Yuri Nazarov 22 2012-06-21 3 1
Alla Savenko 25 2012-06-22 2 3
Irina Nikolaeva 31 2012-06-22 1 3

Pastikan untuk menambahkan entri ini karena kami akan membutuhkannya untuk pembelajaran kami. pernyataan PILIH(memilih informasi dari database), yang akan kita bahas di artikel (keempat) berikutnya tentang mempelajari query SQL.

Terkadang, programmer memiliki keinginan yang membara untuk membaca sesuatu dari database. Pemrogram menjadi gugup dan mudah tersinggung, kurang tidur dan dengan panik mengarahkan jari mereka ke keyboard. Demi kepentingan semua orang dan perdamaian dunia, mari kita lihat beberapa pengelolaan database sederhana dari C# menggunakan ADO.NET dan OLE DB. Meskipun mekanisme ini mendukung database yang berbeda seperti Oracle, di sini dan sekarang kita akan menggunakan MS SQLServer.

Dua tugas utama saat bekerja dengan database

2. Menjalankan perintah SQL yang melakukan sesuatu di server (memasukkan, memperbarui, menghapus, memanggil fungsi atau prosedur tersimpan

3. Pembacaan berurutan dari pilihan yang dipilih baris demi baris. Terutama digunakan dalam aplikasi web; dalam aplikasi desktop lebih mudah untuk mengunduh seluruh pilihan sekaligus RAM, penghematan dari hanya membaca baris-baris yang diperlukan dapat diabaikan.

4. Kasus yang jarang terjadi. Pembaruan otomatis tabel dalam database berdasarkan perubahan pada DataTable (biasanya diedit melalui antarmuka visual). Dalam kehidupan nyata, data biasanya dibaca melalui kueri atau tampilan heap join yang kompleks, sehingga sinkronisasi otomatis tidak cocok.

Kelas utama yang digunakan untuk tujuan ini: OleDbConnection - koneksi ke database, dibuat dengan string yang berisi parameter koneksi, buka, tutup, OleDbCommand - dibuat dengan instance koneksi dan perintah sql, jika Anda hanya perlu melakukan pembaruan atau mendapatkan nilai tunggal, maka kelas ini sudah cukup, OleDbDataAdapter - dibuat dengan OleDbCommand, berspesialisasi dalam pembacaan satu kali kumpulan baris dalam DataTable, dapat secara otomatis membuat kolom DataTable berdasarkan pilihan, mentransfer perubahan dari DataTable ke tabel di database, OleDbDataReader - pembacaan baris secara berurutan di DataTable satu per satu (berfungsi secara internal OleDbDataAdapter), DataTable / DataSet - wadah utama untuk data. Pencacahan OleDbType menyimpan tipe data database.

Menggunakan Sistem.Data; menggunakan Sistem.Data.OleDb; // string koneksi, sistem yang digunakan pengguna Windows

(Keamanan Terintegrasi=SSPI;) string connString = "Penyedia=SQLOLEDB.1;Keamanan Terintegrasi=SSPI;Info Keamanan Tetap=False;Katalog Awal=Namadatabase;Sumber Data=Namaserver"; // string koneksi alternatif menggunakan otentikasi MS SQL Server // connString = "Penyedia=SQLOLEDB.1;Info Keamanan Tetap=False;Katalog Awal=namadatabase;Waktu Sambungan habis=20;Sumber Data=namaserver;Uid=Namapengguna;Pwd=kata sandi pengguna ; " OleDbConnection dbConn = OleDbConnection baru(connString); dbConn.Buka(); someDataTable = DataTable baru(); OleDbDataAdapter dbAdapter = new OleDbDataAdapter("pilih COLUMN1, COLUMN2 dari TEST_TABLE ORDER BY COLUMN2", dbConn); // struktur internal tabel kosong akan dibuat secara otomatis berdasarkan data yang dibaca, jika struktur tabel telah ditentukan (misalnya melalui DataSet yang diketik), maka data akan ditulis ke kolom dengan nama yang cocok atau baru; kolom akan ditambahkan dbAdapter.Fill(someDataTable); // opsi alternatif untuk mengisi tabel di DataSet // dbAdapter.Fill(someDataSet, "someDataTable"); dbConn.Tutup();.

2. Menjalankan perintah SQL yang melakukan sesuatu di server (memasukkan, memperbarui, menghapus, memanggil fungsi atau prosedur tersimpan Yang paling perlu diperhatikan adalah masalah tanggal. Implementasi tanggal di .Net sangat tidak benar - awalnya tanggal tidak boleh kosong, tetapi dalam kehidupan nyata tanggal tersebut selalu kosong. Yang paling banyak- gunakan kelas tanggal khusus yang memperbaiki kesalahan pemrogram Microsoft. Pengembang yang lebih malas menyimpan semua tanggal dalam kode sebagai string dan mengonversinya menjadi DateTime hanya jika diperlukan, misalnya saat menulis ke database atau DataTable. Nullable DateTime tidak membantu, karena tanggal kosong di antarmuka akan terlihat seperti itu baris kosong, dan ketika ditulis ke database sebagai DBNull.Value - bahkan null dangkal dalam kode tidak diubah menjadi nilai ini tanpa tarian tambahan dengan rebana.

Opsi pertama hanya melibatkan penggabungan string kueri. Dianggap sebagai praktik buruk dan sangat berbahaya dalam aplikasi web karena rentan terhadap serangan peretas. Masalah tanggal kosong tidak mudah diselesaikan. Selain itu, ketika bekerja dengan tanggal, itu muncul masalah tambahan- format string tanggal yang berbeda tergantung pada pengaturan regional .Net Framework, lingkungan pengembangan, dan server sql. Ini mungkin terlihat tidak nyata - kueri yang sama berfungsi di SQL Management Studio, tetapi macet saat dijalankan dari kode. Sebagian disimpan oleh format khusus string tanggal. Namun, hal ini sering dilakukan dalam program kecil untuk penggunaan internal, yang keberadaannya tidak akan pernah diketahui oleh dunia luar.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "MASUKKAN KE TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) NILAI (" + intVariable", " + stringVariable" , " + dateTimeVariable.ToString("yyyyMMdd") +""); dbCommand.ExecuteNonQuery();

Opsi yang benar melibatkan pembuatan perintah dengan serangkaian parameter yang diketik dengan kuat. Anggap saja paragraf sebelumnya tidak ada.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "MASUKKAN KE TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) NILAI (?, ?, ?)"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; dbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar).Value = stringVariable; if (stringDate == "") ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = DBNull.Value; ) else ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = Konversi.ToDateTime(stringDate); dbCommand.ExecuteNonQuery();

Prosedur tersimpan dipanggil dengan cara yang persis sama, demi keragaman, ada opsi lain untuk menulis nilai dalam parameter (tidak terkait secara khusus dengan prosedur tersimpan):

OleDbCommand someDbComm = new OleDbCommand("someStoredProcedure", this.dbConn); someDbComm.CommandType = CommandType.StoredProcedure; someDbComm.Parameters.Add("@parameter1", OleDbType.VarChar); someDbComm.Parameters.Add("@parameter2", OleDbType.VarChar); someDbComm.Parameters.Value = "Setiap masalah selalu memiliki solusi - sederhana, mudah dan, tentu saja, salah"; someDbComm.Parameters.Value = "Henry Louis Mencken"; someDbComm.ExecuteNonQuery(); !}

Versi tambahan dari deskripsi parameter yang menunjukkan ukuran bidang dan mengikat kolom tabel tertentu.

DbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar, 100, "VARCHAR_COLUMN").Nilai = stringVariable;

Jika kita tidak perlu mengikat parameter perintah ke bidang DataTable tertentu, maka yang terbaik adalah tidak menentukan ukurannya sama sekali, misalnya, jika string kurang dari panjang Varchar yang ditentukan, maka kerangka .Net yang baik akan ditambahkan spasi pada string hingga panjang yang ditentukan, merusak data yang dikirimkan ke server.

Nilai dari satu field dibaca dengan metode ExecuteScalar()

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "PILIH TEST_COLUMN DARI TEST_TABLE WHERE ID_COLUMN = ?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; int hasil = Konversi.ToInt32(dbCommand.ExecuteScalar());

Perlu dicatat secara khusus bahwa ExecuteScalar mengembalikan Objek dan jika permintaan tidak mengembalikan apa pun, maka hasilnya akan nol dan konversi ke tipe data normal akan gagal karena kesalahan. Jika ada kemungkinan di mana kita tidak mendapat tanggapan apa pun, maka kita perlu melakukan ini:

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "PILIH TEST_COLUMN DARI TEST_TABLE WHERE ID_COLUMN = ?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; objek resultObj = dbCommand.ExecuteScalar() int hasil = -1; // nilai default berarti hasil kosong if(resultObj != null) ( result = Convert.ToInt32(dbCommand.ExecuteScalar()); )

3. Pembacaan berurutan dari pilihan pilihan baris demi baris
Membaca satu baris (beberapa baris dibaca dalam satu lingkaran);

OleDbCommand dbCommand = OleDbCommand baru (pilih PERSON_ID, NAME, SURNAME dari TEST_TABLE, dbConn); OleDbDataReader dbReader = dbCommand.ExecuteReader(); dbReader.Baca(); string nama = Convert.ToString(dbReader["NAMA"]); string nama keluarga = Convert.ToString(dbReader["SURNAME"]); dbReader.Tutup();

4. Kasus yang jarang terjadi. Pembaruan otomatis tabel dalam database berdasarkan perubahan pada DataTable (biasanya diedit melalui antarmuka visual).

Penting untuk menulis empat perintah untuk DbAdapter untuk setiap kemungkinan kasus - pilih, masukkan, perbarui, hapus.

DbAdapter.InsertCommand = new OleDbCommand("masukkan ke dalam nilai TEST_TABLE (NAMA, FAMIL, AGE) (?, ?, ?)", dbConnection); dbAdapter.InsertCommand.Parameters.Add("NAMA", OleDbType.VarChar, 100, "NAMA"); dbAdapter.InsertCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); // untuk tipe data dengan panjang konstan, panjang yang ditentukan dalam perintah diabaikan dbAdapter.InsertCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); // tambahkan perintah pembaruan dbAdapter.UpdateCommand = new OleDbCommand("update TEST_TABLE set NAME = ?, FAMIL = ?, AGE = ? Where ID = ?, dbConnection); dbAdapter.UpdateCommand.Parameters.Add("NAMA", OleDbType.VarChar,100, "NAMA"); dbAdapter.UpdateCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); dbAdapter.UpdateCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); dbAdapter.UpdateCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); // tambahkan perintah hapus dbAdapter.DeleteCommand = new OleDbCommand("hapus dari TEST_TABLE di mana ID = ?", dbConnection); dbAdapter.DeleteCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); try ( // mentransfer semua perubahan dari DataTable ke tabel di database dbAdapter.Update(table); ) catch (Exception error) ( MessageBox.Show("Error menyimpan data!" + error.Message); return; ) MessageBox .Show("Perubahan disimpan!");



Isi artikel
1. Kueri MySQL paling sederhana
2. Kueri SELECT sederhana
3. Kueri INSERT (entri baru) sederhana
4. PEMBARUAN Sederhana(tulis ulang, tambahkan) kueri
5. Kueri DELETE (hapus catatan) sederhana
6. Kueri DROP (hapus tabel) sederhana
7. Kueri MySQL yang kompleks
8. Kueri MySQL dan variabel PHP

1. Kueri SQL paling sederhana

1. Menampilkan daftar SEMUA database.

TAMPILKAN database;
2. Mencantumkan SEMUA tabel di Base_name Database.

TAMPILKAN tabel dalam nama_dasar;

2. Kueri SELECT sederhana ke database MySQL

MEMILIH– kueri yang memilih data yang ada dari database. Anda dapat menentukan parameter pemilihan tertentu untuk seleksi. Misalnya, inti dari permintaan dalam bahasa Rusia terdengar seperti ini: PILIH kolom ini dan itu DARI tabel ini dan itu DI MANA parameter kolom ini dan itu sama dengan nilainya.

1. Memilih SEMUA data di tabel tbl_name.

PILIH * DARI tbl_name;
2. Menampilkan jumlah record pada tabel tbl_name.

PILIH hitungan(*) DARI tbl_name;
3. Memilih (SELECT) dari (FROM) tabel tbl_name limit (LIMIT) 3 record, mulai dari 2.

PILIH * DARI tbl_name LIMIT 2,3;
4. Memilih (PILIH) SEMUA (*) catatan dari (FROM) tabel tbl_name dan mengurutkannya (ORDER BY) berdasarkan bidang id secara berurutan.

PILIH * DARI tbl_name DIPESAN BERDASARKAN id;
5. Memilih (PILIH) SEMUA catatan dari (DARI) tabel tbl_name dan mengurutkannya (ORDER BY) berdasarkan bidang id dalam urutan TERBALIK.

PILIH * DARI tbl_name ORDER BY id DESC;
6. Memilih ( MEMILIH) SEMUA (*) catatan dari ( DARI) tabel pengguna dan mengurutkannya ( PESAN OLEH) melintasi lapangan pengenal dalam urutan menaik, batasi ( MEMBATASI) 5 entri pertama.

PILIH * DARI pengguna ORDER BY id LIMIT 5;
7. Memilih semua record dari tabel pengguna, dimana lapangannya nama f sesuai dengan nilainya Jena.

PILIH * DARI pengguna WHERE fname="Gena";
8. Memilih semua record dari tabel pengguna, di mana nilai bidangnya nama f dimulai dengan Ge.

PILIH * DARI pengguna DIMANA fname SEPERTI "Ge%";
9. Memilih semua record dari tabel pengguna, Di mana nama f berakhir dengan tidak, dan mengurutkan catatan dalam urutan nilai menaik pengenal.

PILIH * DARI pengguna DIMANA fname SEPERTI "%na" ORDER BY id;
10. Memilih semua data dari kolom nama f, nama dari meja pengguna.

PILIH nama f, nama l DARI pengguna;

11. Katakanlah Anda memiliki negara di tabel data pengguna Anda. Jadi, jika Anda ingin menampilkan HANYA daftar nilai yang muncul (sehingga, misalnya, Rusia tidak ditampilkan 20 kali, tetapi hanya sekali), maka kami menggunakan DISTINCT. Ini akan membawa Rusia, Ukraina, Belarus keluar dari kumpulan nilai-nilai yang berulang. Jadi, dari tabel pengguna pembicara negara SEMUA nilai UNIK akan dikeluarkan

PILIH negara YANG BERBEDA DARI pengguna;
12. Memilih SEMUA data baris dari tabel pengguna Di mana usia memiliki nilai 18,19 dan 21.

PILIH * DARI pengguna DIMANA usia DALAM (18,19,21);
13. Memilih nilai MAKSIMUM usia di meja pengguna. Artinya, jika Anda memiliki nilai terbesar di tabel Anda usia(dari bahasa Inggris age) adalah 55, maka hasil querynya adalah 55.

PILIH maks(usia) DARI pengguna;
14. Pilih data dari tabel pengguna berdasarkan bidang nama Dan usia DI MANA usia mengambil nilai terkecil.

PILIH nama, min(usia) DARI pengguna;
15. Pilih data dari tabel pengguna melintasi lapangan nama DI MANA pengenal TIDAK SAMA DENGAN 2.

PILIH nama DARI pengguna DIMANA id!="2";

3. Kueri INSERT (entri baru) sederhana

MENYISIPKAN– kueri yang memungkinkan Anda untuk AWAL memasukkan catatan ke dalam database. Artinya, ini membuat record (baris) BARU di database.

1. Melakukan entri baru di meja pengguna, di lapangan nama sisipkan Sergey, dan di lapangan usia menyisipkan 25. Jadi, ditambahkan ke tabel baris baru dengan nilai-nilai ini. Jika ada lebih banyak kolom, kolom sisanya akan tetap kosong atau dengan nilai default.

MASUKKAN KE pengguna (nama, umur) NILAI ("Sergey", "25");

4. Permintaan UPDATE sederhana ke database MySQL

MEMPERBARUI– kueri yang memungkinkan Anda MEMASANG nilai bidang atau MENAMBAHKAN sesuatu ke baris yang sudah ada di database. Misalnya, ada baris yang sudah jadi, tetapi parameter usia perlu ditulis ulang di dalamnya, karena telah berubah seiring waktu.

1. Di dalam tabel pengguna usia menjadi 18.

PERBARUI pengguna SET age = "18" WHERE id = "3";
2. Semuanya sama seperti pada permintaan pertama, hanya menampilkan sintaks permintaan, di mana dua atau lebih bidang ditimpa.
Di meja pengguna WHERE id sama dengan 3 nilai bidang usia berusia 18 tahun dan negara Rusia.

PERBARUI pengguna SET umur = "18", negara = "Rusia" WHERE id = "3";

5. Kueri DELETE (hapus catatan) sederhana ke database MySQL

MENGHAPUS– kueri yang menghapus baris dari tabel.

1. Menghapus satu baris dari tabel pengguna DI MANA pengenal sama dengan 10.

HAPUS DARI pengguna WHERE id = "10";

6. Kueri DROP (hapus tabel) sederhana ke database MySQL

MENJATUHKAN– kueri yang menghapus tabel.

1. Menghapus seluruh tabel nama_tbl.

DROP TABLE tbl_name;

7. Kueri kompleks ke database MySQL

Kueri menarik yang dapat berguna bahkan bagi pengguna berpengalaman

PILIH id,nama,negara DARI pengguna,admin WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Kueri kompleks ini MEMILIH kolom id, nama, negara DALAM TABEL pengguna, admin DI MANA tanggal_pendaftaran(tanggal) tidak lebih tua 14 hari I pengaktifan TIDAK SAMA 0 , urutkan berdasarkan tanggal_pendaftaran dalam urutan terbalik (baru dulu).

PERBARUI pengguna SET umur = "18+" WHERE umur = (PILIH umur DARI pengguna WHERE male = "man");
Di atas adalah contoh dari apa yang disebut permintaan dalam permintaan dalam SQL. Perbarui usia pengguna menjadi 18+, dengan jenis kelamin laki-laki. Saya tidak merekomendasikan opsi permintaan seperti itu. Dari pengalaman pribadi saya akan mengatakan bahwa lebih baik membuat beberapa yang terpisah - mereka akan diproses lebih cepat.

8. Kueri database MySQL dan PHP

Dalam kueri MySQL di halaman PHP, Anda dapat memasukkan variabel sebagai nilai yang dibandingkan, dll. Beberapa contoh

1. Memilih semua record dari tabel pengguna, dimana lapangannya nama f sesuai dengan nilai variabelnya $nama.

PILIH * DARI pengguna WHERE fname="$name";
2. Di dalam tabel pengguna WHERE id sama dengan 3 nilai bidang usia perubahan nilai variabel $age.

PERBARUI pengguna SET age = "$age" WHERE id = "3";

Perhatian! Jika Anda tertarik dengan contoh lainnya, tulis pertanyaan di komentar!

Menghapus entri

Untuk menghapus record dari tabel, gunakan operator DELETE:

HAPUS DARI Nama tabel DIMANA kondisi;

Operator ini menghapus catatan (bukan nilai kolom individual) dari tabel tertentu yang memenuhi kondisi yang ditentukan. Kondisi adalah ekspresi logika, yang konstruksinya telah dibahas pada praktikum sebelumnya.

Kueri berikut menghapus catatan dari tabel Pelanggan di mana nilai kolom LName adalah "Ivanov":

HAPUS DARI Pelanggan

DIMANA LNama = "Ivanov"

Jika tabel berisi informasi tentang beberapa klien dengan nama belakang Ivanov, maka semuanya akan dihapus.

Pernyataan WHERE mungkin berisi subquery untuk memilih data (pernyataan SELECT). Subkueri dalam pernyataan DELETE bekerja sama persis dengan pernyataan SELECT. Kueri berikut menghapus semua klien dari kota Moskow, sedangkan pengidentifikasi unik kota tersebut dikembalikan menggunakan subkueri.

HAPUS DARI Pelanggan

WHERE IdCity IN (PILIH IdCity DARI Kota WHERE CityName = "Moscow")

Transact-SQL memperluas SQL standar dengan memungkinkan Anda menggunakan klausa FROM tambahan dalam pernyataan DELETE. Ekstensi ini, yang menentukan gabungan, dapat digunakan sebagai pengganti subkueri dalam klausa WHERE untuk menentukan baris yang akan dihapus. Ini memungkinkan Anda untuk menentukan data dari FROM kedua dan menghapus baris terkait dari tabel di klausa FROM pertama. Secara khusus, kueri sebelumnya dapat ditulis ulang sebagai berikut

HAPUS DARI Pelanggan

DARI Pelanggan k INNER JOIN

Operasi menghapus catatan dari tabel berbahaya karena dikaitkan dengan risiko kehilangan data yang tidak dapat diubah jika terjadi kesalahan semantik (tetapi bukan sintaksis) dalam perumusan ekspresi SQL. Untuk menghindari kerumitan, sebelum menghapus catatan, Anda disarankan untuk menjalankan kueri pemilihan yang sesuai terlebih dahulu untuk melihat catatan mana yang akan dihapus. Jadi, misalnya, sebelum menjalankan kueri penghapusan yang dibahas sebelumnya, tidak ada salahnya menjalankan kueri pemilihan yang sesuai.

PILIH *

DARI Pelanggan k INNER JOIN

Kota c ON k.IdCity = c.IdCity DAN c.CityName = "Moskow"

Untuk menghapus semua record dari tabel, cukup gunakan pernyataan DELETE tanpa kata kunci WHERE. Dalam hal ini, tabel itu sendiri dengan semua kolom yang ditentukan di dalamnya disimpan dan siap untuk memasukkan catatan baru. Misalnya, kueri berikut menghapus rekaman untuk semua produk.

HAPUS DARI Produk

Tugas untuk pekerjaan mandiri: Rumuskan kueri dalam SQL untuk menghapus semua pesanan yang tidak berisi satu produk (yaitu, semua pesanan kosong).

Pernyataan INSERT menyisipkan record baru ke dalam tabel. Dalam hal ini, nilai kolom dapat berupa konstanta literal, atau hasil eksekusi subkueri. Dalam kasus pertama, pernyataan INSERT terpisah digunakan untuk menyisipkan setiap baris; dalam kasus kedua, jumlah baris yang akan disisipkan sama banyaknya dengan yang dikembalikan oleh subkueri.

Sintaks operatornya adalah sebagai berikut:

    MASUKKAN KE [ (,...) ]

    (NILAI(,…))

  1. | (NILAI DEFAULT)

Seperti yang dapat Anda lihat dari sintaksis yang disajikan, daftar kolom bersifat opsional (tanda kurung siku dalam deskripsi sintaksis menunjukkan hal ini). Jika tidak ada maka daftar nilai yang disisipkan harus lengkap, yaitu memberikan nilai untuk semua kolom tabel. Dalam hal ini, urutan nilai harus sesuai dengan urutan yang ditentukan oleh pernyataan CREATE TABLE untuk tabel tempat baris dimasukkan. Selain itu, nilai-nilai ini harus memiliki tipe data yang sama dengan kolom yang dimasukkan. Sebagai contoh, pertimbangkan untuk menyisipkan baris ke dalam tabel Produk yang dibuat dengan pernyataan CREATE TABLE berikut:

    BUAT produk TABEL

    pembuat char (1) BUKAN NULL,

    model varchar(4) BUKAN BATAL,

    ketik varchar(7) BUKAN NULL

Misalkan Anda ingin menambahkan model PC 1157 dari pabrikan B ke tabel ini. Hal ini dapat dilakukan dengan pernyataan berikut:

    MASUKKAN KE DALAM Produk

    NILAI ("B" , 1157 , "PC" ) ;

Jika Anda menentukan daftar kolom, Anda dapat mengubah urutan “alami”-nya:

    MASUKKAN KE DALAM Produk (tipe, model, pembuat)

    NILAI ("PC" , 1157 , "B" ) ;

Tampaknya ini adalah fitur yang sama sekali tidak diperlukan, yang hanya membuat desain menjadi lebih rumit. Namun, ia menang jika kolom memiliki nilai default. Perhatikan struktur tabel berikut:

    BUAT TABEL produk_D

    karakter pembuat (1) NULL,

    model varchar(4) BATAL,

    ketik varchar (7) BUKAN NULL DEFAULT "PC"

Perhatikan bahwa di sini nilai semua kolom memiliki nilai default (dua yang pertama adalah NULL dan kolom terakhir adalah tipe - PC). Sekarang kita dapat menulis:

    MASUKKAN KE Produk_D (model, pembuat)

    NILAI(1157, "B");

Dalam hal ini, nilai yang hilang saat menyisipkan baris akan diganti dengan nilai default - PC. Perhatikan bahwa jika kolom tidak diberi nilai default dalam pernyataan CREATE TABLE dan batasan NOT NULL ditentukan untuk melarang penggunaan NULL di kolom tabel tersebut, maka nilai default NULL diasumsikan.

Timbul pertanyaan: apakah mungkin untuk tidak menentukan daftar kolom dan tetap menggunakan nilai default? Jawabannya adalah ya. Untuk melakukan ini, alih-alih menentukan nilainya secara eksplisit, gunakan kata khusus DEFAULT :

    MASUKKAN KE Produk_D

    NILAI ("B" , 1158 , DEFAULT ) ;

Karena semua kolom memiliki nilai default, untuk menyisipkan baris dengan nilai default, Anda dapat menulis:

    MASUKKAN KE Produk_D

    NILAI(DEFAULT, DEFAULT, DEFAULT);

Namun untuk kasus ini terdapat konstruksi khusus NILAI DEFAULT (lihat sintaks operator), yang dengannya operator di atas dapat ditulis ulang dalam bentuk

    MASUKKAN KE DALAM NILAI DEFAULT Produk_D;

Perhatikan bahwa saat menyisipkan baris ke dalam tabel, semua batasan yang dikenakan pada tabel ini akan dicentang. Ini bisa berupa batasan kunci utama atau indeks unik, batasan CHECK, atau batasan integritas referensial. Jika ada batasan yang dilanggar, penyisipan baris akan ditolak. Sekarang mari kita pertimbangkan kasus penggunaan subquery. Misalkan kita perlu memasukkan ke dalam tabel Product_D semua baris dari tabel Produk yang berhubungan dengan model komputer pribadi (type = 'PC'). Karena nilai yang kita butuhkan sudah ada di beberapa tabel, membuat baris yang disisipkan secara manual, pertama, tidak efektif dan, kedua, dapat menyebabkan kesalahan input. Menggunakan subkueri memecahkan masalah berikut:

Penggunaan simbol “*” di subquery dibenarkan dalam kasus ini, karena urutan kolomnya sama untuk kedua tabel. Jika hal ini tidak terjadi, daftar kolom harus diterapkan dalam pernyataan INSERT, subkueri, atau keduanya, yang akan cocok dengan urutan kolom:

Di sini, seperti sebelumnya, Anda tidak dapat menentukan semua kolom jika ingin menggunakan nilai default yang ada, misalnya:

Dalam hal ini, kolom tipe pada tabel Product_D akan diganti dengan nilai default PC untuk semua baris yang disisipkan.

Perhatikan bahwa saat menggunakan subquery yang berisi predikat, hanya baris yang nilai predikatnya TRUE (bukan UNKNOWN !) yang akan disisipkan. Dengan kata lain, jika kolom tipe dalam tabel Produk adalah NULL, dan nilai tersebut ada di sejumlah baris, maka baris tersebut tidak akan dimasukkan ke dalam tabel Produk_D.

Teknik buatan menggunakan subquery yang membentuk baris dengan klausa UNION ALL memungkinkan Anda mengatasi batasan penyisipan satu baris dalam pernyataan INSERT saat menggunakan konstruktor baris dalam klausa VALUES. Jadi jika kita perlu menyisipkan beberapa baris menggunakan satu pernyataan INSERT, kita dapat menulis:

    MASUKKAN KE Produk_D

    PILIH Pembuat "B" AS, model 1158 AS, tipe "PC" AS

    PERSATUAN SEMUA

    PILIH "C", 2190 , "Laptop"

    PERSATUAN SEMUA

    PILIH "D" , 3219 , "Printer" ;

Penggunaan UNION ALL lebih disukai daripada UNION meskipun dijamin tidak ada baris duplikat, karena dalam hal ini tidak ada pemeriksaan yang akan dilakukan untuk menghilangkan duplikat.

Perlu dicatat bahwa menyisipkan beberapa tupel menggunakan konstruktor baris sudah diterapkan Sistem manajemen basis data relasional (DBMS), dikembangkan oleh Microsoft Corporation.Structured Query Language) adalah bahasa komputer universal yang digunakan untuk membuat, memodifikasi, dan memanipulasi data dalam database relasional. SQLServer 2008. Mengingat kemungkinan ini, query terakhir dapat ditulis ulang sebagai:

    MASUKKAN KE NILAI Produk_D

    ("B", 1158, "PC"),

    ("C", 2190, "Laptop"),