Menghapus Duplikasi Data dengan Query DISTINCT
Pada Tutorial Belajar MySQL kali ini kita akan membahas tentang query DISTINCT. Query ini digunakan untuk menghapus atau mengeleminasi duplikasi dari hasil tampilan SELECT. Sama seperti query AS, ORDER BY, dan LIMIT, query DISTINCT ini digunakan sebagai tambahan dari query utamanya, yakni SELECT.
Jika anda ingin menggunakan data tabel yang sama, silahkan input ke dalam tabel_daftar dosen secara manual, atau menggunakan query LOAD DATA INFILE dibawah, untuk file txt dapat diperoleh dari sample data tabel daftar_dosen ver.2.
LOAD DATA INFILE 'D:\\MySQL\\daftar_dosen.txt' (sesuaikan dengan lokasi file di komputer anda) INTO TABLE daftar_dosen FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
Cara Menggunakan Query DISTINCT Untuk Menghapus Duplikasi
Penekanan untuk judul diatas, query DISTINCT digunakan hanya untuk memanipulasi tampilan hasil dari tabel. Duplikasi yang dihapus adalah untuk tampilan data, bukan tabel asli dari MySQL.
SELECT alamat FROM daftar_dosen ORDER BY alamat;
Dari hasil query tersebut, dapat dilihat bahwa nama kota yang sama akan tampil lebih dari sekali. Hal ini terjadi karena terdapat beberapa dosen yang kebetulan beralamat di kota yang sama dengan dosen lainnya. Jika yang kita inginkan bahwa untuk setiap kota yang sama, hasil query harus muncul 1 kali saja, kita akan memerlukan perintah DISTINCT.
Cara Penulisan Query DISTINCT
Format dasar penulisan query DISTINCT adalah sebagai berikut: SELECT DISTINCT nama_kolom FROM nama_tabel;
Nama_kolom adalah nama kolom yang akan ditampilkan.
Nama_tabel adalah nama tabel untuk kolom yang akan ditampilkan.
SELECT DISTINCT alamat FROM daftar_dosen ORDER BY alamat;
Dengan penambahan perintah DISTINCT di awal query SELECT, maka hanya data yang unik saja (data yang tidak sama) yang akan ditampilkan. Seandainya hasil query terdapat data yang sama lebih dari 1 kali tampil, perintah DISTINCT hanya akan menampilkannya 1 kali saja.
Namun jika kita menambahkan kolom nama_dosen seperti query berikut: SELECT DISTINCT nama_dosen,alamat FROM daftar_dosen
ORDER BY alamat;
Terlihat bahwa MySQL tetap menampilkan seluruh isi tabel tanpa ada yang dieliminasi. Hal ini dikarenakan query DISTINCT hanya mengeleminasi query yang unik, atau tidak sama dilihat secara baris per baris (per record). Dengan mengkombinasikan nama_dosen dengan alamat, maka setiap baris dianggap unik, kecuali terdapat nama dosen dan alamat yang persis sama.
Tipe data ini digunakan untuk menyimpan data yang berkaitan dengan tanggal dan waktu. Tipe data date, terdiri dari: DATE, TIME, DATETIME, TIMESTAMP, dan YEAR.
Jenis tipe data DATE dalam MySQL
MySQL memiliki beberapa format untuk tipe data date. Format tipe data date tersebut adalah: DATE, TIME, DATETIME, TIMESTAMP, dan YEAR. Perbedaan dari tipe-tipe tersebut terletak pada format penyimpanan data. Untuk lebih lengkapnya dapat dilihat dari tabel dibawah ini:
Tipe Data Jangkauan Ukuran Zero Value
DATE ‘1000-01-01’ to
MySQL menyediakan beberapa format yang dapat digunakan untuk input tipe data tanggal, masing masing untuk tipe data yang bersesuaian.
CCYY YY
Jika MySQL tidak dapat membaca format, atau data tidak tersedia, maka data akan diisi sesuai dengan nilai pada Zero Value.
Contoh query untuk membuat tabel dengan data DATE:
CREATE TABLE contoh_date (dat DATE, tim TIME, dattim DATETIME, timestam TIMESTAMP, yea YEAR);
DESCRIBE contoh_date;
Perhatikan pada saat mendefinisikan tipe data YEAR, pada query DESCRIBE kita dapat melihat bahwa MySQL memberikan nilai YEAR(4) sebagai nilai default. Kita dapat secara langsung mendefinisikan YEAR(2) jika menginginkan data tahun dengan 2 digit, namun hal ini tidak disarankan, karena dengan mendefinisikan tahun 26, akan menjadi ambigu, apakah itu tahun 1926 atau 2026, walaupun MySQL memiliki aturan akan mengkonversinya menjadi 2026.
MySQL menyediakan fungsi NOW() untuk memberikan tanggal server pada saat ini, dan kita akan menggunakannya sebagai nilai tiap kolom pada tabel contoh_date:
INSERT INTO contoh_date values (NOW(),NOW(),NOW(),NOW(),'2017');
Rangkuman materi basisdata :
1. MEMBUAT DAN MENGHAPUS DATABASEa. CREATE DATABASE UNIVERSITAS;
b. CREATE DATABASE IF NOT EXISTS MAHASISWA;
Format [IF NOT EXISTS] akan membuat database jika database itu belum ada sebelumnya. Jika sudah ada, query CREATE DATABASE tidak akan menghasilkan apa-apa (database yang lama tidak akan tertimpa).
c. USE UNIVERSITAS;
e. DROP DATABASE [IF EXISTS] DATABASE_NAME;
Sama seperti query pada pembuatan database, pilihan [IF EXISTS] digunakan untuk menghilangkan pesan error jika seandainya database tersebut memang tidak ada.
2. MEMBUAT, MENGHAPUS DAN MANIPULASI TABEL
a. CREATE TABLE DATA_MAHASISWA ( NIM CHAR(9), NAMA CHAR(50), UMUR INT, TEMPAT_LAHIR CHAR(50), JURUSAN CHAR (30) );
b. CREATE TABLE DATA_MAHASISWA ( NIM CHAR(9) PRIMARY KEY, NAMA CHAR(50), UMUR INT, TEMPAT_LAHIR CHAR(50), JURUSAN CHAR (30) );
c. CREATE TABLE DATA_MAHASISWA ( NIM CHAR(9), NAMA CHAR(50), UMUR INT, TEMPAT_LAHIR CHAR(50), JURUSAN CHAR (30), UNIQUE (NIM, NAMA)); d. SHOW TABLES;
e. DESCRIBE DATA_MAHASISWA; f. DROP TABLE DATA_MAHASISWA;
g. RENAME TABLE DATA_MAHASISWA TO MAHASISWA;
h. ALTER TABLE MAHASISWA ADD NAMA_BELAKANG CHAR(25) AFTER NAMA; i. ALTER TABLE MAHASISWA DROP NAMA_BELAKANG;
j. INSERT INTO TABEL MAHASISWA (NIM, NAMA, UMUR, TEMPAT LAHIR, JURUSAN) VALUES ('2016071001’,’AHMAD AQIL HALIM’, 20, ‘JAKARTA’,’INFORMATIKA’);
k. UPDATE MAHASISWA SET NAMA=’AQIL’ WHERE NIM=’2016071001’; l. DELETE FROM MAHASISWA WHERE NIM=’2016071001’;
m. TRUNCATE MAHASISWA;
3. CARA MENAMBAHKAN DATA DARI FILE (LOAD DATA INFILE)
a. LOAD DATA INFILE 'D:\\MYSQL\\INPUT_DATA.TXT' INTO TABLE DAFTAR_DOSEN FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\R\N';
b. LOAD DATA LOCAL INFILE 'D:\\MySQL\\data_lagi.txt' REPLACE INTO TABLE daftar_dosen FIELDS TERMINATED BY '\t' ENCLOSED BY '\'' LINES STARTING BY '**' TERMINATED BY '|' IGNORE 1 LINES;
4. QUERY SELECT
b. SELECT NIM, NAMA FROM MAHASISWA
c. SELECT * FROM MAHASISWA WHERE IPK >= 3.0;
d. SELECT NAMA FROM MAHASISWA WHERE ALAMAT=’PAMULANG’; e. SELECT * FROM MAHASISWA WHERE IPK BETWEEN 2.75 AND 3.5; f. SELECT * FROM MAHASISWA WHERE NAMA LIKE ‘%ADI%’;
g. SELECT * FROM MAHASISWA WHERE NAMA LIKE ‘%A’; h. SELECT * FROM MAHASISWA WHERE NAMA LIKE ‘A%’;
i. SELECT NAMA, ALAMAT FROM MAHASISWA ORDER BY NAMA ASC; j. SELECT NAMA, ALAMAT FROM MAHASISWA ORDER BY NAMA DESC; k. SELECT * FROM MAHASISWA GROUP BY ALAMAT;
l. SELECT COUNT(*) FROM MAHASISWA;
m. SELECT SUM HARGA_BARANG FROM BARANG;
n. SELECT * FROM BARANG WHERE LEFT (KODE_BARANG,1) = “D”; o. SELECT * FROM BARANG WHERE RIGHT (KODE_BARANG, 2) = “2”; p. SELECT * FROM BARANG WHERE MID(KODE_BARANG, 2, 1) = “P”; q. SELECT MAX (IPK) FROM MAHASISWA;
r. SELECT MIN (IPK) FROM MAHASISWA;
SOAL LATIHAN
1. BUATLAH DATABASE RUMAH SAKIT BINTARO
2. BUATLAH TABEL DOKTER, TABEL SPESIALIS DAN TABEL JAGA DENGAN KETENTUAN SEBAGAI BERIKUT :
a. TABEL DOKTER b. TABEL SPESIALIS c. TABEL JAGA
a. DOKTER.TXT b. SPESIALIS.TXT c. JAGA.TXT
4. TAMPILKAN SEMUA RECORD DARI TABEL DOKTER, TABEL SPESIALIS DAN TABEL JAGA
5. TAMPILKAN INFORMASI DOKTER SPESIALIS YANG ADA DI RUMAH SAKIT BINTARO
6. HITUNG BERAPA JUMLAH DOKTER SPESIALIS YANG ADA DI RUMAH SAKIT BINTARO
8. TAMPILKAN JADWAL PRAKTEK SETIAP DOKTER SPESIALIS ADA DI RUMAH SAKIT BINTARO
9. TAMPILKAN NAMA DAN JADWAL DOKTER SPESIALIS YANG PRAKTEK DI HARI SENIN