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

Pernyataan Hapus SQL Server:Cara Menghapus Satu atau Mengalikan Baris dari Tabel

Penerapan yang tepat dari pernyataan DELETE untuk penghapusan data sangat penting, dan melibatkan banyak masalah. Namun, ada praktik standar penggunaan pernyataan DELETE yang menyederhanakan semua tugas tersebut.

Artikel ini akan mengeksplorasi beberapa skenario kehidupan profesional untuk membekali Anda dengan tip paling bermanfaat untuk menggunakan pernyataan DELETE dengan benar. Anda dapat menghapus data dari tabel dengan cara yang berbeda. Jelajahi perbedaan antara DELETE dan TRUNCATE di SQL Server yang telah dibahas dengan contoh praktis.

T-SQL Hapus Perintah Dasar

Pertama-tama, kita harus membiasakan diri dengan pernyataan T-SQL Delete dengan cara yang paling sederhana.

Pernyataan Hapus, seperti namanya, adalah pernyataan yang membantu kita menghapus data dari tabel database.

Sebuah meja adalah struktur yang Anda buat dalam database untuk menyimpan data Anda. Misalnya, kita dapat memiliki tabel buku untuk menyimpan catatan yang terkait dengan buku tersebut.

Basis data adalah kumpulan data yang terorganisir dan struktur data untuk menampung data tersebut. Dengan kata lain, data dapat disimpan di dalam database dalam bentuk tabel.

Cara Menghapus Satu Baris atau Beberapa Baris

Kita dapat menghapus satu atau lebih record (umumnya dikenal sebagai baris) dari tabel menggunakan pernyataan delete.

Pernyataan Hapus menghapus beberapa atau semua data (baris) dari tabel.

Menurut dokumentasi Microsoft, pernyataan Hapus menghapus satu atau lebih baris dari tabel atau tampilan di SQL Server.

Orang mungkin bertanya-tanya bagaimana pernyataan tersebut menentukan apakah akan menghapus beberapa atau semua data (baris) dari sebuah tabel. Jawabannya terletak pada kriteria atau ketentuan yang menentukan apa yang perlu dihapus.

Hapus Perintah di SQL Server

Sintaks paling sederhana dari pernyataan tersebut adalah sebagai berikut:

Delete FROM <TableName> WHERE <Condition>

Anda perlu memberikan nama tabel dan kriteria/kondisi untuk penghapusan data (baris) dari tabel.

Catatan:Sangat penting untuk menggunakan pernyataan DELETE dengan kondisi (WHERE Clause) meskipun persyaratan kondisi bukan keharusan.

Jika Anda menjalankan perintah DELETE tabel tanpa kondisi WHERE, Anda akan menghapus semua baris (data) dari tabel. Oleh karena itu, biasakan untuk menggunakan kondisi WHERE kecuali jika Anda ingin menghapus semua baris.

Kompatibilitas

Pernyataan ini kompatibel dengan banyak versi SQL Server, termasuk yang berikut:

  1. SQL Server 2012 dan versi yang lebih baru.
  2. Database SQL Server Berbasis Cloud (Azure SQL Database).
  3. Gudang Data SQL Berbasis Cloud (Azure Synapse Analytics).

Daftar Periksa Langkah demi Langkah untuk Menghapus Baris dari Tabel

Sekarang kita akan menjelajahi penggunaan pernyataan Hapus dengan beberapa skenario praktis.

Ringkasan Langkah

  1. Menyiapkan Contoh Basis Data.
  2. Melihat datanya.
  3. Hapus data.
  4. Memasukkan lebih banyak data kembali ke tabel.
  5. Melihat data sebelum dihapus.
  6. Cara menghapus data di kolom berdasarkan kondisi.
  7. Melihat data setelah dihapus.
  8. Memasukkan lebih banyak data kembali ke tabel.
  9. Melihat data sebelum dihapus.
  10. Hapus data berdasarkan kondisi lain.
  11. Melihat data setelah dihapus.
  12. Masukkan kembali data ke dalam tabel.
  13. Hapus data berdasarkan dua kondisi kali ini.
  14. Melihat data setelah dihapus.

Setup Contoh Database (BooksSample)

Kami membutuhkan database sampel untuk menguji dan menjalankan skrip. Pertama, kita perlu menyiapkan database sampel itu, yang mencakup langkah-langkah berikut:

  1. Buat database sampel.
  2. Buat tabel di database sampel.
  3. Memasukkan data (dua baris) ke dalam tabel database.

Buka SQL Server Management Studio atau dbForge Studio untuk SQL Server dan jalankan skrip berikut untuk menyiapkan database sampel:

-- Connect to the 'master' database to run this snippet
USE master
GO
-- Create a new database if it does not already exist
IF NOT EXISTS (
    SELECT [name]
FROM sys.databases
WHERE [name] = N'BooksSample'
)
CREATE DATABASE BooksSample
GO

USE BooksSample

-- Create the table book
CREATE TABLE [dbo].[Book]
(
    [BookNumber] INT NOT NULL PRIMARY KEY,-- Primary Key column
    [Title] VARCHAR(150) NOT NULL,
    [Stock] SMALLINT NOT NULL
    
);
GO

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        1, 'Learn SQL in 7 Days', 50
),
    ( -- Second row: values for the columns in the list above
        2, 'Creating Databases in Minutes', 50
);

GO

Melihat data (tabel Buku)

Mari kita lihat tabel yang baru saja dibuat dan diisi dalam database. Jalankan script di bawah ini:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Outputnya adalah:

Kita bisa melihat dua baris tabel (Buku). Saat ini, ini semua data yang ada di tabel ini.

Hapus Data

Seperti yang kita ingat, ada risiko menghapus semua baris dalam tabel jika kita lupa menyebutkan kondisi/kriteria penghapusan yang benar.

Selalu gunakan Klausa WHERE dengan pernyataan Hapus untuk menghindari kehilangan data yang tidak disengaja. Satu-satunya pengecualian adalah jika Anda perlu menghapus semua data dengan sengaja.

Untuk menghapus semua data (baris) dari tabel database sampel, jalankan skrip berikut:

-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book

Outputnya adalah:

Melihat data setelah penghapusan

Sekarang, kita perlu memeriksa apakah semua baris telah dihapus:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Hasilnya adalah:

Dengan cara ini, kami telah berhasil menghapus semua baris dari Buku meja. Untuk itu, kami menerapkan pernyataan DELETE tanpa kriteria/kondisi penghapusan.

Masukkan Data Kembali ke Tabel (Dengan Judul Yang Sama)

Kita dapat menyisipkan kembali data (baris) ke dalam tabel dan kemudian menerapkan pernyataan DELETE berdasarkan beberapa kondisi/kriteria.

Kali ini, kami memilih untuk menyisipkan lebih banyak baris, tetapi sengaja memiliki judul yang sama:

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        1, 'Learn SQL in 7 Days', 50
),
    ( -- Second row: values for the columns in the list above
        2, 'Creating Databases in Minutes', 50
),
	( -- Third row: values for the columns in the list above
        3, 'Creating Databases in Minutes', 50
),
    ( -- Fourth row: values for the columns in the list above
        4, 'Creating Databases in Minutes', 50
);

GO

Outputnya adalah sebagai berikut:

Catatan :Untuk mengembalikan data yang dihapus atau diubah, Anda dapat menggunakan solusi perangkat lunak khusus. Solusi Log Transaksi dbForge memungkinkan Anda untuk memulihkan data tersebut dan melihat siapa dan kapan dihapus atau diubah.

Melihat data sebelum dihapus

Untuk melihat data, jalankan skrip berikut:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Outputnya adalah:

Output menunjukkan bahwa kami telah memasukkan tiga baris dengan judul buku yang sama secara tidak sengaja. Ini sebuah masalah. Solusi sederhana adalah menghapus baris yang tidak perlu, menerapkan kondisi khusus untuk menghapus baris dengan judul duplikat.

Cara Menghapus Data di Kolom SQL Berdasarkan Kondisi (Nomor Buku)

Penting:Kami dapat mempertimbangkan salah satu cara berikut untuk menyelesaikan masalah ini:

  1. Hapus berdasarkan Nomor Buku
  2. Hapus berdasarkan Judul

Dalam skenario saya, saya memilih untuk tidak menghapus berdasarkan Judul. Jika kami menghapus berdasarkan Judul, kami akhirnya menghapus semua baris yang berisi judul itu termasuk yang perlu kami pertahankan. Oleh karena itu, pendekatan yang disarankan adalah menghapus tabel berdasarkan BookNumber kolom.

Jika kita melihat kumpulan hasil, kita dapat dengan mudah memahami bahwa BookNumber:3 dan Nomor Buku:4 adalah baris duplikat. Sebelumnya sudah dijelaskan secara detail cara menghilangkan duplikat di SQL. Kita harus menghapusnya agar database tetap konsisten.

Sekali lagi, opsi berikut muncul:

  1. Hapus jika nomor buku (BookNumber) lebih besar dari 2.
  2. Hapus di mana BookNumber adalah 3 dan 4.

Mari kita pilih opsi pertama. Namun, ingat bahwa ini hanya valid jika tidak ada baris setelah baris duplikat yang kita ketahui.

Jalankan script berikut:

-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2

Melihat data setelah penghapusan

Mari kita periksa tabel setelah menghapus data:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Outputnya adalah:

Masukkan lebih banyak Data ke Tabel (Stok lebih banyak)

Untuk memasukkan lebih banyak data (baris) yang terkait dengan stok, kami menggunakan skrip di bawah ini:

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        3, 'Basic Data Structures', 60
),
    ( -- Second row: values for the columns in the list above
        4, 'Advanced Data Structures', 0
)
GO

Melihat data sebelum dihapus

Lihat tabelnya:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Outputnya adalah:

Hapus Data berdasarkan Kondisi Berbeda

Asumsikan bahwa kita perlu menghapus buku stok untuk menyimpan informasi yang lebih akurat dalam database. Untuk melakukan ini, kita harus mencari baris tersebut dengan Stok adalah 0.

Kita dapat menggunakan pernyataan DELETE dengan kondisi berdasarkan Saham nilai kolom 0:

-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book 
DELETE FROM dbo.Book
WHERE Stock=0

Melihat data setelah penghapusan

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Masukkan Lebih Banyak Data ke Tabel (Lebih Banyak Judul dan Stok)

Kami menambahkan dua baris lagi ke dalam tabel:

-- Insert rows into table 'Book' 
INSERT INTO [dbo].[Book]
    ( -- Columns to insert data into
    [BookNumber], [Title], [Stock]
    )
VALUES
    ( -- First row: values for the columns in the list above
        4, 'Learn Azure SQL Database in 10 Days', 0
),
    ( -- Second row: values for the columns in the list above
        5, 'Azure SQL Database Concepts', 1
)
GO

Melihat data sebelum dihapus

Periksa baris sebelum menghapus apa pun lebih lanjut, berdasarkan persyaratan:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Output tabelnya adalah:

Hapus Data Berdasarkan Dua Kondisi

Kali ini, kita harus menghapus semua buku (baris) di mana judul berisi kata SQL dan mereka kehabisan stok (nilai stok mereka adalah 0).

Dengan kata lain, kami menghapus semua buku stok yang berhubungan dengan SQL.

Dalam hal ini, kita harus menentukan lebih dari satu kondisi dengan pernyataan DELETE. Kami harus memastikan bahwa kami hanya menghapus buku-buku yang sudah habis dan hanya buku-buku yang memiliki kata SQL di judulnya.

Lihat skrip berikut:

-- Delete all the out of stock (Where Stock is 0) SQL related (Title contains SQL) books (rows) from the table Book 
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Melihat data setelah penghapusan

Kami melihat data untuk terakhir kalinya:

Kiat Penting :Sebelum Anda menghapus data, jalankan pernyataan SELECT berdasarkan kondisi yang sama yang akan Anda gunakan untuk penghapusan. Dengan cara ini, Anda memastikan bahwa aktivitas penghapusan Anda akan diterapkan pada data yang benar.

Misalnya, jalankan kueri SELECT terlebih dahulu untuk memastikan bahwa Anda hanya mendapatkan baris yang dimaksudkan untuk dihapus:

SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Setelah Anda yakin, Anda dapat mengubah SELECT menjadi pernyataan DELETE:

DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Selamat!

Anda telah berhasil menguasai tugas menghapus (deleting) satu atau beberapa baris dari sebuah tabel sesuai dengan persyaratan.

Tetap terhubung untuk skenario penghapusan lanjutan dan kiat profesional lainnya terkait penggunaan pernyataan DELETE.

Hal yang Dapat Dilakukan

Sekarang setelah Anda berhasil menghapus baris dari tabel, Anda dapat melatih dan meningkatkan keterampilan Anda lebih lanjut:

  1. Coba hapus baris yang stoknya hanya satu.
  2. Hapus semua buku yang judulnya mengandung kata Struktur.
  3. Hapus semua buku (baris) kecuali nomor buku (BookNumber) 1.

Temukan skenario lebih lanjut tentang pernyataan SQL DELETE.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pangkas (bukan bulat) tempat desimal di SQL Server

  2. Apa cara terbaik untuk memotong tanggal di SQL Server?

  3. TSQL Coba/Tangkap dalam Transaksi atau sebaliknya?

  4. SQL Server - Hapus semua karakter ASCII yang tidak dapat dicetak

  5. Cara Memeriksa Versi SQL Server Anda