MUKADDIMAH TEORI ASUMSI TABEL. CREATE TABLE contoh ( kode CHAR(5), nama VARCHAR(50) )

dokumen-dokumen yang mirip
Praktikum Basis Data. By. Rita Wiryasaputra, ST., M. Cs.

Cursor. M. Saefudin SKom, MMSI

Basis Data Spasial Modul 2

STRUCTURE QUERY LANGUAGE (SQL)

BAB II PEMBUATAN DAN MANAJEMEN TABLE

MODUL 4 INTERNET PROGRAMMING DATABASE

Data Manipulation Language (DML) & Data Control Language (DCL) pada Database

Praktikum Basis Data 14 Structure Query Language 2

Apakah SQL? Membuat basis data dan struktur tabel Input, update, dan delete data dari tabel Membuat query sederhana dan kompleks SQL

Basis Data. Bagian IV SQL (3) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Untuk menjalankan Mysql secara konpensional jalankan Mysql.exe pada direktori Mysql\Bin. Akan tampak tampilan sebagai berikut:

Macam - Macam Perintah Pada SQL

STRUCTURE QUERY LANGUAGE DDL & DML

Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert dibawah ini:

Sejarah(1) Sejarah(2) STRUCTURE QUERY LANGUANGE (1) Definisi SQL

MODUL PEMPROGRAMAN SQL TINGKAT DASAR 1 STANDAR KOMPETENSI: MENERAPKAN BAHASA PEMPROGRAMAN SQL TINGKAT DASAR SMK NEGERI 1 MAJALENGKA

TUGAS PRAKTIKUM SISTEM BASIS DATA

Perangkat Lunak Pengembangan Web

PENGANTAR TEKNOLOGI SISTEM INFORMASI MANAGEMENT 2

LAPORAN PRAKTIKUM MODUL 1 PENGENALAN MYSQL

SQL Data Definition Language (DDL)

PENGENALAN SINTAKS DASAR DALAM MySQL

Modul 2. Database Menggunakan Primary Key, Unique, Auto Increment, Alter-Add dan Alter-Drop. Disusun oleh. Sri Siska Wirdaniyati JURUSAN STATISTIKA

SISTEM BASIS DATA 1. WAHYU PRATAMA, S.Kom., MMSI.

Komponen-Komponen SQL a. Data Definition Language (DDL) : Digunakan untuk mendefinisikan data dengan menggunakan perintah : create, drop, alter.

TUGAS 1 PRAKTIKUM SISTEM BASIS DATA

STRUCTURE QUERY LANGUAGE

Stored Procedure. M. Saefudin SKom, MMSI

SEKOLAH TINGGI TEKNOLOGI INDONESIA TANJUNG PINANG

LAMPIRAN. 1) Membuat database baru untuk menampung data warehouse, yang bernama

Pertemuan 10. Bahasa Query Terapan

Pengenalan Structured Query Language

Nama : Parisaktiana Fathonah NIM : Kelas : Prak Sistem Basis Data TI-2 B malam

TUGAS I PRAKTIKUM SISTEM BASIS DATA. Nama: Krisna Pandu Wibowo( )

Sistem Basis Data Danny Kriestanto, S.Kom., M.Eng

LAPORAN PRAKTIKUM SISTEM BASIS DATA

Modul 6 Function dan Trigger

B a s i s D a t a - 1 C H A P T E R. SQL Operasi DML. Copyright 2005 PENS-ITS

LAPORAN PRAKTIKUM BASIS DATA

S Q L STRUCTURED QUERY LANGUAGE DEFINITION MANIPULATION C O N T R O L D M L SELECT INSERT UPDATE DELETE

P - 7 Pembahasan UTS PSIK V

Tahap Instalasi PostgreSQL di Windows

PERTEMUAN 10 PEMBUATAN TABEL

Pengenalan Database Management System MySQL. Pokok Bahasan: Pengenalan DataBase Pembangunan database berbasis Client-Server Dasar-Dasar MySQL

KapitaSelekta. (KBKI82127, 2 sks) Materi : Pengenalan MySQL

Introduction to SQL. Database Programming. 2 nd Chapter

Konsep Sistem Informasi B. BAB 2 - SQL Overview

MySQL AL AZHAR COMPUTER CLUB

Persiapan Table Untuk Latihan Sebelum kita berkenalan lebih jauh dengan Trigger, mari kita buat terlebih dahulu, struktur table yang dibutuhkan.

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET PEMROGRAMAN WEB Semester: 2 MYSQL 200 menit No.: Job: 12 Tgl: Hal.

Pertemuan 12 Pengenalan Structured Query Language

TUGAS PRAKTIKUM SISTEM BASIS DATA

Sistem Basis Data 1. Pertemuan 5 dan 6 Aljabar Relasional dan SQL Rogayah, ST.,MMSI Untuk 3DB01 dan 3DB04

Pertemuan DDL INDIKATOR. Modul Teori Database Aknela

MySQL J A M K E T I G A

Database. Danu Wira Pangestu 1. Mengenal Database. Lisensi Dokumen:

PERINTAH DASAR MySQL

LAPORAN TUGAS BASIS DATA I

MODUL 5 INTERNET PROGRAMMING : MySQL

LAPORAN PRAKTIKUM SISTEM BASIS DATA

Jobsheet SQL Dasar : Hari Zulianto, ST [Year]

15-Jan DATABASE - MySQL. Database. Constraints. Tujuan: Memahami perintah-perintah dasar DDL dan DML

SQL (Structure Query Language) Gentisya Tri Mardiani, S.Kom

Database Systems: Lab. Actvity 1: Database Design. Merancang Database. Merancang Database. Tipe Tabel MySQL.

KURSUS ONLINE JASA WEBMASTERS

Konsep Dasar. Relatsional dan RDBMS User dan Schema Database Membuat Tabel dan Mendefinisikan Constraint Input Data ke dalam Tabel

Untuk mengakses MySQL dengan mode text dari Console (Command Prompt = Microsoft Windows), dapat dilakukan dengan cara : 1.

Contoh Aplika Aplik si a VB dengan Database Oracle 1

TABLE JOIN SQL SERVER 2005

Karena VIEW dibentuk tanpa mencantumkan nama kolom baru, maka v1 mewarisi kolom yang yang dipilih pada tabel mahasiswa_xxx.

By Mrs Imana Malia Kondou, S.T. missimanakondou.wordpress.com

PRAKTIKUM SISTEM BASISDATA

Structured Query Language

MENGENAL SYNTAX DML PADA SQL

B a s i s D a t a C H A P T E R. SQL Operasi DML. Arif Basofi PENS 2015

DATABASE - MySQL. Muhammad Zen S. Hadi, ST. MSc.

MODUL PRAKTIKUM BASIS DATA TEKNIK INFORMATIKA UIN SUNAN KALIJAGA YOGYAKARTA 2011 PENGENALAN DATABASE MYSQL

Praktikum Basis Data 2017 TE UM

MODUL 1. Pembuatan tabel, pendefinisian constraint, export dan import PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

Contoh SQL Constraint

MODUL PRAKTIKUM 04. Database Implementation dengan Perintah SQL

BAB 2 LANDASAN TEORI

Computer Science, University of Brawijaya. Putra Pandu Adikara, S.Kom VIEW & TABLE. Basis Data 2

Structured Query Language

3.1 Form Wizard. 3. Pilihlah menu use data block wizard dan tekanlah button OK, maka akan tampil window di bawah ini.

Praktikum Basis Data 2017 TE UM MODUL 8 TRIGGER A. TUJUAN

Basis Data Relational


BAB 2 LANDASAN TEORI

Pertemuan III Oleh: Ilham Rais Arvianto, M.Pd

MODUL I PENGENALAN MYSQL

MySQL Databases. Dasar-dasar MySQL dan Implementasi MySQL kedalam pemrograman PHP. Jakarta, 16 April 2011 Oleh: M. Awaludin, S.Kom

TRIGGER TRIGGER 5/29/2017 HANI IRMAYANTI, S.KOM

STMIK SUMEDANG DATA DEFINITION LANGUAGE (DDL) TUGAS PRAKTEK PEMROGRAMAN BASIS DATA. Nama : NIKKI BAGUS N A NIM : A Kelas : TI 4A

SQL. Pemrograman Web II. Ganjil

MODUL 1 Pengenalan MySQL, DDL, DML

Constraint dan Manajemen Data dalam Timezone Berbeda

Agenda SQL. Pemakai SQL. Kemampuan SQL 02/12/2010 STRUCTURED QUERY LANGUAGE (SQL) Structured Query Language (SQL) (Pert. 9)

SQL (STRUCTURED QUERY LANGUAGE)

MODUL 2 PENGENALAN DATA DEFINITION LANGUAGE (DDL) & DATA MANIPULATION LANGUAGE (DML)

Transkripsi:

MUKADDIMAH Awalnya saya diminta untuk melakukan delete terhadap record yang redundan (duplikat) pada sebuah tabel dalam database. Ini terjadi pada aplikasi yang saya buat dengan Visual basic 6 dan menggunakan Microsoft Access sebagai databasenya. Namun yang menjadi masalah adalah data yang tampil merupakan hasil SELECT yang tertampung pada FlexGrid dan kemudian si user dapat menghapus data yang kebetulan sama satu persatu. Saya coba googling ke beberapa situs dan menemukan sedikit pencerahan. Pada tulisan ini hanya akan dibahas mengenai cara mendelete / hapus record yang sama pada sebuah tabel yang tidak memiliki sebuah indeks unik atau kolom identitas / Key. Saya menggunakan Microsoft SQL Server 2000 untuk melakukan simulasi tulisan ini. TEORI Menghapus record (delete) pada sebuah database adalah suatu hal yang biasa dilakukan oleh setiap orang. Dengan perintah DELETE tentu akan selesai masalahnya. DELETE dapat dikelompokkan menjadi perintah Data Manipulation Language (DML) dalam SQL. Ketika sebuah tabel tidak mempunyai Key / Index dan memiliki sejumlah record yang identik / sama, maka tentu tidak semudah itu kita mendelete record yang sama kemudian hanya satu record saja yang tetap ada. Menghilangkan redudansi record pada tabel yang tidak memiliki primary key yang akan kita lakukan pada tulisan ini. Berikut ini ada beberapa kemungkinan yang dapat dilakukan : 1. Menggunakan perintah ROWCOUNT 2. Menggunakan perintah TOP 3. Menggunakan tabel bantu sebagai perantara 4. Menambahkan sebuah kolom sebagai penanda 5. Dan Cari Sendiri :P Untuk melakukan simulasi, maka kita akan menggunakan data-data seperti nampak pada script di bawah ini. ASUMSI TABEL CREATE TABLE contoh ( kode CHAR(5), nama VARCHAR(50) ) INSERT INTO contoh (kode, nama) VALUES ('OS','OPERATING SYSTEM') INSERT INTO contoh (kode, nama) VALUES ('HD','HARD DISK') INSERT INTO contoh (kode, nama) VALUES ('OD','OPTICAL DRIVE') INSERT INTO contoh (kode, nama) VALUES ('OS','OPERATING SYSTEM') INSERT INTO contoh (kode, nama) VALUES ('MO','MONITOR') INSERT INTO contoh (kode, nama) VALUES ('OS','OPERATING SYSTEM') INSERT INTO contoh (kode, nama) VALUES ('HD ','HARD DISK') INSERT INTO contoh (kode, nama) VALUES ('MO','MONITOR') INSERT INTO contoh (kode, nama) VALUES ('OD','OPTICAL DRIVE') INSERT INTO contoh (kode, nama) VALUES ('OD','OPTICAL DRIVE') SELECT * 1

TUJUAN Dengan kondisi tabel yang pertama, terlihat beberapa record yang redundan. Pada awal tadi telah disebutkan bahwa dengan kondisi seperti ini, kita tidak dapat melakukan perintah DELETE FROM seperti contohnya : DELETE WHERE kode = OS AND nama = OPERATING SYSTEM Perintah di atas akan menyebabkan seluruh record yang kodenya OS dan namanya OPERATING SYSTEM akan terhapus. Oleh karena itu kita akan menjabarkan kemungkinan yang dapat dilakukan untuk menyelesaikan masalah ini sesuai dengan apa yang telah diuraikan pada teori. ROWCOUNT Perintah SET ROWCOUNT akan membatasi engine SQL Server untuk memproses sejumlah record secara spesifik. Sehingga proses akan berhenti setelah jumlah limit didefinisikan telah tercapai. Nilai standar yang ada pada SET ROWCOUNT adalah 0 yang berarti tidak ada pembatasan jumlah record yang akan diproses. Setelah perintah ROwCOUNT berjalan dan proses selesai, maka kita dapat mengembalikan nilai default dari ROWCOUNT yakni 0. Berikut sintaks penulisan perintah ROWCOUNT adalah : SET ROWCOUNT { number @number_var } Sekarang akan dicontohkan penggunaan ROWCOUNT pada tabel contoh, yakni untuk mendelete record yang berulang tiga kali, maka kita akan mengubah nilai ROWCOUNT menjadi 2. SET ROWCOUNT 2 DELETE WHERE kode= OS AND nama= OPERATING SYSTEM (2 row(s) affected) Setelah menjalankan perintah DELETE di atas dengan nilai ROWCOUNT adalah dua, maka record dengan kode OS dan nama OPERATING SYSTEM akan ditunjukkan pada tabel berikut. 2

Untuk mendelete record yang redundan secara otomatis, kita dapat menggunakan Cursor. Yang perlu menjadi catatan adalah ketika kita mendeklarasikan Cursor pada record yang redundan, maka kita perlu menghitung (COUNT) jumlah record yang redundan dikurangi satu (1), karena kita ingin menyisakan satu record saat proses DELETE terjadi. Berikut ini adalah contoh penggunaan Cursor menggunakan perintah ROWCOUNT. DECLARE @Hitung int DECLARE @Kode char(5) DECLARE @Nama varchar(50) DECLARE kursor_duplikasi CURSOR FAST_FORWARD FOR SELECT Kode, Nama, COUNT(*) - 1 GROUP BY Kode, Nama HAVING COUNT(*) > 1 OPEN kursor_duplikasi WHILE @@FETCH_STATUS = 0 BEGIN SET ROWCOUNT @Hitung DELETE WHERE Kode = @Kode AND Nama = @Nama END CLOSE kursor_duplikasi DEALLOCATE kursor_duplikasi Dengan menjalankan perintah di atas, maka tujuan kita telah tercapai, yakni record-record yang redundan pada tabel contoh akan di delete secara otomatis sehingga nampak pada tabel di bawah ini : 3

TOP Metode berikutnya yang dapat kita gunakan untuk menghilangkan redudansi record pada tabel adalah dengan perintah TOP untuk menunjang penggunaan perintah DELETE. Berikut ini sintaks penggunaan TOP : TOP n [PERCENT] Berikut ini contoh penggunaan : DELETE TOP (2) WHERE kode = 'OD' AND nama = 'OPTICAL DRIVE' Error Message yang ditampilkan : Server: Msg 156, Level 15, State 1, Line 1 Incorrect syntax near the keyword 'TOP'. Dengan perintah TOP, kita juga dapat mendelete record yang redundan secara otomatis menggunakan Cursor. Berikut ini adalah contoh penggunaan Cursor menggunakan perintah TOP DECLARE @Hitung int DECLARE @Kode char(5) DECLARE @Nama varchar(50) DECLARE kursor_duplikasi CURSOR FAST_FORWARD FOR SELECT Kode, Nama, COUNT(*) - 1 GROUP BY Kode, Nama HAVING COUNT(*) > 1 OPEN kursor_duplikasi WHILE @@FETCH_STATUS = 0 BEGIN DELETE TOP(@Hitung) WHERE Kode = @Kode AND Nama = @Nama END CLOSE kursor_duplikasi DEALLOCATE kursor_duplikasi Analisa : Dari hasil menjalankan perintah di atas, keduanya menunjukkan error yang sama. Saya sudah baca manual book SQL Server, kemudian sintaks juga sudah saya coma ganti beberapa kali, namun hasilnya nihil.??? Kemungkinan perintah tersebut hanya berlaku pada SQL Server versi 2005 ke atas >>> saya juga belum coba lagi. Mohon pencerahan dari para Master SQL sekalian 4

TABEL BANTU Metode berikutnya yang dapat digunakan dalam mendelete record yang redundan pada sebuah tabel adalah dengan memanfaatkan table bantu (Temporary Table) yang digunakan untuk menampung hasil SELECT Distinct dari tabel yang redundan. Apabila selesai maka tabel bantu tersebut akan di DROP. Berikut ini contoh penggunaan Temporary Table : SELECT DISTINCT * INTO #temp TRUNCATE TABLE contoh INSERT contoh SELECT * FROM #temp DROP TABLE #temp Ada empat tahap yang dijalankan dari perintah di atas : 1. Menyeleksi record yang redundan (SELECT DISTINCT *), kemudian memasukkan hasilnya kedalam tabel bantu (#temp) 2. Mengosongkan / Delete semua record dari tabel contoh 3. Memasukkan data ke tabel contoh hasil seleksi dari tabel #temp 4. Menghapus tabel bantu #temp Metode ini dapat dikatakan paling sederhana, namun efektif. Namun tidak cocok diterapkan untuk aplikasi yang menggunakan database Microsoft Access. KOLOM IDENTITAS Metode selanjutnya adalah dengan menambahkan sebuah kolom baru sebagai penanda untuk membedakan record yang satu dengan record yang lainnya. Dengan asumsi, kita (user) mempunyai hak akses untuk melakukan alter terhadap tabel, jika tidak memiliki hak akses maka metode ini tidak dapat diimplementasikan. Untuk melakukan cara ini maka kita akan menggunakan perintah ALTER Table untuk menambah sebuah kolom baru dengan tipe data Integer. ALTER TABLE contoh ADD penanda INT IDENTITY(1,1) Setelah menjalankan perintah di atas, maka akan di dapat struktur baru yang nampak pada tabel di bawah ini : SP_HELP contoh 5

Sekarang kita dapat dengan mudah mendelete record yang redundan pada tabel, misalnya kita akan mendelete record yang kodenya = OD yang ditunjukan pada record ke tiga. DELETE WHERE penanda IN (9,10) Dengan perintah di atas, maka record dengan kode OD pada baris ke 9 dan 10 akan di delete. Untuk SQL Server versi 2005 ke atas (2000 ke bawah tidak akan diimplementasikan), kita dapat menggunakan Common Table Expression (CTE). Berikut ini contoh menggunaannya : WITH duplikasicte(kode, nama, penanda) AS ( SELECT kode, nama, MIN(penanda) penanda GROUP BY kode, nama HAVING COUNT(*) > 1 ) DELETE WHERE penanda IN ( SELECT contoh.penanda INNER JOIN duplikasicte ON contoh.kode = duplikasicte.kode AND contoh.nama = duplikasicte.nama AND contoh.penanda <> duplikasicte.penanda ) Setelah selesai bekerja denga kolom penanda, maka kita dapat mendrop kolom penanda pada tabel contoh dengan perintah : ALTER TABLE contoh DROP COLUMN penanda 6

KODE TIDAK TERDOKUMENTASI /*KODE 1*/ SET ROWCOUNT 1 DELETE contoh a WHERE (SELECT COUNT(*) b WHERE b.kode = a.kode) > 1 WHILE @@rowcount > 0 DELETE contoh a WHERE (SELECT COUNT(*) b WHERE b.kode = a.kode) > 1 /*KODE 2*/ SET ROWCOUNT 1 BEGIN TRANSACTION duplikasi SELECT * WHILE @@rowcount > 0 DELETE a a WHERE (SELECT COUNT(*) b WHERE a.kode = b.kode) > 1 MICROSOFT SQL SERVER RELEASE VERSION Version Year Release Name Codename 4.21 1993 SQL Server 4.21-6.0 1995 SQL Server 6.0 SQL95 6.5 1996 SQL Server 6.5 Hydra 7.0 1999 SQL Server 7.0 Sphinx - 1999 SQL Server 7.0 OLAP Tools Plato 8.0 2000 SQL Server 2000 Shiloh 8.0 2003 SQL Server 2000 64-bit Edition Liberty 9.0 2005 SQL Server 2005 Yukon 10.0 2008 SQL Server 2008 Katmai PENUTUP Kiranya sampai disini saja tulisan yang tidak jelas ini. Tulisan ini jelas terinspirasi dari hasil Googling di internet dan Manual Books SQL Server 2000. Kritik dan saran silahkan disampaikan ke : http://prihastomo.wordpress.com Wassalam Yoga Prihastomo 7