Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Operasi SQL Server CRUD

Dalam pemrograman basis data, ada empat operasi dasar:buat , baca , perbarui , dan hapus CRUD operasi. Mereka adalah langkah pertama dalam pemrograman database.

Istilah CRUD pertama kali muncul dalam buku James Martin 'Managing the Database Environment.' Sejak itu, istilah ini menjadi populer. Pada artikel ini, kita akan menjelajahi operasi CRUD dalam hal SQL Server karena sintaks operasi dapat berbeda dari database relasional dan NoSQL lainnya.

Persiapan

Ide utama dari database relasional adalah menyimpan data dalam tabel. Data tabel dapat dibaca, dimasukkan, dihapus. Dengan cara ini, operasi CRUD memanipulasi data tabel.

C C REATE Menyisipkan baris/baris ke dalam tabel
R R EAD Membaca (memilih) baris/baris dari tabel
U U PERBARUI Mengedit baris/baris dalam tabel
D D ELETE Hapus baris/baris dari tabel

Untuk mengilustrasikan operasi CRUD, kita membutuhkan tabel data. Mari kita buat satu. Ini hanya akan berisi tiga kolom. Kolom pertama akan menyimpan nama negara, kolom kedua akan menyimpan benua negara-negara tersebut dan kolom terakhir akan menyimpan populasi negara-negara tersebut. Kita dapat membuat tabel ini dengan bantuan pernyataan T-SQL dan memberinya judul TblCountry .

CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

Sekarang, mari kita tinjau operasi CRUD yang dilakukan di TblCountry tabel.

C – BUAT

Untuk menambahkan baris baru ke tabel, kami menggunakan INSERT INTO memerintah. Dalam perintah ini, kita perlu menentukan nama tabel target dan akan mencantumkan nama kolom dalam tanda kurung. Struktur pernyataan harus diakhiri dengan VALUES:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   ('Germany','Europe',8279000 )

Untuk menambahkan beberapa baris ke tabel, kita dapat menggunakan jenis pernyataan INSERT berikut:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Perhatikan bahwa MENJADI kata kunci bersifat opsional, dan Anda tidak perlu menggunakannya dalam pernyataan penyisipan.

INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Selain itu, Anda dapat menggunakan format berikut untuk menyisipkan beberapa baris ke tabel:

INSERT INTO TblCountry
SELECT 'Germany','Europe',8279000 
UNION ALL
SELECT 'Japan','Asia',126800000 
UNION ALL
SELECT 'Moroco','Africa',35740000

Sekarang, kita akan menyalin data langsung dari tabel sumber ke tabel tujuan. Metode ini dikenal sebagai INSERT INTO … SELECT pernyataan.

INSERT INTO … SELECT membutuhkan pencocokan tipe data dari tabel sumber dan tujuan. Pada pernyataan INSERT INTO … SELECT berikut, kita akan memasukkan data dari SourceCountryTbl tabel ke TblCountry tabel.

Pada awalnya, kami memasukkan beberapa data sintetis ke dalam SourceCountryTbl tabel untuk demonstrasi ini.

DROP TABLE IF EXISTS [SourceCountryTbl]
CREATE TABLE [dbo].[SourceCountryTbl]
(
	[SourceCountryName]		VARCHAR(50), 
    [SourceContinentNames]	VARCHAR(50) NULL, 
    [SourceCountryPopulation]		BIGINT NULL 
	
)


INSERT INTO [SourceCountryTbl] 
VALUES 
('Ukraine','Europe',44009214  ) ,
('UK','Europe',66573504) ,
('France','Europe',65233271)

Sekarang kita akan melakukan pernyataan INSERT INTO … SELECT.

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl

Pernyataan sisipan di atas menambahkan semua SourceCountryTbl data ke TblCountry meja. Kami juga dapat menambahkan WHERE klausa untuk memfilter pernyataan pilih.

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl WHERE TargetCountryName='UK'

SQL Server memungkinkan kita untuk menggunakan variabel tabel (objek yang membantu menyimpan data tabel sementara dalam lingkup lokal) dengan pernyataan INSERT INTO … SELECT. Dalam demonstrasi berikut, kita akan menggunakan variabel tabel sebagai tabel sumber:

  DECLARE @SourceVarTable AS TABLE
  ([TargetCountryName]		VARCHAR(50), 
    [TargetContinentNames]	VARCHAR(50) NULL, 
    [TargetCountryPopulation]		BIGINT NULL 
   )


    INSERT INTO @SourceVarTable 
     VALUES 
     ('Ukraine','Europe',44009214  ) ,
     ('UK','Europe',66573504) ,
     ('France','Europe',65233271)


INSERT INTO TblCountry
SELECT * FROM @SourceVarTable

Kiat :Microsoft mengumumkan fitur di SQL Server 2016 yaitu parallel insert . Fitur ini memungkinkan kita untuk melakukan operasi INSERT di thread paralel.

Jika Anda menambahkan TABLOCK petunjuk di akhir pernyataan penyisipan Anda, SQL Server dapat memilih paralel dengan rencana eksekusi pemrosesan sesuai dengan tingkat paralelisme maksimum server Anda atau ambang biaya untuk parameter paralelisme.

Pemrosesan penyisipan paralel juga akan mengurangi waktu pelaksanaan pernyataan penyisipan. Namun, TABLOCK petunjuk akan memperoleh kunci dari tabel yang dimasukkan selama operasi penyisipan. Untuk informasi lebih lanjut tentang sisipan paralel, Anda dapat merujuk ke INSERT Paralel Dunia Nyata…PILIH.

Pernyataan berguna lainnya adalah SELECT INTO. Metode ini memungkinkan kita untuk menyalin data dari satu tabel ke tabel yang baru dibuat. Dalam pernyataan berikut, NewCountryTable tidak ada sebelum eksekusi kueri. Kueri membuat tabel dan memasukkan semua data dari TblCountry tabel.

SELECT * INTO NewCountryTable 
FROM TblCountry

Pada saat yang sama, kita dapat membuat tabel baru untuk kolom tertentu dari tabel sumber.

Dalam beberapa kasus, kita perlu mengembalikan dan menggunakan nilai yang disisipkan dari pernyataan INSERT. Sejak SQL Server 2005, pernyataan INSERT memungkinkan kita untuk mengambil nilai yang dipertanyakan dari pernyataan INSERT.

Sekarang, kita akan menjatuhkan dan membuat tabel pengujian kita dan menambahkan kolom identitas baru. Juga, kami akan menambahkan batasan default ke kolom ini. Dengan demikian, jika kita tidak memasukkan nilai eksplisit apa pun ke kolom ini, itu akan secara otomatis membuat nilai baru.

Dalam contoh berikut, kami akan mendeklarasikan tabel yang memiliki satu kolom dan menyisipkan output dari SeqID nilai kolom ke tabel ini dengan bantuan kolom OUTPUT:

DROP TABLE IF EXISTS TblCountry
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL ,
	SeqID uniqueidentifier  default(newid())
)	



DECLARE @OutputID AS TABLE(LogID uniqueidentifier) 
 
INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
OUTPUT INSERTED.SeqId INTO @OutputID
VALUES   
('Germany','Europe',8279000 )

SELECT * FROM @OutPutId

R – Baca

Baca operasi mengambil data dari tabel dan mengembalikan set hasil dengan catatan tabel. Jika kita ingin mengambil data dari lebih dari satu tabel, kita dapat menggunakan operator JOIN dan membuat hubungan logis antar tabel.

Pernyataan SELECT memainkan peran utama tunggal dalam baca operasi. Ini didasarkan pada tiga komponen:

  • Kolom – kita mendefinisikan kolom dari mana kita ingin mengambil data
  • Tabel – kami tentukan tabel dari mana kita ingin mendapatkan data
  • Filter – kami dapat menyaring data yang ingin kita baca. Bagian ini opsional.

Bentuk paling sederhana dari pernyataan pilih adalah sebagai berikut:

SELECT column1, column2,...,columnN
FROM table_name

Sekarang, kita akan pergi melalui contoh. Pada awalnya, kita membutuhkan tabel sampel untuk dibaca. Mari kita membuatnya:

DROP TABLE  IF EXISTS TblCountry
 GO
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

GO
INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Membaca semua kolom dalam tabel

Operator asterisk (*) digunakan dalam pernyataan SELECT karena mengembalikan semua kolom dalam tabel:

SELECT * FROM TblCountry

Kiat :Operator tanda bintang (*) dapat mempengaruhi kinerja secara negatif karena menyebabkan lebih banyak lalu lintas jaringan dan menghabiskan lebih banyak sumber daya. Jadi, jika Anda tidak perlu mengembalikan semua data dari semua kolom, hindari penggunaan tanda bintang (*) dalam pernyataan SELECT.

Membaca kolom tertentu dari tabel

Kita juga bisa membaca kolom tertentu dari tabel. Mari kita tinjau contoh yang hanya akan mengembalikan CountryName dan Populasi Negara kolom:

SELECT CountryName,CountryPopulation FROM TblCountry

Menggunakan alias dalam pernyataan SELECT

Dalam pernyataan SELECT, kita dapat memberikan nama sementara pada tabel atau kolom. Nama-nama sementara ini adalah alias. Mari kita tulis ulang dua kueri sebelumnya dengan alias tabel dan kolom.

Dalam kueri berikut, TblC alias akan menentukan nama tabel:

SELECT TblC.* FROM TblCountry TblC

Dalam contoh berikut, kami akan memberikan alias untuk nama kolom. Kami akan mengubah CountryName ke NamaC , dan Populasi Negara – ke CPop .

SELECT TblC.CountryName AS [CName], CountryPopulation AS [CPop] FROM TblCountry TblC

Tujuan dari alias tersebut adalah:

  • Buat kueri lebih mudah dibaca jika nama tabel atau kolom rumit.
  • Pastikan menggunakan kueri untuk tabel lebih dari satu kali.
  • Sederhanakan penulisan kueri jika nama tabel atau kolomnya panjang.

Memfilter pernyataan SELECT

Pernyataan SELECT memungkinkan kita untuk memfilter kumpulan hasil melalui klausa WHERE. Misalnya, kami ingin memfilter pernyataan SELECT menurut CountryName kolom dan hanya mengembalikan data Jerman ke dalam hasil. Kueri berikut akan melakukan operasi baca dengan filter:

SELECT TblC.* FROM TblCountry TblC
WHERE TblC.CountryName='Germany'

Mengurutkan hasil pernyataan SELECT

Klausa ORDER BY membantu kita mengurutkan kumpulan hasil dari pernyataan SELECT menurut kolom atau kolom yang ditentukan. Kita dapat melakukan pengurutan naik atau turun dengan bantuan klausa ORDER BY.

Kami akan mengurutkan TblCountry tabel menurut populasi negara dalam urutan menaik:

SELECT TblC.* FROM TblCountry TblC
ORDER BY TblC.CountryPopulation ASC

Kiat :Anda dapat menggunakan indeks kolom dalam klausa ORDER BY, dan nomor indeks kolom dimulai dengan 1.

Kita juga bisa menulis query sebelumnya. Angka tiga (3) menunjukkan Populasi Negara kolom:

SELECT TblC.* FROM TblCountry TblC
ORDER BY 3 ASC

U – Perbarui

Pernyataan UPDATE memodifikasi data yang ada dalam tabel. Pernyataan ini harus menyertakan klausa SET sehingga kita dapat menentukan kolom target untuk mengubah data.

Kueri berikut akan mengubah semua baris CountrtyPopulation nilai kolom menjadi 1.

UPDATE TblCountry SET CountryPopulation=1
GO
SELECT TblC.* FROM TblCountry TblC

Dalam pernyataan UPDATE, kita dapat menggunakan klausa WHERE untuk mengubah baris atau baris tertentu dalam tabel.

Mari kita ubah Jepang deretan Populasi Negara ke 245000:

UPDATE TblCountry SET CountryPopulation=245000
WHERE CountryName = 'Japan'
GO
SELECT TblC.* FROM TblCountry TblC

Pernyataan UPDATE adalah gabungan dari pernyataan hapus dan sisipkan. Jadi, kita dapat mengembalikan nilai yang disisipkan dan dihapus melalui klausa OUTPUT.

Mari kita buat contoh:

UPDATE TblCountry SET CountryPopulation=22
OUTPUT inserted.CountryPopulation AS [Insertedvalue],
deleted.CountryPopulation AS [Deletedvalue]
WHERE CountryName = 'Germany'

Seperti yang Anda lihat, kami telah memodifikasi Populasi Negara nilai dari 1 hingga 22. Kemudian kita dapat mengetahui nilai yang dimasukkan dan yang dihapus. Selain itu, kita dapat memasukkan nilai-nilai ini ke dalam variabel tabel (tipe variabel khusus yang dapat digunakan sebagai tabel).

Kami akan memasukkan nilai yang dimasukkan dan dihapus ke variabel tabel:

DECLARE @LogTable TABLE(InsertValLog INT , DelValLog INT) 


UPDATE TblCountry SET CountryPopulation=45
OUTPUT inserted.CountryPopulation ,
deleted.CountryPopulation INTO @LogTable
WHERE CountryName = 'Germany'


SELECT * FROM @LogTable

@@ROWCOUNT adalah variabel sistem yang mengembalikan jumlah baris yang terpengaruh dalam pernyataan terakhir. Dengan demikian, kita dapat menggunakan variabel ini untuk mengekspos beberapa baris yang dimodifikasi dalam pernyataan pembaruan.

Dalam contoh berikut, kueri pembaruan akan mengubah 3 baris, dan variabel sistem @@ROWCOUNT akan mengembalikan 3.

UPDATE TblCountry SET CountryPopulation=1
SELECT @@ROWCOUNT AS [AffectedRowNumber]

D – Hapus

Pernyataan Hapus menghapus baris/baris yang ada dari tabel.

Pertama, mari kita lihat bagaimana menggunakan klausa WHERE dalam pernyataan DELETE. Sebagian besar waktu kami ingin memfilter baris yang dihapus.

Contoh di bawah ini mengilustrasikan cara menghapus baris tertentu:

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry WHERE CountryName='Japan'
SELECT TblC.* FROM TblCountry TblC

Meskipun dengan pernyataan DELETE, kita dapat menghapus semua record dari tabel. Namun, pernyataan DELETE sangat mendasar, dan kami tidak menggunakan kondisi WHERE.

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry
SELECT TblC.* FROM TblCountry TblC

Namun, dalam beberapa keadaan desain database, pernyataan DELETE tidak menghapus baris/baris jika melanggar kunci asing atau batasan lainnya.

Misalnya, dalam AdventureWorks database, kami tidak dapat menghapus baris ProductCategory tabel karena ProductCategoryID ditentukan sebagai kunci asing dalam tabel itu.

Mari kita coba menghapus satu baris dari ProductCategory tabel – tidak diragukan lagi, kita akan menghadapi kesalahan berikut:

DELETE FROM [Production].[ProductCategory]
WHERE ProductCategoryID=1

Kesimpulan

Jadi, kami telah menjelajahi operasi CRUD di SQL. Pernyataan INSERT, SELECT, UPDATE, dan DELETE adalah fungsi dasar database SQL, dan Anda harus menguasainya jika ingin mempelajari pemrograman database SQL. Teori CRUD bisa menjadi titik awal yang baik, dan banyak latihan akan membantu Anda menjadi ahli.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ambil nama kolom dan jenis prosedur tersimpan?

  2. EF4 - Prosedur tersimpan yang dipilih tidak mengembalikan kolom

  3. C# Setara dengan Tipe Data SQL Server

  4. Cara Menangani Kesalahan dalam Transaksi Bersarang SQL Server

  5. Cara membuat Batasan Kunci Asing Dengan ON UPDATE CASCADE di SQL Server - Tutorial SQL Server / TSQL Bagian 79