Apa itu mysql shel 1.0.9

(1)

Show

MySQL 5

Dari Pemula (ingga Mahir

Achmad Solichin

(2)

…masih ku persembahkan untuk Indonesia tanah air tercinta, dan untuk

Chotimatul Musyarofah istri tersayang serta Muhammad Lintang putra tercinta

kami…

(3)

Seluruh isi dalam dokumen ini dapat digunakan, dimanfaatkan dan

disebarluaskan secara bebas untuk tujuan pendidikan, pembelajaran dan bukan

komersial

non profit

, dengan syarat tidak menghilangkan, menghapus atau

mengubah atribut penulis dokumen ini dan pernyataan dalam lisensi dokumen

yang disertakan di setiap dokumen. Tidak diperbolehkan melakukan penulisan

ulang atau mengkomersialkan buku ini kecuali mendapatkan ijin terlebih dahulu

(4)

Kata Pengantar

MySQL

merupakan

software database open source

yang paling populer di

dunia, dimana saat ini digunakan lebih dari

juta pengguna di seluruh dunia.

Dengan kehandalan, kecepatan dan kemudahan penggunaannya, MySQL menjadi

pilihan utama bagi banyak pengembang

software

dan aplikasi baik di

platform

web maupun

desktop

. Pengguna MySQL tidak hanya sebatas pengguna

perseorangan maupun perusahaan kecil, namun perusahaan seperti Yahoo!,

Alcatel‐Lucent, Google, Nokia, Youtube, Wordpress dan Facebook juga

merupakan pengguna MySQL.

MySQL pertama kali dibuat dan dikembangkan di Swedia, yaitu oleh David

Axmark, Allan Larsson dan Michael "Monty" Widenius. Mereka mengembangkan

MySQL sejak tahun

‐an. Saat ini versi MySQL yang sudah stabil mencapai

versi x, dan sedang dikembangkan versi x. Untuk lebih lengkapnya dapat

dilihat di situs resmi MySQL .

Buku berjudul "

MySQL 5: Dari Pemula Hingga Mahir

" ini mencoba

membahas MySQL secara praktis, disajikan secara terstruktur dan disertai

contoh‐contoh dan latihan untuk membantu pemahaman. Buku ini diharapkan

dapat membantu Anda menguasai MySQL hingga mahir. Buku ini sangat cocok

bagi Anda yang baru mempelajari MySQL maupun bagi Anda yang ingin lebih

memperdalam MySQL sebagai salah satu

software

database terkemuka saat ini.

Buku ini terbagi menjadi empat bagian. Bagian pertama merupakan

bagian pendahuluan yang membahas mengenai penjelasan singkat MySQL dan

juga langkah instalasi MySQL serta

software

pendukung lainnya. Bagian kedua

adalah Dasar‐dasar MySQL yang menjelaskan mengenai perintah‐perintah dasar

dari MySQL termasuk fungsi‐fungsi di dalam MySQL. Pada bagian ketiga

dipaparkan mengenai perintah‐perintah MySQL yang lebih kompleks seperti

penggabungan antar tabel,

trigger, views

dan

stored procedure

. Selanjutnya pada

bagian yang terakhir akan dijelaskan mengenai penyajian laporan dan proses

(5)

Akhirnya penulis berharap agar buku ini bermanfaat bagi perkembangan

ilmu dan pengetahuan di )ndonesia, khususnya dalam hal pengetahuan database

MySQL. Saran dan kritik untuk perbaikan buku ini sangat penulis harapkan.

Saran, kritik dan masukan mengenai buku ini dapat disampaikan melalui email

ke penulis di

atau melalui situs penulis di

http://achmatim.net.

Penulis

Achmad Solichin

(6)

DAFTAR ISI

KATA PENGANTAR

03

DAFTAR ISI

04

BAGIAN 1. PENDAHULUAN

05

Bab . Sekilas Tentang MySQL

Bab . )nstalasi MySQL dan Software Pendukung

BAGIAN 2. DASAR-DASAR MySQL

26

Bab . Merancang Database

Bab . Dasar‐dasar SQL

Bab . Fungsi‐fungsi MySQL

BAGIAN 3. PERINTAH MySQL LANJUTAN

66

Bab . Perintah MySQL Lanjutan

Bab . Administrasi dan Keamanan di MySQL

Bab . Trigger dan Views

Bab . Function dan Stored Procedure

BAGIAN 4. LAPORAN DI MySQL

102

Bab . Laporan di MySQL

Bab . Backup, Restore dan )mport di MySQL

DAFTAR PUSTAKA

116

(7)

Bagian 1

(8)

Bab 1

Sekilas Tentang MySQL

™ Pengenalan Database, DBMS, dan RDBMS

™ Beberapa Istilah Database

™ Hierarki Database

™ Pengenalan Database MySQL

Pengenalan Database, DBMS dan RDBMS

Basis data (atau database) adalah kumpulan informasi yang disimpan di dalam komputer secara sistematik sehingga dapat diperiksa menggunakan suatu program komputer untuk memperoleh informasi dari basis data tersebut (http://id.wikipedia.org/wiki/Database). Database digunakan untuk menyimpan informasi atau data yang terintegrasi dengan baik di dalam komputer.

Untuk mengelola database diperlukan suatu perangkat lunak yang disebut

DBMS (Database Management System). DBMS merupakan suatu sistem perangkat lunak yang memungkinkan user (pengguna) untuk membuat, memelihara, mengontrol, dan mengakses database secara praktis dan efisien. Dengan DBMS, user akan lebih mudah mengontrol dan memanipulasi data yang ada.

Sedangkan RDBMS atau Relationship Database Management System merupakan salah satu jenis DBMS yang mendukung adanya relationship atau hubungan antar tabel. Di samping RDBMS, terdapat jenis DBMS lain, misalnya Hierarchy DBMS, Object Oriented DBMS, dsb.

Beberapa software atau perangkat lunak DBMS yang sering digunakan dalam aplikasi program antara lain :

ƒ DB2 - http://www-306.ibm.com/software/data/db2/

ƒ Microsoft SQL Server - http://www.microsoft.com/sql/

ƒ Oracle - http://www.oracle.com

ƒ Sybase - http://www.sybase.com/

ƒ Interbase - http://www.borland.com/interbase

ƒ Teradata - http://www.teradata.com/

ƒ Firebird - http://www.firebirdsql.org/

(9)

Beberapa Istilah Database

Table

Sebuah tabel merupakan kumpulan data (nilai) yang diorganisasikan ke dalam baris (record) dan kolom (field). Masing-masing kolom memiliki nama yang spesifik dan unik.

Field

Field merupakan kolom dari sebuah table. Field memiliki ukuran type data tertentu yang menentukan bagaimana data nantinya tersimpan.

Record

Field merupakan sebuah kumpulan nilai yang saling terkait.

Key

Key merupakan suatu field yang dapat dijadikan kunci dalam operasi tabel. Dalam konsep database, key memiliki banyak jenis diantaranya Primary Key, Foreign Key, Composite Key, dll.

SQL

SQL atau Structured Query Language merupakan suatu bahasa (language) yang digunakan untuk mengakses database. SQL sering disebut juga sebagai query.

Hierarki Database

Dalam konsep database, urutan atau hierarki database sangatlah penting. Urutan atau hierarki database digambarkan dalam gambar sbb :

(10)

MySQL

MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL (bahasa Inggris: database management system) atau DBMS yang multithread, multi-user, dengan sekitar 6 juta instalasi di seluruh dunia. MySQL AB membuat MySQL tersedia sebagai perangkat lunak gratis di bawah lisensi GNU General Public License (GPL), tetapi mereka juga menjual dibawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok dengan penggunaan GPL.

Tidak seperti PHP atau Apache yang merupakan software yang dikembangkan oleh komunitas umum, dan hak cipta untuk kode sumber dimiliki oleh penulisnya masing-masing, MySQL dimiliki dan disponsori oleh sebuah perusahaan komersial Swedia yaitu MySQL AB. MySQL AB memegang penuh hak cipta hampir atas semua kode sumbernya. Kedua orang Swedia dan satu orang Finlandia yang mendirikan MySQL AB adalah: David Axmark, Allan Larsson, dan Michael "Monty" Widenius.

MySQL dapat didownload di situs resminya, http://www.mysql.com.

Fitur-fitur MySQL antara lain :

ƒ Relational Database System. Seperti halnya software database lain yang ada di pasaran, MySQL termasuk RDBMS.

ƒ Arsitektur Client-Server. MySQL memiliki arsitektur client-server dimana server database MySQL terinstal di server. Client MySQL dapat berada di komputer yang sama dengan server, dan dapat juga di komputer lain yang berkomunikasi dengan server melalui jaringan bahkan internet.

ƒ Mengenal perintah SQL standar. SQL (Structured Query Language) merupakan suatu bahasa standar yang berlaku di hampir semua software database. MySQL mendukung SQL versi SQL:2003.

ƒ Mendukung Sub Select. Mulai versi 4.1 MySQL telah mendukung select dalam select (sub select).

ƒ Mendukung Views. MySQL mendukung views sejak versi 5.0

ƒ Mendukung Stored Prosedured (SP). MySQL mendukung SP sejak versi 5.0

ƒ Mendukung Triggers. MySQL mendukung trigger pada versi 5.0 namun masih terbatas. Pengembang MySQL berjanji akan meningkatkan kemampuan

(11)

ƒ Tersedia fungsi GIS.

ƒ Free (bebas didownload)

ƒ Stabil dan tangguh

ƒ Fleksibel dengan berbagai pemrograman

ƒ Security yang baik

ƒ Dukungan dari banyak komunitas

(12)

Bab 2

Instalasi MySQL dan Software

Pendukung

™ Instalasi MySQL di Windows

™ Instalasi Software Pendukung MySQL

Instalasi MySQL di Windows

Persiapan

1. Download Source MySQL di http://www.mysql.com/downloads/

MySQL versi terakhir saat materi ini dibuat adalah MySQL 5.0.45. Silahkan Anda download versi terakhir tersebut dan simpan di komputer Anda. Pada dasarnya, instalasi untuk setiap versi MySQL tidak jauh berbeda.

Proses Instalasi MySQL

1. Setelah Anda mendapatkan source MySQL, selanjutnya Anda perlu meng-ekstrak file tersebut ke komputer Anda.

2. Jalankan file Setup.exe yang ada di dalam folder source MySQL. Lihat gambar berikut ini !

(13)

3. MySQL Setup akan mengekstrak file instalasi MySQL seperti pada gambar berikut ini.

Gambar 2.2. Proses Instalasi Dimulai

4. Selanjutnya akan ditampilkan window MySQL Server 5.0 Setup Wizard for MySQL. Klik tombol Next untuk memulai proses instalasi.

(14)

Gambar 2.4. Pilih tipe instalasi

6. Selanjutnya akan ditampilkan window informasi konfigurasi MySQL, yaitu tipe instalasi dan folder tujuan instalasi. Klik Install untuk memulai proses instalasi.

(15)

Gambar 2.6. Window Setup Type

8. Selanjutnya ditampilkan window informasi mengenai MySQL Enterprise. Klik

(16)

Gambar 2.8. Window informasi MySQL Monitoring

9. Proses instalasi selesai dan akan ditampilkan seperti pada gambar di bawah ini. Jika kita ingin langsung mengkonfigurasikan server MySQL (password, service dll) maka pilihkan checkbox Configure the MySQL Server now dan tekan tombol Finish.

(17)

10.Selanjutnya ditampilkan window MySQL Server Instance Configuration Wizard. Klik Next untuk melanjutkan.

Gambar 2.10. Window MySQL Server Instance Configuration Wizard

11.Selanjutnya terdapat pilihan tipe konfigurasi yang diinginkan, Detailed Configuration atau Standard Configuration. Pilih dan klik Next untuk melanjutkan.

(18)

12.Selanjutnya terdapat pilihan tipe server yang diinginkan, Developer, Server,

atau Dedicated MySQL Server. Pilih salah satu dan klik Next untuk melanjutkan.

Gambar 2.12. Pilihan tipe server MySQL

13.Selanjutnya terdapat pilihan penggunaan database MySQL, untuk

Multifunctional, Transactional Only atau Non-Transactional Only. Pilih salah satu dan klik Next untuk melanjutkan.

(19)

Gambar 2.13. Window Pilihan penggunaan Database.

14.Selanjutnya terdapat setting-an InnoDB Tablespace Settings dimana diminta memilih tempat untuk tablespace InnoDB. Klik Next untuk melanjutkan.

(20)

Gambar 2.15. Pilihan Perkiraan Seberapa Besar Koneksi User ke Server

16.Selanjutnya terdapat window untuk memilih nomor PORT yang digunakan untuk MySQL. Next untuk melanjutkan.

(21)

17.Selanjutnya terdapat pilihan nama service MySQL yang akan digunakan oleh Windows. Pilih salah satu dan klik Next untuk melanjutkan.

Gambar 2.17. Window pilihan Nama Service MySQL.

18.Selanjutnya diminta memodifikasi security. Pilih password untuk root (user tertinggi di MySQL) dan klik Next untuk melanjutkan.

(22)

19.Proses konfigurasi selesai dan klik Execute untuk menyimpan konfigurasi dan menjalankan servis MySQL.

Gambar 2.19. Proses konfigurasi server MySQL selesai.

Koneksi ke Server MySQL dengan MySQL Client

MySQL menyediakan tools untuk melakukan koneksi ke server MySQL, yaitu MySQL Command-Line Client. Tools tersebut dapat diakses dari menu Start > All Programs > MySQL > MySQL Server 5> MySQL Command Line Client. Tampilannya kurang lebih tampak pada gambar berikut ini:

(23)

Untuk melakukan koneksi ke server MySQL, Anda cukup mengetikkan password koneksi MySQL. Password ini didefinisikan pada saat proses instalasi. Jika passwordnya benar, maka akan ditampilkan window sbb :

Gambar 2.20. Koneksi ke Server MySQL dengan User root

Setelah koneksi ke server MySQL berhasil dilakukan, maka akan ditampilkan prompt mysql> seperti pada gambar 12.14. Query atau perintah-perintah MySQL dapat dituliskan pada prompt MySQL ini. Akhiri setiap query dengan titik-koma (;). Selanjutnya untuk keluar dari server MySQL dapat dilakukan dengan mengetikkan perintah quit atau \q pada prompt mysql>.

Berbagai MySQL Client

untuk Administrasi Server MySQL

Berikut ini beberapa tools yang biasa digunakan dalam mempermudah administrasi server MySQL. Tools berikut ini hanya digunakan untuk mempermudah administrasi MySQL, jadi tidak harus digunakan.

(24)

Gambar 2.21. Tampilan MySQL command line client

2. MySQL-Front

MySQL-Front merupakan front-end MySQL berbasis Windows yang cukup banyak digunakan. MySQL-Front memiliki user interface yang cukup mudah digunakan, bahkan oleh user pemula. Pada awalnya MySQL-Front merupakan software yang free, namun mulai versi 3.0 ke atas, software ini menjadi software yang bersifat shareware dengan masa percobaan selama 30 hari. Jika Anda ingin mencoba software ini, cobalah MySQL-Front versi 2.5 karena selain masih bebas untuk didownload, versi 2.5 cukup stabil dan sudah teruji. Situs resmi MySQL-Front beralamat di http://www.mysqlfront.de

(25)

hampir semua penyedia hosting yang ada di internet. PHPMyAdmin mendukung berbagai fitur administrasi MySQL termasuk manipulasi database, tabel, index dan juga dapat mengeksport data ke dalam berbagai format data. PHPMyAdmin juga tersedia dalam 50 bahasa lebih, termasuk bahasa Indonesia. PHPMyAdmin dapat didownload secara gratis di

http://www.phpmyadmin.net

Gambar 2.23. Tampilan halaman PHPMyAdmin

4. SQLYog

SQLYog merupakan salah satu front-end MySQL yang cukup populer saat ini. Dengan dukungan fitur yang cukup banyak dan lengkap, SQL Yog tersedia versi commercial dan community (free). SQLYog dapat didownload di situsnya

(26)

Gambar 2.24. Tampilan layar SQLYog

5. MySQL Administrator dan MySQL Query Browser

MySQL Administrator dan MySQL Query Browser merupakan tools administrasi database MySQL yang tersedia di situs resmi MySQL (http://www.mysql.com). Keduanya dapat didownload di alamat

http://www.mysql.com/products/tools/.

Beberapa fitur MySQL Administrator, antara lain: • Administrasi user.

• Halaman monitoring server. • Optimatisasi MySQL

• Informasi umum keadaan server • Status replication.

• Cross-platform.

Beberapa fitur MySQL Query Browser, antara lain: • Tampilan dan menu yang mudah (user-friendly).

• Mendukung beberapa window hasil (result preview) sekaligus. • Kemudahan dalam menulis query dengan visual tools.

• Manipulasi database.

• Membuat dan manipulasi tabel. • SQL statementsdebugging.

(27)

(28)

Bagian 2

Dasar-dasar

MySQL

(29)

Bab 3

Merancang Database

™ Tipe Table MySQL

™ Tipe Field MySQL

™ Merancang suatu database yang baik.

Merancang database merupakan hal yang pertama kali harus dilakukan sebelum membuat suatu aplikasi berbasis database. Rancangan database yang baik akan menentukan seberapa baik sebuah aplikasi dibangun. Orang yang bertanggung jawab dalam merancang database biasanya disebut sebagai seorang sistem analis.

Berikut ini contoh sederhana sebuah rancangan database dalam pada

Sistem Pemesanan Barang (ordering system). Rancangan database disajikan dalam bentuk class diagram.

(30)

Jika kita tidak menyebutkan tipe tabel saat membuat tabel, maka tipe tabel otomatis akan dibuat sesuai konfigurasi default server MySQL. Hal ini ditentukan oleh variabel default-table-type di file konfigurasi MySQL.

MyISAM

Tipe tabel MyISAM merupakan tipe tabel yang sederhana, stabil dan mudah digunakan. Jika kita akan menyimpan data sederhana yang tidak terlalu rumit, maka gunakanlah tipe tabel ini. Kelebihan utama MyISAM adalah kecepatan dan kestabilannya. Jika kita memilih tipe tabel MyISAM, maka MySQL secara otomatis akan menentukan salah satu dari tiga jenis tabel MyISAM, yaitu :

a. MyISAM static. Jenis ini digunakan ketika semua kolom dalam tabel didefinisikan dengan ukuran yang pasti (fixed). Dengan kata lain, tidak ada kolom yang memiliki tipe seperti VARCHAR, TEXT dan BLOB. Karena sifatnya yang fixed, maka jenis ini akan lebih cepat, aman dan stabil.

b. MyISAM dymanic. Jenis ini digunakan ketika terdapat kolom dengan tipe yang dinamis, seperti tipe kolom VARCHAR. Keuntungan utama dari jenis ini adalah ukuran yang dinamis. Jadi sifatnya lebih efektif karena ukuran data (file) menyesuaikan isi dari masing-masing kolom (field).

c. MyISAM Compressed. Kedua jenis MyISAM, static dan dynamic dapat dikompresi menjadi satu jenis yaitu MyISAM Compressed dengan perintah myisamchk. Tentunya hasilnya lebih kecil dari segi ukuran. Tabel yang terkompresi tidak dapat dikenakan operasi seperti INSERT, UPDATE dan DELETE.

InnoDB

Tipe tabel InnoDB merupakan tipe tabel MySQL yang mendukung proses transaksi. Tipe ini memiliki beberapa keunggulan, antara lain:

a. Mendukung transaksi antar tabel. b. Mendukung row-level-locking.

c. Mendukung Foreign-Key Constraints. d. Crash recovery.

HEAP

(31)

Tipe Tabel yang Lain

Selain 3 (tiga) tipe tabel diatas, yaitu MyISAM, InnoDB dan HEAP, MySQL juga mendukung tipe tabel yang lain, yaitu:

a. BDB. Tipe tabel ini mirip tipe tabel InnoDB, namun penggunaannya belum maksimal.

b. Archieve. Tipe ini tersedia sejak MySQL versi 4.1. Tipe ini digunakan untuk menyimpan tabel yang terkompresi, dimana biasanya digunakan dalam proses backup.

c. CSV. Tipe ini digunakan untuk menyimpan data dalam bentuk file text yang dibatasi dengan koma (delimiter). Tipe ini tersedia sejak MySQL versi 4.1. d. NDB Table (MySQL Cluster). Tersedia sejak MySQL versi 4.1.

e. Federated (External Tables). Tipe ini tersedia sejak MySQL versi 5.0.

Tipe-tipe Field (Kolom) MySQL

MySQL memiliki cukup banyak tipe data untuk field (kolom) tabel. Tipe field (kolom) ini menentukan besar kecilnya ukuran suatu tabel. Tipe field di MySQL setidaknya terbagi menjadi beberapa kelompok, yaitu numerik, string, date-and-time, dan kelompok himpunan (set dan enum). Masing-masing tipe field memiliki batasan lebar dan ukurannya.

Tipe Numeric

Tipe data numerik digunakan untuk menyimpan data numeric (angka). Ciri utama data numeric adalah suatu data yang memungkinkan untuk dikenai operasi aritmatika seperti pertambahan, pengurangan, perkalian dan pembagian. Berikut ini tipe field (kolom) di MySQL yang termasuk ke dalam kelompok tipe

(32)

2. SMALLINT

Penggunaan : digunakan untuk menyimpan data bilangan bulat positif

dan negatif.

Jangkauan : -32.768 s/d 32.767

Ukuran : 2 byte (16 bit).

3. MEDIUMINT

Penggunaan : digunakan untuk menyimpan data bilangan bulat positif

dan negatif.

Jangkauan : -8.388.608 s/d 8.388.607

Ukuran : 3 byte (24 bit).

4. INT

Penggunaan : digunakan untuk menyimpan data bilangan bulat positif

dan negatif.

Jangkauan : -2.147.483.648 s/d 2.147.483.647

Ukuran : 4 byte (32 bit).

5. BIGINT

Penggunaan : digunakan untuk menyimpan data bilangan bulat positif

dan negatif.

Jangkauan : ± 9,22 x 1018

Ukuran : 8 byte (64 bit).

6. FLOAT

Penggunaan : digunakan untuk menyimpan data bilangan pecahan positif dan negatif presisi tunggal.

Jangkauan : -3.402823466E+38 s/d -1.175494351E-38, 0, dan

1.175494351E-38 s/d 3.402823466E+38.

Ukuran : 4 byte (32 bit).

7. DOUBLE

Penggunaan : digunakan untuk menyimpan data bilangan pecahan positif dan negatif presisi ganda.

(33)

8. REAL

Merupakan sinonim dari DOUBLE.

9. DECIMAL

Penggunaan : digunakan untuk menyimpan data bilangan pecahan positif dan negatif.

Jangkauan : -1.79...E+308 s/d -2.22...E-308, 0, dan 2.22...E-308 s/d 1.79...E+308.

Ukuran : 8 byte (64 bit).

10.NUMERIC

Merupakan sinonim dari DECIMAL.

Tipe Date dan Time

Tipe data date dan time digunakan untuk menyimpan data tanggal dan waktu. Berikut ini tipe field (kolom) di MySQL yang termasuk ke dalam kelompok tipe date dan time:

11.DATE

Penggunaan : digunakan untuk menyimpan data tanggal.

Jangkauan : 1000-01-01 s/d 9999-12-31 (YYYY-MM-DD)

Ukuran : 3 byte.

12.TIME

Penggunaan : digunakan untuk menyimpan data waktu.

Jangkauan : -838:59:59 s/d +838:59:59 (HH:MM:SS)

(34)

Tipe String (Text)

Tipe data string digunakan untuk menyimpan data string (text). Ciri utama data string adalah suatu data yang memungkinkan untuk dikenai operasi aritmatika seperti pertambahan, pengurangan, perkalian dan pembagian. Berikut ini tipe field (kolom) di MySQL yang termasuk ke dalam kelompok tipe string:

15.CHAR

Penggunaan : digunakan untuk menyimpan data string ukuran tetap.

Jangkauan : 0 s/d 255 karakter

16.VARCHAR

Penggunaan : digunakan untuk menyimpan data string ukuran dinamis.

Jangkauan : 0 s/d 255 karakter (versi 4.1), 0 s/d 65.535 (versi 5.0.3)

17.TINYTEXT

Penggunaan : digunakan untuk menyimpan data text.

Jangkauan : 0 s/d 255 karakter (versi 4.1), 0 s/d 65.535 (versi 5.0.3)

18.TEXT

Penggunaan : digunakan untuk menyimpan data text.

Jangkauan : 0 s/d 65.535 (216 - 1) karakter

19.MEDIUMTEXT

Penggunaan : digunakan untuk menyimpan data text.

Jangkauan : 0 s/d 224 - 1 karakter

20.LONGTEXT

Penggunaan : digunakan untuk menyimpan data text.

(35)

merupakan singkatan dari Binary Large Object. Berikut ini tipe field (kolom) di MySQL yang termasuk ke dalam kelompok tipe blob:

21.BIT (sejak versi 5.0.3)

Penggunaan : digunakan untuk menyimpan data biner.

Jangkauan : 64 digit biner

22.TINYBLOB

Penggunaan : digunakan untuk menyimpan data biner.

Jangkauan : 255 byte

23.BLOB

Penggunaan : digunakan untuk menyimpan data biner.

Jangkauan : 216 - 1 byte

24.MEDIUMBLOB

Penggunaan : digunakan untuk menyimpan data biner.

Jangkauan : 224 - 1 byte

25.LONGBLOB

Penggunaan : digunakan untuk menyimpan data biner.

Jangkauan : 232 - 1 byte

Tipe Data yang Lain

Selain tipe data di atas, MySQL juga menyediakan tipe data yang lain. Tipe data di MySQL mungkin akan terus bertambah seiring dengan perkembangan versi MySQL. Berikut ini beberapa tipe data tambahan MySQL:

(36)

Merancang Database yang Baik

Seperti telah disebutkan sebelumnya, bahwa rancangan database menentukan suatu aplikasi efektif atau tidak, efisien atau tidak, baik atau tidak. Pembahasan mengenai bagaimana merancang database yang baik tentunya sangat panjang. Kita dapat mencari referensi terkait dengan perancangan database.

Beberapa Aturan Merancang Database yang Baik.

a. Tabel dalam database tidak boleh mengandung record (data) ganda, atau dengan kata lain tidak boleh ada redudancy data. Jika terdapat data yang sama, maka perlu dilihat kembali rancangan tabelnya.

b. Setiap tabel dalam database, harus memiliki field (kolom) yang unik. Field ini disebut sebagai Primary Key.

c. Tabel harus sudah normal.

d. Besar atau ukuran database hendaknya dibuat seminimal mungkin. Hal ini ditentukan oleh pemilihan tipe data yang tepat.

e. Merancang database hendaknya memperhatikan apakah rancangan dapat menampung data (record) sesuai yang dibutuhkan oleh aplikasi.

Tips Penamaan Identifier.

a. Penamaan identifier (database, tabel, kolom) di MySQL bersifat case-sensitive. Penamaan identifier hendaknya konsisten untuk semua tabel dalam suatu database. Kita dapat menggunakan model lower-case, UPPER-CASE, camelCase dll.

b. Nama database, tabel dan kolom maksimal 64 karakter.

c. Hindari penggunaan karakter khusus, seperti üàû, karena bisa bermasalah dalam sistem operasi yang lain.

d. Pilih nama untuk field (kolom) yang mencerminkan isi dari data yang disimpan.

(37)

Bab 4

Dasar-dasar SQL

™ Pendahuluan

™ Perintah DDL

™ Perintah DML

Pendahuluan

SQL merupakan singkatan dari Structured Query Language. SQL atau juga sering disebut sebagai query merupakan suatu bahasa (language) yang digunakan untuk mengakses database. SQL dikenalkan pertama kali dalam IBM pada tahun 1970 dan sebuah standar ISO dan ANSII ditetapkan untuk SQL. Standar ini tidak tergantung pada mesin yang digunakan (IBM, Microsoft atau Oracle). Hampir semua software database mengenal atau mengerti SQL. Jadi, perintah SQL pada semua software database hampir sama.

Terdapat 3 (tiga) jenis perintah SQL, yaitu : 1. DDL atau Data Definition Language

DDL merupakan perintah SQL yang berhubungan dengan pendefinisian suatu struktur database, dalam hal ini database dan table. Beberapa perintah dasar yang termasuk DDL ini antara lain :

ƒ CREATE

ƒ ALTER

ƒ RENAME

ƒ DROP

(38)

3. DCL atau Data Control Language

DCL merupakan perintah SQL yang berhubungan dengan manipulasi user dan hak akses (priviledges). Perintah SQL yang termasuk dalam DCL antara lain :

ƒ GRANT

ƒ REVOKE

Membuat, Menampilkan, Membuka dan Menghapus Database

Membuat Database

Sintaks umum SQL untuk membuat suatu database adalah sebagai berikut :

CREATE DATABASE [IF NOT EXISTS] nama_database;

Bentuk perintah di atas akan membuat sebuah database baru dengan nama

nama_database

. Aturan penamaan sebuah database sama seperti aturan penamaan sebuah variabel, dimana secara umum nama database boleh terdiri dari huruf, angka dan under-score (_). Jika database yang akan dibuat sudah ada, maka akan muncul pesan error. Namun jika ingin otomatis menghapus database yang lama jika sudah ada, aktifkan option

IF NOT EXISTS.

Berikut ini contoh perintah untuk membuat database baru dengan nama “penjualan” :

CREATE DATABASE penjualan;

Jika query di atas berhasil dieksekusi dan database berhasil dibuat, maka akan ditampilkan pesan kurang lebih sebagai berikut :

Query OK, 1 row affected (0.02 sec)

Menampilkan Database

Untuk melihat database yang baru saja dibuat atau yang sudah ada, dapat menggunakan perintah sebagai berikut :

(39)

+---+

| Database |

+---+

| penjualan |

| mysql |

| test |

+---+

3 rows in set (0.02 sec)

Membuka Database

Sebelum melakukan manipulasi tabel dan record yang berada di dalamnya, kita harus membuka atau mengaktifkan databasenya terlebih dahulu. Untuk membuka database “penjualan”, berikut ini querynya :

USE penjualan;

Jika perintah atau query di atas berhasil, maka akan ditampilkan pesan sebagai berikut :

Database changed

Menghapus Database

Untuk menghapus suatu database, sintaks umumnya adalah sbb :

DROP DATABASE [IF EXISTS] nama_database;

Bentuk perintah di atas akan menghapus database dengan nama

nama_database

. Jika databasenya ada maka database dan juga seluruh tabel di dalamnya akan dihapus. Jadi berhati-hatilah dengan perintah ini! Jika nama database yang akan dihapus tidak ditemukan, maka akan ditampilkan pesan

(40)

Membuat, Mengubah dan Menghapus

Table

Membuat Tabel Baru

Bentuk umum SQL untuk membuat suatu table secara sederhana sebagai berikut :

CREATE TABLE nama_tabel (

field1 tipe(panjang),

field2 tipe(panjang),

...

fieldn tipe(panjang),

PRIMARY KEY (field_key)

);

Bentuk umum di atas merupakan bentuk umum pembuatan tabel yang sudah disederhanakan. Penamaan tabel dan field memiliki aturan yang sama dengan penamaan database.

Sebagai contoh, kita akan membuat tabel baru dengan struktur sebagai berikut :

Nama tabel : pelanggan

No Nama Field Tipe Panjang

1 id_pelanggan * Varchar 5

2 nm_pelanggan Varchar 30

3 alamat Text -

4 telepon Varchar 20

5 email Varchar 50

Untuk membuat tabel tersebut di atas, query atau perintah SQL-nya adalah sebagai berikut :

CREATE TABLE pelanggan (

id_pelanggan varchar(5) NOT NULL,

nm_pelanggan varchar(30) NOT NULL,

alamat text,

telepon varchar (20),

email varchar (50),

(41)

Jika query untuk membuat tabel di atas berhasil dijalankan, maka akan ditampilkan pesan sebagai berikut :

Query OK, 0 rows affected (0.16 sec)

Pada perintah di atas, beberapa hal yang perlu diperhatikan :

ƒ CREATE TABLE merupakan perintah dasar dari pembuatan table.

ƒ pelanggan merupakan nama tabel yang akan dibuat.

ƒ id_pelanggan, nm_pelanggan, alamat, telepon dan email merupakan nama field.

ƒ varchar dan text merupakan tipe data dari field

ƒ NOT NULL merupakan option untuk menyatakan bahwa suatu field tidak boleh kosong.

ƒ PRIMARY KEY merupakan perintah untuk menentukan field mana yang akan dijadikan primary key pada tabel.

ƒ 5, 10, 30 dan 50 di belakang tipe data merupakan panjang maksimal dari suatu field.

ƒ Untuk tipe data date dan text (juga date dan blob) panjang karakter maksimalnya tidak perlu ditentukan.

ƒ Jangan lupa akhiri perintah dengan titik-koma (;)

Selanjutnya untuk melihat tabel mhs sudah benar-benar sudah ada atau belum, ketikkan perintah berikut ini :

SHOW TABLES;

Perintah di atas akan menampilkan seluruh tabel yang sudah ada dalam suatu database. Contoh hasil dari perintah di atas adalah sebagai berikut :

+---+

| Tables_in_penjualan |

(42)

DESC merupakan singkatan dari DESCRIBE (dalam query bisa ditulis lengkap atau hanya 4 karakter pertama) dan pelanggan adalah nama tabel yang akan dilihat strukturnya. Dari perintah di atas, akan ditampilkan struktur tabel

pelanggan sebagai berikut :

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id_pelanggan | varchar(5) | NO | PRI | | | | nm_pelanggan | varchar(30) | NO | | | | | alamat | text | YES | | NULL | | | telepon | varchar(20) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | +---+---+---+---+---+---+ 5 rows in set (0.00 sec)

Dari struktur tabel mhs yang ditampilkan di atas, dapat diketahui bahwa :

ƒ Terdapat 5 (lima) field dengan tipe masing-masing.

ƒ Primary Key dari tabel pelanggan adalah id_pelanggan. Lihat kolom Key

pada field id_pelanggan.

ƒ Untuk field id_pelanggan dan nm_pelanggan defaultnya tidak boleh kosong. Lihatlah kolom Null dan Default pada field id_pelanggan dan nm_pelanggan.

ƒ Untuk field alamat, telepon dan email default-nya boleh kosong. Lihatlah kolom Null dan Default pada field alamat dan telepon.

Mengubah Struktur Table dengan ALTER

Untuk mengubah struktur suatu tabel, bentuk umum perintah SQL-nya sebagai berikut :

ALTER TABLE nama_tabel alter_options;

dimana :

ƒ

ALTER TABLE

merupakan perintah dasar untuk mengubah tabel.

ƒ

nama_tabel

merupakan nama tabel yang akan diubah strukturnya.

ƒ

alter_options

merupakan pilihan perubahan tabel. Option yang bisa digunakan, beberapa di antaranya sebagai berikut :

(43)

Option ini digunakan untuk menambahkan index dengan nama “nama_index” pada tabel.

»

ADD PRIMARY KEY (field_kunci)

Option untuk menambahkan primary key pada tabel

»

CHANGE field_yang_diubah definisi_field_baru

Option untuk mengubah field_yang_diubah menjadi definisi_field_baru

»

MODIFY definisi_field

Option untuk mengubah suatu field menjadi definisi_field

»

DROP nama_field

Option untuk menghapus field nama_field

»

RENAME TO nama_tabel_baru

Option untuk mengganti nama tabel

Beberapa contoh variasi perintah ALTER untuk mengubah struktur suatu tabel antara lain :

1. Menambahkan field “tgllahir” ke tabel pelanggan

ALTER TABLE pelanggan ADD tgllahir date NOT NULL;

2. Menambahkan primary key pada suatu tabel

ALTER TABLE pelanggan ADD PRIMARY KEY(id_pelanggan);

3. Mengubah tipe field tgllahir menjadi varchar dalam tabel pelanggan

ALTER TABLE pelanggan MODIFY tgllahir varchar(8) NOT

NULL;

(44)

Perintah di atas akan mengubah tabel pelanggan menjadi plg dan sebaliknya.

Menghapus Tabel

Untuk menghapus sebuah tabel, bentuk umum dari perintah SQL adalah sebagai berikut :

DROP TABLE nama_tabel;

Contohnya kita akan menghapus tabel dengan nama “pelanggan” maka perintah SQL-nya adalah :

DROP TABLE pelanggan;

Menambah Record dengan INSERT

Bentuk umum perintah SQL untuk menambahkan record atau data ke dalam suatu tabel adalah sebagai berikut :

INSERT INTO nama_tabel VALUES (‘nilai1’,’nilai2’,...);

atau dapat dengan bentuk sebagai berikut :

INSERT INTO nama_tabel(field1,field2,...)

VALUES (‘nilai1’,’nilai2’,...);

atau dapat juga dengan bentuk sebagai berikut :

INSERT INTO nama_tabel

SET field1=’nilai1’, field2=’nilai2’,...;

Sebagai contoh, kita akan menambahkan sebuah record ke dalam tabel

pelanggan yang telah kita buat sebelumnya. Berikut ini perintah SQL untuk menambahkan sebuah record ke dalam tabel pelanggan :

(45)

Query OK, 1 row affected (0.00 sec)

Setelah perintah SQL di atas berhasil dieksekusi, maka record atau data dalam tabel pelanggan akan bertambah. Jalankan perintah berikut ini untuk melihat isi tabel pelanggan !

SELECT * FROM pelanggan;

Dan berikut ini hasil dari perintah SQL di atas :

+---+---+---+---+---+

| id_pelanggan | nm_pelanggan | alamat | telepon | email |

+---+---+---+---+---+

| P0001 | Achmad Solichin | Jakarta Selatan | 0217327762 | |

+---+---+---+---+---+

1 row in set (0.00 sec)

Mengedit Record dengan UPDATE

Proses update bisa sewaktu-waktu dilakukan jika terdapat data atau record dalam suatu tabel yang perlu diperbaiki. Proses update ini tidak menambahkan data (record) baru, tetapi memperbaiki data yang lama. Perubahan yang terjadi dalam proses update bersifat permanen, artinya setelah perintah dijalankan tidak dapat di-cancel (undo).

Bentuk umum perintah SQL untuk mengedit suatu record atau data dari suatu tabel adalah sebagai berikut :

(46)

dari beberapa field sekaligus, gunakan koma (,) untuk memisahkan masing-masing field.

ƒ Perintah

WHERE

diikuti oleh kondisi tertentu yang menentukan record mana yang akan diedit (diubah). Perintah

WHERE

ini boleh ada boleh juga tidak. Jika

WHERE

tidak ditambahkan pada perintah update maka semua record dalam tabel bersangkutan akan berubah.

Perhatikan beberapa contoh perintah UPDATE tabel pelanggan berikut ini !

1. Mengubah alamat menjadi “Tangerang” untuk pelanggan yang mempunyai id ‘P0001’

UPDATE pelanggan SET alamat='Tangerang' WHERE

id_pelanggan='P0001';

Dan jika query di atas berhasil dieksekusi maka akan ditampilkan hasil sebagai berikut :

Query OK, 1 row affected (0.27 sec)

Rows matched: 1 Changed: 1 Warnings: 0

2. Mengubah email menjadi “” dan alamat menjadi “Bandung” untuk pelanggan yang mempunyai id_pelanggan ‘P0002’

UPDATE pelanggan SET email='',

alamat='Bandung' WHERE id_pelanggan='P0002';

Menghapus Record dengan DELETE

Proses delete dilakukan jika terdapat data atau record dalam suatu tabel yang perlu dihapus atau dihilangkan. Perubahan yang terjadi dalam proses delete bersifat permanen, artinya setelah perintah dijalankan tidak dapat di-cancel (undo). Jadi berhati-hatilah dengan perintah delete !

(47)

Pada perintah untuk delete di atas :

ƒ

DELETE FROM

merupakan perintah dasar untuk menghapus suatu record dari tabel.

ƒ

nama_tabel

merupakan nama tabel yang akan dihapus recordnya.

ƒ Perintah

WHERE

diikuti oleh kondisi tertentu yang menentukan record mana yang akan dihapus (didelete). Perintah

WHERE

ini boleh ada boleh juga tidak. Namun demikian, jika

WHERE

tidak ditambahkan pada perintah delete maka semua record dalam tabel bersangkutan akan terhapus. Jadi jangan lupa menambahkan WHERE jika kita tidak bermaksud mengosongkan tabel

Perhatikan beberapa contoh perintah DELETE dari tabel pelanggan berikut ini !

1. Menghapus data pelanggan yang mempunyai id_pelanggan P0005

DELETE FROM pelanggan WHERE id_pelanggan='P0005';

Dan jika query di atas berhasil dieksekusi dan record yang akan dihapus ada, maka akan ditampilkan hasil sebagai berikut :

Query OK, 1 row affected (0.11 sec)

2. Menghapus semua pelanggan yang beralamat di “Bandung”

DELETE FROM pelanggan WHERE alamat='Bandung';

Menampilkan Record dengan SELECT

Perintah SELECT digunakan untuk menampilkan sesuatu. Sesuatu di sini bisa berupa sejumlah data dari tabel dan bisa juga berupa suatu ekspresi.

(48)

Perhatikan beberapa contoh perintah SELECT dari tabel pelanggan berikut ini !

1. Menampilkan seluruh data atau record (*) dari tabel pelanggan

SELECT * FROM pelanggan;

Dan jika query di atas berhasil dieksekusi maka akan ditampilkan hasil sebagai berikut :

+---+---+---+---+---+

| id_pelanggan | nm_pelanggan | alamat | telepon | email |

+---+---+---+---+---+

| P0001 | Achmad Solichin | Jakarta Selatan | 0217327762 | |

| P0002 | Agus Rahman | Jl H Said, Tangerang | 0217323234 | |

| P0003 | Doni Damara | Jl. Raya Cimone, Jakarta Selatan | 0214394379 | |

| P0004 | Reni Arianti | Jl. Raya Dago No 90 | 0313493583 | |

| P0005 | Dewi Aminah | Jl Arjuna No 40 | 0314584883 | |

| P0006 | Chotimatul M | RT 04 RW 02 Kel Pinang sari | 0219249349 | |

+---+---+---+---+---+

6 rows in set (0.00 sec)

2. Menampilkan field id_pelanggan dan nm_pelanggan dari seluruh pelanggan dalam tabel pelanggan

SELECT id_pelanggan, nm_pelanggan FROM pelanggan;

Jika query di atas berhasil dieksekusi maka akan ditampilkan hasil sebagai berikut :

+---+---+ | id_pelanggan | nm_pelanggan | +---+---+ | P0001 | Achmad Solichin | | P0002 | Agus Rahman | | P0003 | Doni Damara |

(49)

3. Menampilkan id, nama dan alamat dari data pelanggan yang mempunyai id

P0006

SELECT id_pelanggan, nm_pelanggan, alamat

FROM pelanggan WHERE id_pelanggan = 'P0006';

Hasil query di atas adalah sbb :

+---+---+---+ | id_pelanggan | nm_pelanggan | alamat | +---+---+---+ | P0006 | Chotimatul M | RT 04 RW 02 Kel Pinang sari | +---+---+---+ 1 row in set (0.00 sec)

4. Menampilkan id, nama dan email data semua pelanggan yang mempunyai email di yahoo

SELECT id_pelanggan, nm_pelanggan, email

FROM pelanggan WHERE email LIKE '%yahoo%';

Hasil query di atas adalah sbb :

+---+---+---+ | id_pelanggan | nm_pelanggan | email | +---+---+---+ | P0002 | Agus Rahman | | | P0003 | Doni Damara | | | P0004 | Reni Arianti | | | P0006 | Chotimatul M | | +---+---+---+ 4 rows in set (0.00 sec)

Berikut ini operator perbandingan yang dapat digunakan untuk membandingkan dua buah nilai dalam MySQL :

(50)

ƒ Operator <=, akan bernilai TRUE jika nilai yang pertama lebih kecil atau sama dengan nilai kedua.

5. Menampilkan data semua pelanggan yang beralamat di Jakarta Selatan dan mempunyai email di gmail.

SELECT id_pelanggan, nm_pelanggan, alamat, email

FROM pelanggan WHERE alamat = 'Jakarta Selatan' &&

email LIKE '%gmail.com';

Hasil query di atas adalah sbb :

+---+---+---+---+ | id_pelanggan | nm_pelanggan | alamat | email | +---+---+---+---+ | P0001 | Achmad Solichin | Jakarta Selatan | | +---+---+---+---+ 1 row in set (0.00 sec)

Berikut ini operator penghubung yang dapat digunakan untuk menghubungkan antara dua kondisi dalam MySQL :

ƒ Operator && atau AND, akan menghubungkan dua kondisi dimana akan bernilai TRUE jika kedua kondisi bernilai TRUE.

ƒ Operator || atau OR, akan menghubungkan dua kondisi dimana akan bernilai TRUE jika salah satu atau kedua kondisi bernilai TRUE.

ƒ Operator !, akan me-reverse nilai suatu kondisi logika.

6. Menampilkan semua data pelanggan secara urut berdasarkan nama pelanggan dengan perintah ORDER BY

SELECT id_pelanggan, nm_pelanggan

FROM pelanggan ORDER BY nm_pelanggan;

Hasil query di atas adalah sbb :

+---+---+ | id_pelanggan | nm_pelanggan | +---+---+ | P0001 | Achmad Solichin | | P0002 | Agus Rahman |

(51)

7. Menampilkan semua data pelanggan secara urut berdasarkan nama pelanggan secara DESCENDING

SELECT id_pelanggan, nm_pelanggan

FROM pelanggan ORDER BY nm_pelanggan DESC;

Hasil query di atas adalah sbb :

+---+---+ | id_pelanggan | nm_pelanggan | +---+---+ | P0004 | Reni Arianti | | P0003 | Doni Damara | | P0005 | Dewi Aminah | | P0006 | Chotimatul M | | P0002 | Agus Rahman | | P0001 | Achmad Solichin | +---+---+ 6 rows in set (0.00 sec)

8. Menampilkan 3 record (data) pertama dari tabel pelanggan secara urut berdasarkan nama pelanggan dengan LIMIT

SELECT id_pelanggan, nm_pelanggan

FROM pelanggan ORDER BY nm_pelanggan LIMIT 0,3;

Hasil query di atas adalah sbb :

+---+---+ | id_pelanggan | nm_pelanggan | +---+---+ | P0001 | Achmad Solichin | | P0002 | Agus Rahman | | P0006 | Chotimatul M | +---+---+ 3 rows in set (0.00 sec)

(52)

Hasil query di atas adalah sbb :

+---+ | count(*) | +---+ | 6 | +---+

(53)

Bab 5

Fungsi-fungsi MySQL

™ Fungsi String

™ Fungsi Tanggal dan Waktu

™ Fungsi Numerik

™ Fungsi Lainnya

Fungsi String

MySQL memiliki banyak sekali fungsi yang berhubungan dengan operasi String. Berikut ini beberapa fungsi string yang disediakan MySQL.

CONCAT (str1, str2, ...)

Fungsi ini digunakan untuk menggabungkan dua atau lebih string (kolom). Sebagai contoh, misalnya akan menggabungkan kolom alamat dan

telepon pada tabel pelanggan menjadi sebuah kolom:

SELECT nm_pelanggan, CONCAT(alamat,' ',telepon)

FROM pelanggan;

Hasil keluarannya:

+---+---+ | nm_pelanggan | concat(alamat,' ',telepon) | +---+---+ | Achmad Solichin | Jakarta Selatan 0217327762 | | Agus Rahman | Jl H Said, Tangerang 0217323234 | | Doni Damara | Jl. Raya Cimone, Jakarta Selatan 0214394379 | | Reni Arianti | Jl. Raya Dago No 90 0313493583 | | Dewi Aminah | Jl Arjuna No 40 0314584883 | | Chotimatul M | RT 04 RW 02 Kel Pinang sari 0219249349 |

(54)

Adi, Ida, Edi

SUBSTR (string, awal, panjang) SUBSTRING (string, awal, panjang)

SUBSTRING (string FROM awal FOR panjang) MID (string, awal, panjang)

Fungsi ini digunakan untuk mengambil atau memotong string dimulai dari karakter awal sebanyak panjang karakter. Sebagai catatan bahwa di MySQL, index string dimulai dengan 1, bukan 0. Contoh:

SELECT SUBSTRING ('Budi Luhur',1,4);

Hasil keluarannya:

Budi

LENGTH (string)

OCTET_LENGTH (string) CHAR_LENGTH (string)

CHARACTER_LENGTH (string)

Fungsi ini digunakan untuk menghitung panjang suatu string. Contoh:

SELECT LENGTH ('Budi Luhur');

Hasil keluarannya:

5

LEFT (string, panjang)

Fungsi ini digunakan untuk memotong string dari sebelah kiri sebanyak

panjang karakter. Contoh:

SELECT LEFT ('Budi Luhur', 4);

Hasil keluarannya:

Budi

(55)

Hasil keluarannya:

Uhur

LTRIM (string)

Fungsi ini digunakan untuk menghilangkan spasi di awal string (kiri). Contoh:

SELECT LTRIM (' Budi Luhur');

Hasil keluarannya:

Budi Luhur

RTRIM (string)

Fungsi ini digunakan untuk menghilangkan spasi di akhir string (kanan). Contoh:

SELECT RTRIM ('Budi Luhur ');

Hasil keluarannya:

Budi Luhur

TRIM (string)

Fungsi ini digunakan untuk menghilangkan spasi di awal dan akhir string (kiri dan kanan). Contoh:

(56)

SELECT REPLACE ('www.mysql.com', 'w', 'x' );

Hasil keluarannya:

xxx.mysql.com

REPEAT (string, jumlah)

Fungsi ini digunakan untuk menduplikasi suatu string sebanyak jumlah. Contoh:

SELECT REPEAT ('Mont', 3);

Hasil keluarannya:

MontMontMont

REVERSE (string)

Fungsi ini digunakan untuk membalik string. Contoh:

SELECT REVERSE ('mysql.com');

Hasil keluarannya:

moc.lqsym

LCASE (string) LOWER (string)

Fungsi ini digunakan untuk mengubah string menjadi huruf kecil (lower-case). Contoh:

SELECT LOWER ('MySQL');

Hasil keluarannya:

(57)

UPPER (string)

Fungsi ini digunakan untuk mengubah string menjadi huruf kapital (upper-case). Contoh:

SELECT UPPER ('mysql');

Hasil keluarannya:

MYSQL

Fungsi Tanggal dan Waktu

Selain fungsi string, MySQL juga memiliki fungsi-fungsi yang berhubungan dengan operasi tanggal dan waktu (date and time). Berikut ini beberapa fungsi tanggal dan waktu yang disediakan MySQL.

NOW () SYSDATE()

Fungsi ini digunakan untuk mendapatkan tanggal dan waktu sistem sekarang Contoh:

SELECT NOW();

Hasil keluarannya:

2008-02-19 20:00:31

MONTH (tanggal)

Fungsi ini digunakan untuk mendapatkan urutan bulan (integer) dari suatu tanggal yang diberikan dalam setahun, dimana 1=Januari, 2=Februari, dst. Contoh:

SELECT MONTH (‘1982-06-05’);

Hasil keluarannya:

(58)

YEAR (tanggal)

Fungsi ini digunakan untuk mendapatkan bilangan tahun dari suatu tanggal yang diberikan. Contoh:

SELECT YEAR (now());

Hasil keluarannya:

2008

HOUR (waktu)

Fungsi ini digunakan untuk mendapatkan bilangan jam dari suatu parameter waktu yang diberikan. Contoh:

SELECT HOUR (now());

Hasil keluarannya:

20

MINUTE (waktu)

Fungsi ini digunakan untuk mendapatkan bilangan menit dari suatu parameter waktu yang diberikan. Contoh:

SELECT MINUTE (now());

Hasil keluarannya:

8

SECOND (waktu)

Fungsi ini digunakan untuk mendapatkan bilangan detik dari suatu waktu yang diberikan. Contoh:

(59)

53

DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type)

Fungsi-fungsi diatas digunakan untuk menambah suatu tanggal. Contoh:

SELECT DATE_ADD(now(), INTERVAL 1 DAY);

Hasil keluarannya:

2008-02-20 20:12:17

DATE_FORMAT(date, format)

Fungsi ini digunakan untuk mem-format tampilan tanggal.

TIME_FORMAT(time, format)

Fungsi ini digunakan untuk mem-format tampilan waktu.

Berikut ini format tampilan tanggal dan waktu, dan penggunaannya: %M : Nama bulan (January ... December)

%W : Nama hari dalam seminggu (Sunday...Saturday) %D : Urutan hari dalam sebulan

%Y : Tahun, 4 digit %y : Tahun, 2 digit

(60)

20-02-2008 20:12:17

Fungsi Numerik

MySQL memiliki fungsi-fungsi yang berhubungan dengan operasi numerik, berikut ini contohnya:

OPERASI ARITMATIKA

Operasi aritmatika dalam MySQL terdiri dari: + : Pertambahan

- : Pengurangan * : Perkalian

/ : Pembagian

% : Sisa hasil bagi, modulus

Contoh penggunaan:

SELECT 10+20;

Hasil keluarannya:

30

SELECT 10/3;

Hasil keluarannya:

3.3333

ABS(x)

Fungsi digunakan untuk mengambil nilai absolut dari bilangan x. Contoh:

(61)

20

MOD(m, n)

Fungsi digunakan untuk mengoperasikan m modulus n. Contoh:

SELECT MOD(10,3);

Hasil keluarannya:

1

FLOOR(x)

Fungsi digunakan untuk mengambil nilai integer terbesar yang tidak lebih besar dari x. Contoh:

SELECT FLOOR(10.3576);

Hasil keluarannya:

10

CEILING(x)

Fungsi digunakan untuk mengambil nilai integer terkecil yang tidak lebih kecil dari x. Contoh:

SELECT CEILING(10.3576);

Hasil keluarannya:

11

(62)

POW(x) POWER(x, n)

Fungsi digunakan untuk melakukan mengambil hasil pemangkatan dari

x

n. Contoh:

SELECT POW(2, 10);

Hasil keluarannya:

1024

RAND() RAND(x)

Fungsi digunakan untuk mengambil nilai random diantara 0 s/d 1.0. Contoh:

SELECT RAND();

Hasil keluarannya:

0.96589817662341

TRUNCATE(x, d)

Fungsi digunakan untuk memotong bilangan x sepanjang d tempat desimal. Contoh:

SELECT TRUNCATE(10.28372, 1);

Hasil keluarannya:

(63)

Fungsi Lainnya

Selain fungsi yang berhubungan dengan string, date-and-time, dan numerik MySQL juga memiliki fungsi-fungsi khusus, diantaranya :

GREATEST(nil1, nil2, ...)

Fungsi digunakan untuk mengambil nilai terbesar dari suatu kumpulan nilai. Contoh:

SELECT GREATEST(2,5,2,6,3,7,4,2,5,1);

Hasil keluarannya:

7

COUNT(range)

Fungsi digunakan untuk mengambil jumlah baris dari suatu query. Contoh:

SELECT COUNT(*) FROM pelanggan;

Hasil keluarannya:

5

(64)

MIN(range)

Fungsi digunakan untuk mengambil nilai terkecil dari suatu ekspresi (query). Contoh:

SELECT MIN(nilai) FROM nilai_ujian;

Hasil keluarannya:

40

SUM(range)

Fungsi digunakan untuk menjumlahkan total nilai dari suatu ekspresi (query). Contoh:

SELECT SUM(nilai) FROM nilai_ujian;

Hasil keluarannya:

450

AVG(range)

Fungsi digunakan untuk menghitung rata-rata nilai dari suatu ekspresi (query). Contoh:

SELECT AVG(nilai) FROM nilai_ujian;

Hasil keluarannya:

78

OPERASI BITWISE

Operasi bitwise dalam MySQL terdiri dari: | : Bitwise OR

& : Bitwise AND << : Shift Kiri >> : Shift Kanan

(65)

Hasil keluarannya:

6

DATABASE()

Fungsi digunakan untuk mengambil nama database yang sedang aktif (terbuka). Contoh:

SELECT DATABASE();

Hasil keluarannya:

Penjualan

USER()

SYSTEM_USER() SESSION_USER()

Fungsi digunakan untuk mengambil user yang sedang digunakan (aktif). Contoh:

SELECT USER();

Hasil keluarannya:

root@localhost

(66)

ENCODE(str, pass)

Fungsi digunakan untuk melakukan enkripsi suatu string str menggunakan password atau key pass. Contoh:

SELECT ENCODE('qwerty', 'password');

Hasil keluarannya:

┬♠

e|

DECODE(encripted_str, pass)

Fungsi digunakan untuk melakukan dekripsi suatu string encripted_str

menggunakan password atau key pass. Jika passwordnya benar, maka string aslinya akan benar. Contoh:

SELECT DECODE('câ

┬♠

e|', 'password');

Hasil keluarannya:

Qwerty

Contoh dengan password salah:

SELECT DECODE('câ

┬♠

e|', 'ngasal');

Hasil keluarannya:

Wk

Φ

PH:

MD5(str)

Fungsi digunakan untuk melakukan enkripsi suatu string str menggunakan metode md5. Fungsi ini juga tidak dapat didekripsi. Contoh:

SELECT MD5('qwerty');

Hasil keluarannya:

(67)

LAST_INSERT_ID()

Fungsi digunakan untuk mengambil id terakhir dalam proses insert dimana tabelnya mengandung field yang bersifat AUTO INCREMENT. Contoh:

SELECT LAST_INSERT_ID();

Hasil keluarannya:

231

VERSION()

Fungsi digunakan untuk mengambil versi MySQL yang digunakan. Contoh:

SELECT VERSION();

Hasil keluarannya:

(68)

Bagian 3

Perintah MySQL

Lanjutan

(69)

Bab 6

Perintah MySQL Lanjutan

™ Perintah SELECT dari Banyak Tabel

™ Pengelompokkan Hasil Query dengan GROUP BY

™ HAVING

™ SubSELECT

™ Menampilkan Record secara Random

™ Transaksi

Pada bab ini akan dijelaskan beberapa perintah SQL lanjutan yang lebih kompleks seperti join antar tabel, grouping, sub select, random search dan transaksi (commit-and-roolback). Untuk mempermudah penjelasan, maka semua contoh yang disajikan di bab ini mengacu pada pemodelan data konseptual

Sistem Pemesanan (Penjualan) Barang sbb:

(70)

| nm_pelanggan | varchar(40) | NO | | | | | alamat | text | NO | | | | | telepon | varchar(20) | NO | | | | | email | varchar(50) | NO | | | | +---+---+---+---+---+---+ Tabel pesan

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id_pesan | int(5) | NO | PRI | NULL | auto_increment | | id_pelanggan | varchar(5) | NO | MUL | | | | tgl_pesan | date | NO | | | | +---+---+---+---+---+---+ Tabel produk

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id_produk | varchar(5) | NO | PRI | | | | nm_produk | varchar(30) | NO | | | | | satuan | varchar(10) | NO | | | | | harga | decimal(10,0) | NO | | 0 | | | stock | int(3) | NO | | 0 | | +---+---+---+---+---+---+ Tabel detil_pesan

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id_pesan | int(5) | NO | PRI | | | | id_produk | varchar(5) | NO | PRI | | | | jumlah | int(5) | NO | | 0 | | | harga | decimal(10,0) | NO | | 0 | | +---+---+---+---+---+---+ Tabel faktur

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id_faktur | int(5) | NO | PRI | NULL | auto_increment | | id_pesan | int(5) | NO | | | | | tgl_faktur | date | NO | | | | +---+---+---+---+---+---+ Tabel kuitansi

+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | id_kuitansi | int(5) | NO | PRI | NULL | auto_increment | | id_faktur | int(5) | NO | | | | | tgl_kuitansi | date | NO | | | | +---+---+---+---+---+---+

Berikut ini disajikan perintah SQL untuk membuat tabel-tabel di atas: /*Table structure for table detil_pesan */

DROP TABLE IF EXISTS detil_pesan; CREATE TABLE detil_pesan (

(71)

KEY id_pesan (id_pesan),

CONSTRAINT FK_detil_pesan FOREIGN KEY (id_produk) REFERENCES produk (id_produk),

CONSTRAINT FK_detil_pesan2 FOREIGN KEY (id_pesan) REFERENCES pesan (id_pesan)

) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table faktur */ DROP TABLE IF EXISTS faktur;

CREATE TABLE faktur (

id_faktur int(5) NOT NULL auto_increment, id_pesan int(5) NOT NULL,

tgl_faktur date NOT NULL, PRIMARY KEY (id_faktur), KEY id_pesan (id_pesan),

CONSTRAINT faktur_ibfk_1 FOREIGN KEY (id_pesan) REFERENCES pesan (id_pesan)

) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table kuitansi */ DROP TABLE IF EXISTS kuitansi;

CREATE TABLE kuitansi (

id_kuitansi int(5) NOT NULL auto_increment, id_faktur int(5) NOT NULL,

tgl_kuitansi date NOT NULL, PRIMARY KEY (id_kuitansi), KEY FK_kuitansi (id_faktur),

CONSTRAINT FK_kuitansi FOREIGN KEY (id_faktur) REFERENCES faktur (id_faktur)

) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table pelanggan */ DROP TABLE IF EXISTS pelanggan;

CREATE TABLE pelanggan (

id_pelanggan varchar(5) NOT NULL, nm_pelanggan varchar(40) NOT NULL, alamat text NOT NULL,

telepon varchar(20) NOT NULL, email varchar(50) NOT NULL, PRIMARY KEY (id_pelanggan)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

/*Table structure for table pesan */ DROP TABLE IF EXISTS pesan;

CREATE TABLE pesan (

id_pesan int(5) NOT NULL auto_increment, id_pelanggan varchar(5) NOT NULL,

(72)

harga decimal(10,0) NOT NULL default '0', stock int(3) NOT NULL default '0',

PRIMARY KEY (id_produk)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Selanjutnya, untuk memudahkan dalam pemberian contoh, isilah tabel-tabel diatas dengan record (data) secukupnya.

Perintah SELECT dari Banyak Tabel dengan JOIN

Di dalam suatu RDBMS tentunya sudah menjadi suatu kewajaran jika dalam satu database dapat terdiri dari beberapa tabel. Masing-masing tabel tersebut berhubungan satu sama lain atau dengan kata lain memiliki relasi. Relasi antar-tabel dapat berupa relasi 1-1, 1-M, atau M-N. Sebagai contoh terlihat pada gambar pemodelan data konseptual (class diagram) di atas. Tabel pelanggan

berhubungan dengan pesan, pesan dengan barang, dsb.

Pada praktisnya, terkadang kita juga memerlukan tampilan data yang tidak hanya berasal dari 1 (satu) tabel, namun bisa dari beberapa tabel sekaligus. Contohnya, dari class diagram diatas, kita ingin menampilkan nama pelanggan berikut transaksi yang pernah dilakukannya. Dari contoh tersebut, kita harus bisa menggabungkan minimal dua tabel, yaitu pelanggan dan pesan.

Untuk menggabungkan 2 (dua) atau lebih tabel, kita dapat menggunakan bentuk perintah JOIN.

Inner Join

Dengan inner join, tabel akan digabungkan dua arah, sehingga tidak ada data yang NULL di satu sisi. Sebagai contoh, kita akan menggabungkan tabel

pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi). Isi tabel pelanggan dan pesan adalah sebagai berikut :

Tabel pelanggan (hanya ditampilkan id, nama dan email).

(73)

| P0004 | Amin Riyadi | | +---+---+---+ Tabel pesan :

+---+---+---+ | id_pesan | id_pelanggan | tgl_pesan | +---+---+---+ | 1 | P0001 | 2008-02-02 | | 2 | P0002 | 2008-02-05 | | 3 | P0002 | 2008-02-10 | | 4 | P0004 | 2008-01-20 | | 5 | P0001 | 2007-12-14 | +---+---+---+

Cara 1 : Penggabungan dengan WHERE

Bentuk umum

SELECT tabel1.*, tabel2.* FROM tabel1, tabel2

WHERE tabel1.PK=tabel2.FK;

Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan:

SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan,

pesan.id_pesan, pesan.tgl_pesan

FROM pelanggan, pesan

WHERE pelanggan.id_pelanggan=pesan.id_pelanggan;

Hasilnya :

+---+---+---+---+ | id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan | +---+---+---+---+ | P0001 | Achmad Solichin | 1 | 2008-02-02 | | P0001 | Achmad Solichin | 5 | 2007-12-14 | | P0002 | Budianto | 2 | 2008-02-05 |

(74)

Cara 2 : Penggabungan dengan INNER JOIN

Bentuk umum

SELECT tabel1.*, tabel2.*

FROM tabel1 INNER JOIN tabel2

ON tabel1.PK=tabel2.FK;

Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan:

SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan,

pesan.id_pesan, pesan.tgl_pesan

FROM pelanggan INNER JOIN pesan

ON pelanggan.id_pelanggan=pesan.id_pelanggan;

Hasilnya :

+---+---+---+---+ | id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan | +---+---+---+---+ | P0001 | Achmad Solichin | 1 | 2008-02-02 | | P0001 | Achmad Solichin | 5 | 2007-12-14 | | P0002 | Budianto | 2 | 2008-02-05 | | P0002 | Budianto | 3 | 2008-02-10 | | P0004 | Amin Riyadi | 4 | 2008-01-20 | +---+---+---+---+

Outer Join

Dengan outer join, tabel akan digabungkan satu arah, sehingga memungkinkan ada data yang NULL (kosong) di satu sisi. Sebagai contoh, kita akan menggabungkan tabel pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi).

Outer Join terbagi menjadi 2 (dua) yaitu LEFT JOIN dan RIGHT. Berikut ini bentuk umum dan contohnya:

LEFT JOIN

Bentuk umum

(75)

SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan,

pesan.id_pesan, pesan.tgl_pesan

FROM pelanggan LEFT JOIN pesan

ON pelanggan.id_pelanggan=pesan.id_pelanggan;

Hasilnya :

+---+---+---+---+ | id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan | +---+---+---+---+ | P0001 | Achmad Solichin | 1 | 2008-02-02 | | P0001 | Achmad Solichin | 5 | 2007-12-14 | | P0002 | Budianto | 2 | 2008-02-05 | | P0002 | Budianto | 3 | 2008-02-10 | | P0003 | Hasan | NULL | NULL | | P0004 | Amin Riyadi | 4 | 2008-01-20 | +---+---+---+---+

Berbeda dengan hasil sebelumnya (inner join), penggunaan left join akan menampilkan juga data pelanggan dengan id P0003, walaupun pelanggan tersebut belum pernah bertransaksi. Dan pada kolom id_pesan dan tgl_pesan untuk pelanggan P0003 isinya NULL, artinya di tabel kanan (pesan) pelanggan tersebut tidak ada.

RIGHT JOIN

Bentuk umum

SELECT tabel1.*, tabel2.*

FROM tabel1 RIGHT JOIN tabel2

ON tabel1.PK=tabel2.FK;

Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan:

SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan,

pesan.id_pesan, pesan.tgl_pesan

(76)

+---+---+---+---+

Dengan right join, tabel yang menjadi acuan adalah tabel sebelah kanan (tabel pesan), jadi semua isi tabel pesan akan ditampilkan. Jika data pelanggan tidak ada di tabel pelanggan, maka isi tabel pesan tetap ditampilkan.

Menggabungkan Tiga Tabel

Untuk menggabungkan tiga tabel atau lebih, pada dasarnya sama dengan penggabungan 2 (dua) tabel. Sebagai contoh misalnya kita akan menampilkan barang-barang yang dipesan beserta nama barang dan harganya untuk pemesanan dengan nomor 1. Berikut ini perintah SQL-nya:

SELECT pesan.id_pesan, produk.id_produk, produk.nm_produk, detil_pesan.harga, detil_pesan.jumlah

FROM pesan, detil_pesan, produk

WHERE pesan.id_pesan=detil_pesan.id_pesan AND detil_pesan.id_produk=produk.id_produk

AND pesan.id_pesan='1'

Hasilnya :

+---+---+---+---+---+ | id_pesan | id_produk | nm_produk | harga | jumlah | +---+---+---+---+---+ | 1 | B0001 | Buku Tulis | 2700 | 2 | | 1 | B0003 | Penggaris | 3000 | 3 | | 1 | B0004 | Pensil | 2000 | 1 | +---+---+---+---+---+

Pengelompokkan Hasil Query dengan GROUP BY

Hasil query terkadang perlu dikelompokkan berdasarkan kriteria atau kondisi tertentu. Misalnya kita akan menampilkan jumlah barang yang dibeli untuk masing-masing transaksi (pemesanan).

Perhatikan perintah query berikut ini dan lihat hasilnya:

(77)

+---+---+---+ | id_pesan | tgl_pesan | jumlah | +---+---+---+ | 1 | 2008-02-02 | 2 | | 1 | 2008-02-02 | 3 | | 1 | 2008-02-02 | 1 | | 2 | 2008-02-05 | 1 | | 2 | 2008-02-05 | 5 | | 2 | 2008-02-05 | 1 | | 3 | 2008-02-10 | 5 | | 4 | 2008-01-20 | 10 | +---+---+---+

Jika kita perhatikan hasil perintah query di atas, kita akan mendapatkan jumlah barang yang terjadi untuk setiap transaksi, namun hasil tampilannya masih per-barang. Artinya jumlah yang ditampilkan masih berupa jumlah barang untuk masing-masing barang.

Agar jumlah barang ditampilkan per-transaksi (pemesanan), maka kita dapat menggunakan fungsi GROUP BY dan juga SUM untuk menjumlahkan jumlah barang. Berikut ini perintah query dengan group by dan count.

SELECT pesan.id_pesan, pesan.tgl_pesan,

SUM(detil_pesan.jumlah) as jumlah

FROM pesan, detil_pesan

WHERE pesan.id_pesan=detil_pesan.id_pesan

GROUP BY id_pesan;

Hasilnya :

+---+---+---+ | id_pesan | tgl_pesan | jumlah | +---+---+---+ | 1 | 2008-02-02 | 6 | | 2 | 2008-02-05 | 7 | | 3 | 2008-02-10 | 5 | | 4 | 2008-01-20 | 10 | +---+---+---+

(78)

+---+---+---+ | id_pesan | tgl_pesan | jumlah | +---+---+---+ | 1 | 2008-02-02 | 6 | | 2 | 2008-02-05 | 7 | | 3 | 2008-02-10 | 5 | | 4 | 2008-01-20 | 10 | | NULL | 2008-01-20 | 28 | +---+---+---+

HAVING

Perintah query berikut ini akan menampilkan jumlah item (jenis) barang untuk tiap transaksi.

SELECT pesan.id_pesan, COUNT(detil_pesan.id_produk) as

jumlah

FROM pesan, detil_pesan

WHERE pesan.id_pesan=detil_pesan.id_pesan

GROUP BY pesan.id_pesan

Hasilnya :

+---+---+ | id_pesan | jumlah | +---+---+ | 1 | 3 | | 2 | 3 | | 3 | 1 | | 4 | 1 | +---+---+

Dari hasil query di atas tampak bahwa ditampilkan jumlah item barang untuk semua transaksi. Selanjutnya bagaimana jika kita ingin hanya menampilkan data yang jumlah item barangnya lebih dari 2 (dua)? Mungkin kita langsung berfikir untuk menggunakan WHERE seperti perintah query sebagai berikut:

SELECT pesan.id_pesan, COUNT(detil_pesan.id_produk) as

jumlah

FROM pesan, detil_pesan

(79)

+---+---+ | id_pesan | jumlah | +---+---+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 1 | +---+---+

Hal tersebut terjadi karena kondisi dalam WHERE tidak dapat diterapkan pada fungsi agregrasi seperti COUNT, SUM, AVG dll.

Untuk menyeleksi suatu fungsi agregasi, kita tidak dapat menggunakan WHERE, namun kita dapat menggunakan HAVING. Berikut ini perintah query yang menggunakan HAVING:

SELECT pesan.id_pesan, COUNT(detil_pesan.id_produk) as

jumlah

FROM pesan, detil_pesan

WHERE pesan.id_pesan=detil_pesan.id_pesan

GROUP BY pesan.id_pesan

HAVING jumlah > 2

Lihat hasilnya sebagai berikut:

+---+---+ | id_pesan | jumlah | +---+---+ | 1 | 3 | | 2 | 3 | +---+---+

SubSELECT

Mulai versi 4.1, MySQL mendukung perintah query SubSELECT dimana memungkinkan untuk melakukan query di dalam query. Misalnya kita akan

(80)

SELECT ... FROM (SELECT ...) AS name WHERE ...;

Dan berikut ini beberapa contoh perintah query yang menggunakan SubSELECT.

• Menampilkan daftar pelanggan yang pernah melakukan transaksi (pemesanan).

SELECT id_pelanggan, nm_pelanggan

FROM pelanggan

WHERE id_pelanggan IN (SELECT id_pelanggan FROM

pesan);

Hasilnya sebagai berikut:

+---+---+ | id_pelanggan | nm_pelanggan | +---+---+ | P0001 | Achmad Solichin | | P0002 | Budianto | | P0004 | Amin Riyadi | +---+---+

• Menampilkan data pemesanan dengan jumlah barang terbanyak.

SELECT id_pesan, jumlah

FROM detil_pesan

WHERE jumlah = ( SELECT MAX(jumlah) FROM

detil_pesan);

Hasilnya sebagai berikut:

+---+---+ | id_pesan | jumlah | +---+---+ | 4 | 10 | +---+---+

Menampilkan Record secara Random

MySQL memiliki fungsi khusus yang dapat digunakan untuk menampilkan record secara acak (random). Seperti kita ketahui bahwa pada perintah SELECT

(81)

SELECT id_pelanggan, nm_pelanggan, email

FROM pelanggan ORDER BY RAND()

Salah satu hasilnya sebagai berikut:

+---+---+---+ | id_pelanggan | nm_pelanggan | email | +---+---+---+ | P0004 | Amin Riyadi | | | P0001 | Achmad Solichin | | | P0002 | Budianto | | | P0003 | Hasan | | +---+---+---+

Transaksi

MySQL merupakan software database berbasis client-server. Hal ini berarti bahwa beberapa client dapat melakukan koneksi ke server MySQL secara bersamaan. Masing-masing client dapat melakukan select, insert, update, maupun delete data di server MySQL. Hal ini tentunya dapat menjadi masalah jika terjadi bentrok antar-client.

Sebagai contoh dalam proses transaksi pemesanan barang. Jika terdapat 2 (dua) pelanggan melakukan transaksi pada waktu yang sama, misalnya melakukan pemesanan barang. Keduanya akan menambahkan data di tabel yang sama dan mungkin saja data yang dimasukkan tertukar atau tidak valid. Hal ini tidak akan terjadi jika pada saat satu pelanggan melakukan transaksi, pelanggan yang lain harus menunggu sampai proses transaksi selesai.

Untuk mengatur proses query yang terjadi dalam suatu sistem yang memiliki user banyak (multi-user-system), kita dapat memanfaatkan dua hal di MySQL. Pertama kita dapat mengunci tabel (table-locking). Cara ini dapat dilakukan jika tipe tabel yang digunakan adalah MyISAM. Kedua, dapat

(82)

selesai semua atau tidak selesai sama sekali. Dengan kata lain, dalam satu transaksi tidak boleh ada proses (perintah) yang gagal dieksekusi.

Consistency. Bahwa kegagalan satu proses dalam transaksi tidak akan mempengaruhi transaksi lainnya.

Isolation. Secara sederhana, bahwa data yang sedang digunakan dalam satu transaksi, tidak dapat digunakan oleh transaksi lainnya sebelum seluruh proses transaksi yang pertama selesai.

Durability. Jika sebuah transaksi selesai dieksekusi, hasilnya tetap tercatat dengan baik.

Mengunci Tabel

Mengunci tabel (table-locking) dapat dilakukan untuk membatasi akses terhadap suatu tabel jika ada user yang sedang aktif mengakses tabel. Suatu tabel yang sedang terkunci (locked), tidak dapat diakses dengan bebas oleh user lain. Untuk mengunci tabel di MySQL dapat menggunakan kata kunci LOCK.

Bentuk umum perintah LOCK :

LOCK TABLE table1 locktype, table2 locktype, ...;

Dimana tipe lock (locktype) yang dapat dipilih antara lain:

READ. Semua user MySQL dapat membaca (mengakses) tabel, namun tabel tersebut tidak dapat diubah oleh siapapun, termasuk user yang mengeksekusi perintah LOCK. Dengan kata lain, tabel bersifat read-only.

READ LOCAL. Sama seperti READ, tetapi perintah INSERT dapat dilakukan selama tidak merubah record (data) yang ada.

WRITE. User yang aktif diperbolehkan untuk membaca dan mengubah tabel (read-and-write). User yang lain tidak dapat mengubah isi tabel, hanya dapat membaca tabel (read-only).

LOW PRIORITY WRITE. Seperti halnya WRITE, hanya saja user lain dapat melakukan READ LOCK.

(1)

seperti ini terkadang bermasalah saat melakukan restore jika menggunakan sistem operasi yang berbeda.

Backup Bentuk Perintah Database

Backup dalam bentuk perintah database sering disebut sebagai backup dalam bentuk SQL Dump. SQL Dump merupakan suatu format (file) yang berisi perintah-perintah CREATE dan INSERT yang jika dieksekusi akan menyusun struktur database dan isinya secara otomatis.

Pada dasarnya, bentuk SQL Dump dapat dilakukan dengan mengeksekusi perintah mysqldump atau mysqlhotcopy yang sudah disediakan di MySQL. Bentuk umum dari kedua perintah tersebut adalah:

shell

>

mysqldump

--tab=/path/to/some/dir --opt db_name

shell

>

mysqlhotcopy

db_name /path/to/some/dir

Contoh misalnya kita akan melakukan backup semua database, sintaksnya sebagai berikut:

shell > mysqldump --all-databases > backup.sql

Selain dengan cara perintah manual, kita juga dapat memanfaatkan software lain seperti SQLYog. Berikut ini prosedur atau cara backup dengan memanfaatkan SQLYog.

(2)

2. Akan ditampilkan window “Dump Data”, tentukan database yang akan dibackup, apa yang akan dibackup (data saja, strukturnya saja atau keduanya), tabel yang akan dibackup, nama file backup dan beberapa pilihan lain.

3. Tekan tombol Export untuk mengeksekusi backup.

Hasil backup ini berupa file dengan ekstension .SQL. File tersebut dapat di-restore di kemudian hari.

Restore

Restore merupakan prosedur yang dilaksanakan untuk mengembalikan file yang dibackup ke database MySQL. Proses restore juga dapat dilakukan melalui perintah SQL dengan memanfaatkan mysql dan juga bisa menggunakan software bantuan.

Jika menggunakan sintaks SQL, berikut ini contoh perintahnya:

(3)

Sedangkan jika menggunakan SQLYog, berikut ini prosedur restore databasenya:

1. Dari menu utama, pilih menu DB > Restore From SQL Dump...

2. Akan ditampilkan window untuk memilih file backup (*.SQL).

3. Klik tombol Execute untuk mengeksekusi proses restore.

Import

(4)

Jika data dalam format .SQL maka prosedur untuk import dapat mengikuti prosedur restore diatas.

Berikut ini contoh prosedur import untuk format data CVS. Untuk format data yang lain, harus disesuaikan dengan format CVS.

1. Dari SQLYog, pilih (klik) tabel tujuannya.

2. Dari menu utama, pilih Table > Import Data From CSV...

3. Akan ditampilkan window Import Data.

4. Pilih kolom (field) tujuannya. 5. Pilih delimiter atau pemisahnya. 6. Pilih file CSV yang akan diimport

7. Klik tombol Import... untuk mengeksekusi perintah.

4

5

6

(5)

DAFTAR PUSTAKA

Achmad Solichin.

.

Pemrograman Web dengan PHP dan MySQL

. Jakarta.

Allen G. Tailor.

.

SQL For Dummies, 5

th

Edition

. Wiley Publishing, )nc.

Charler A. Bell.

.

Expert MySQL

. Apress Publishing: New York.

Derek J. Balling, Jeremy Zawodny.

.

High Performance MySQL

. O’Reilly

Publishing.

George Reese.

.

MySQL Pocket Reference.

O’Reilly Publishing.

Marc Delisle.

.

Mastering phpMyAdmin 3.1 for Effective MySQL

Management

. Packt Publishing: Birmingham

Mark Maslakowski.

.

Sam’s Teach Yourself MySQL in 21 Days

. Sams

Publishing.

Michael Kofler.

.

The Definitive Guide to MySQL 5 third edition

, Apress

Publishing: New York

MySQL.

Situs MySQL

.

http://mysql.com

. diakses Januari

MySQL.

MySQL Manual

.

http://mysql.com

.

Steven Feuerstein, Guy (arrison.

.

MySQL Stored Procedure

Programming

. O’Reilly Publishing

Wikipedia.

MySQL on Wikipedia

.

http://en.wikipedia.org/wiki/MySQL

, diakses

(6)

TENTANG PENULIS

Achmad Solichin.

Adalah Lulusan Teknik )nformatika, Fakultas

Teknologi )nformasi, Universitas Budi Luhur, Jakarta S ,

.

Saat ini sedang menempuh pendidikan S di Magister Teknologi

)nformasi Universitas )ndonesia

. Kegiatan sehari‐hari

adalah sebagai Dosen di Universitas Budi Luhur

http://www.bl.ac.id

, sekaligus sebagai Kepala Laboratorium Komputer

Universitas Budi Luhur

http://labkom.bl.ac.id

. Kegiatan lain aktif sebagai

programmer, web developer, system analyst dan memberikan pelatihan di

berbagai bidang komputer serta membuat tutorial‐tutorial praktis di bidang

komputer. Penulis juga terlibat dalam pengembangan E‐Learning di Universitas

Budi Luhur. Penulis memiliki situs utama di

http://achmatim.net

yang berisi

berbagai tutorial komputer dan buku gratis. Penulis dapat dihubungi melalui

email di

, YM

achmatim

, Facebook dan Twitter .

Beberapa website yang dikembangkan oleh penulis:

ƒ

http://achmatim.net

, tutorial komputer dan buku belajar gratis

ƒ

http://contohprogram.info

, kumpulan contoh program dan aplikasi

komputer

ƒ

http://ebook.achmatim.net

, free computer ebook collections

ƒ

http://elearning.achmatim.net

, situs kuliah online

ƒ

http://bestfreetutorial.com

, best free tutorial for newbie

ƒ

http://hotnewsarchives.info

, data mining, data warehouse, and knowledge

management

ƒ

http://banksoalkomputer.info

, bank soal dan latihan untuk universitas dan

perguruan tinggi komputer

ƒ

http://banksoalujian.info

, bank soal ujian untuk SMP dan SMA

ƒ

http://sman sumpiuh.com

, situs SMA Negeri Sumpiuh

2

http://facebook.com/achmatim

3