You are on page 1of 23

BAB 1

Tujuan:
1. Mengenal Database dan DBMS
2. Mengenal MySQL
3. Bisa menjalankan MySQL Server dan Client

DATABASE DAN DBMS


Database Management System (DBMS) berisi satu koleksi data yang saling berhubungan dan satu set
program untuk mengakses data tersebut. DBMS terdiri dari Database dan Set Program pengelola untuk
menambah data, menghapus data, mengambil, dan membaca data.
Database adalah kumpulan file-file yang saling berelasi, relasi tersebut biasa ditunjukan dengan kunci
dari tiap file yang ada. Satu database menunjukan satu kumpulan data/tabel yang dipakai dalam satu
lingkup perusahaan, instansi. Artinya bahwa basis data adalah kumpulan data yang berhubungan
dengan suatu obyek, topik atau tujuan khusus tertentu. Sebagai contoh buku telepon, kamus bahasa,
katalog buku di perpustakaan, data koleksi musik dan video, data pelanggan, data supplier, data
mahasiswa, data pegawai, dan lain-lain.
Dalam satu file data/tabel terdapat record-record yang sejenis, sama besar, sama bentuk, merupakan
satu kumpulan entity yang seragam. Satu record terdiri dari field-field yang saling berhubungan untuk
menunjukan bahwa field tersebut dalam satu pengertian yang lengkap dan direkam dalam satu record.
Untuk menyebut isi dari field maka digunakan atribute atau merupakan judul dari satu kelompok entity
tertentu, misalnya atribute Alamat menunjukan entity alamat dari siswa. Entity adalah suatu obyek yang
nyata dan akan direkam.
Set program pengelola merupakan satu paket program yang dibuat agar memudahkan dan
mengefisienkan pemasukan atau perekaman informasi dan pengambilan atau pembacaan informasi
kedalam database, biasa disebut dengan paket DBMS. Ada beberapa macam paket DBMS, diantaranya
adalah MySQL, postgresql, Foxpro, Oracle, DB2, dll.
MySQL
MySQL adalah salah satu contoh software/paket DBMS yang sangat populer. Kepopuleran MySQL
dimungkinkan karena kemudahannya untuk digunakan, cepat secara kinerja query, dan mencukupi
untuk kebutuhan database perusahaan-perusahaan skala menengah-kecil.
MySQL merupakan DBMS yang bersifat client-server dan multi user. Maksudnya adalah ada software
MySQL yang berjalan sebagai client, dan adapula yang berjalan sebagai server. Server berfungsi untuk
memberi layanan atas permintaan yang dilakukan oleh Klien. Ada banyak user yang bisa mengakses
database server secara bersamaan melalui program klien.
Oleh karena itu sebelum kita melakukan pengolahan terhadap database, maka kita harus menjalankan
program Database Server MySQL terlebih dulu yang menyediakan layanan berupa data. Setelah itu kita
baru bisa melakukan permintaan kepada server berupa layanan data melalui program klien. Layanan
yang diberikan bisa berupa pemasukan atau perekaman informasi dan pengambilan atau pembacaan
informasi ke/dari dalam database.
Menjalankan database server MySQL
di Linux
1. Masuk ke terminal / konsole
caranya:
a. Tekan alt – F2 (alt ditekan dan jangan dilepas kemudian tekan F2)
b. Ketika muncul kotak dialog Run Application, tulis konsole, kemudian klik Ok atau tekan
ENTER
2. perintahkan:
/etc/init.d/mysqld start (login sebagai root)
Jika berhasil, maka akan muncul tulisan Ok
di Windows
1. Masuk Command Prompt/Windows Explorer
2. Aktifkan direktori bin dimana mysql diinstal
3. jalankan mysqld.exe
Koneksi ke MySQL server melalui MySQL klien
Seperti telah disebutkan bahwa MySQL adalah program yang multi user. Oleh karena itu, ketika kita
akan melakukan koneksi, maka kita harus mempunyai hak akses terhadap data yang ada di dalam
database server dan masing-masing user bisa memiliki password yang berbeda-beda. Ini merupakan
salah satu fasilitas keamanan yang biasanya diberikan oleh software DBMS yang multi user. Selain itu
juga klien bisa melakukan koneksi dari komputer manapun yang terhubung di dalam jaringan dan
memiliki hak akses untuk melakukan koneksi dari komputer lain yang ditentukan. Untuk melakukan
koneksi, digunakan program klien yang bernama mysql. Dalam penggunaannya, mysql mempunyai
beberapa parameter. Parameter yang sering digunakan untuk melakukan koneksi adalah namauser dan
password serta nama host (jika koneksinya melalui komputer lain). Penulisan parameter bisa dibalik-
balik antar parameter, bukan antar nilainya.

Menggapai Ilmu Menuju Rahmat 1


Caranya:

[user@localhost user]$ mysql -h<nama host> -u<nama user> -p<paswd>

Sebagai contoh user yang bernama 'uun' dengan password 'kbmokbos' akan melakukan koneksi ke
database server MySQL, maka yang dilakukan:

[user@localhost user]$ mysql -hserver -uuun -pkbmokbos

Atau supaya passwordnya tidak kelihatan, caranya:

[user@localhost user]$ mysql -uuun -p


Enter password:<masukkan passwordnya di sini dan tidak kelihatan>

Jika koneksi berhasil, maka akan ditampilkan:

Welcome to the MySQL monitor. Commands end with ; or \g.


Your MySQL connection id is 9 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
Ketika sudah terjadi koneksi, maka akan ditampilkan prompt mysql, yang artinya bahwa klien sudah siap
untuk meminta request/layanan kepada server, dan server pun sudah siap untuk melayani permintaan
dari klien.

Ada beberapa prompt di mysql, dan masing-masing memiliki arti sendiri.

Prompt Arti

mysql> Siap untuk perintah baru.

-> Menunggu baris perintah berikutnya.

'> Menunggu baris perintah berikutnya, karena pernyataan yang


diawali dengan tanda petik satu(') belum ditutup dengan tanda
yang sama.

“> Menunggu baris perintah berikutnya, karena pernyataan yang


diawali dengan tanda petik dua(“) belum ditutup dengan tanda yang
sama.

Jika database server belum dijalankan, maka akan ditampilkan pesan berikut:

ERROR 2002: Can't connect to local MySQL server through socket


'/var/lib/mysql/mysql.sock' (2)

Database sudah dijalankan, tapi password yang dimasukkan salah atau user tidak dikenal:

ERROR 1045: Access denied for user: 'root@localhost' (Using password:


YES)
atau jika passwordnya tidak diisi:
ERROR 1045: Access denied for user: 'aku@localhost' (Using password:
NO)
Perintah Dalam Lingkungan MySQL
Perintah untuk lingkungan MySQL dapat diberikan dengan menggunakan perintah \h pada prompt
MySQL. \h atau help adalah perintah untuk menampilkan daftar perintah yang dapat digunakan dalam
lingkungan MySQL.

Berikut tampilan yang dihasilkan jika kita memberikan perintah help atau \h dengan diikuti ENTER.

Menggapai Ilmu Menuju Rahmat 2


mysql> \h
MySQL commands:
Note that all text commands must be first on line and end with ';'
help (\h) Display this help.
? (\?) Synonym for `help'.
clear (\c) Clear command.
Connect (\r) Reconnect to the server. Optional arguments are db and
host.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute a SQL script file. Takes a file name as an
argument.
status (\s) Get status information from the server.
tee (\T) Set outfile [to_outfile]. Append everything into given
outfile.
use (\u) Use another database. Takes database name as argument.
Catatan:
Perintah-perintah dalam MySQL tidak menerapkan aturan case sensitif, perintah bisa dituliskan dalam
huruf besar ataupun huruf kecil.
Aturan case sensitif diterapkan pada penamaan objek-objek dalam database atau nama tabel khusus
untuk lingkungan *nix (Unix dan Linux).
Contoh, pernyataan berikut adalah sama:
mysql> SELECT USER(), VERSION();
+----------------+-----------+
| USER() | VERSION() |
+----------------+-----------+
| root@localhost | 3.23.58 |
+----------------+-----------+
mysql> select user(), version();
+----------------+-----------+
| user() | version() |
+----------------+-----------+
| root@localhost | 3.23.58 |
+----------------+-----------+
mysql> show DataBases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
Perintah berikut terdapat kesalahan, karena nama database/table tidak sesuai (harus case sensitif)
mysql> use MySql;
ERROR 1049: Unknown database 'MySql'

mysql> desc HOST;


ERROR 1146: Table 'mysql.HOST' doesn't exist

mysql> select User from uSer;


ERROR 1146: Table 'mysql.uSer' doesn't exist

Menggapai Ilmu Menuju Rahmat 3


nama field tidak case sensitif
mysql> Select UsEr,Host,password from user;
+------+-----------------------+------------------+
| UsEr | Host | password |
+------+-----------------------+------------------+
| root | localhost | 47b3026f73b8c496 |
| root | localhost.localdomain | 47b3026f73b8c496 |
| uun | % | 3e4d039e1127f2fb |
+------+-----------------------+------------------+

BAB 2
Tujuan:
1. Mengetahui dan Mengenal Bahasa SQL beserta pembagiannya
2. Menggunakan Bahasa SQL
3. Mengenal dan Menggunakan Sub Bahasa DDL (Data Definition Language)

Mengelola Database
Sebelum kita membuat suatu tabel yang digunakan untuk menyimpan data, maka harus terlebih dahulu
dibuat database yang merupakan kumpulan atau berisi tabel-tabel yang saling berhubungan dengan
menggunakan kunci-kunci yang ditentukan. Tapi bagaimana caranya memerintahkan mysql untuk
membuat database, tabel, dan lainnya yang kita perlukan.
Untuk itu kita perlu untuk mempelajari bahasa gaul yang akan digunakan untuk berkomunikasi dengan
MySQL. Bahasa ini disebut dengan SQL (Structured Query Language) dan orang sering
mengakronimnya dengan “sequel”. SQL merupakan bahasa standar untuk pengolahan database. Ini
berarti bahwa DBMS yang lain juga mengenal bahasa gaul ini. Walau ada beberapa istilah yang di salah
satu DBMS tidak dikenal, tapi dikenal di DBMS yang lain.
Di dalam bahasa SQL, perintah dibedakan menjadi 3 sub bahasa:
a. DDL (Data Definition Language)
b. DML (Data Manipulation Language)
c. DCL (Data Control Language)

a. Data Definition Language


Kelompok perintah ini bisa digunakan untuk melakukan pendefinisian database dan pendefinisian tabel.
Sehingga dengan menggunakan perintah-perintah ini, kita bisa memerintahkan untuk membuat
database, membuat tabel, mengubah strukturnya, menghapus tabel, membuat index tabel dan lain-lain
yang berhubungan dengan pendefinisian database dan tabel.
Membuat Database
Untuk mengetahui atau melihat database yang sudah ada, bisa digunakan perintah:
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+

Dalam pembuatan database perlu perhatikan penulisan nama database tidak boleh menggunakan
spasi dan karakter non standar. Bentuk penulisan perintah untuk membuat database baru adalah
create database <nama_database>;
mysql> create database perpustakaan;

Untuk memastikan bahwa database yang kita buat sudah jadi, perintahkan show databases, sehingga
semua database yang ada di server dan bisa diakse oleh user akan ditampilkan.

mysql> show databases;


+--------------+
| Database |
+--------------+
| myperpus |
| mysql |
| perpustakaan |
Menggapai Ilmu Menuju Rahmat 4
| test |
+--------------+
Membuat Tabel
Selanjutnya untuk memulai membuat tabel di dalam database perpustakaan, maka kita harus
mengaktifkan terlebih dulu database perpustakaan dengan menggunakan perintah use
<nama_database>.

mysql> use perpustakaan;


Setelah database aktif, kita baru bisa memulai untuk membuat tabel yang kita perlukan. Pada database
perpustakaan, akan disimpan data-data tentang buku, judul buku, kelompok buku, pengarang, dan
penerbitnya. Selain itu juga untuk menyimpan data anggota beserta transaksi yang dilakukan.
Pertama kali, kita akan membuat tabel buku yang fungsinya untuk menyimpan data tentang buku.

mysql> create table buku (


-> id_buku bigint(5) NOT NULL auto_increment primary key,
-> index_buku varchar(15) NOT NULL default '',
-> no_urut tinyint(3) default 0,
-> referensi tinyint(1)) type=myISAM;

Untuk membuktikan bahwa kita berhasil, maka tabel yang ada database bisa kita tampilkan dengan
cara:

mysql> show tables;


+------------------------+
| Tables_in_perpustakaan |
+------------------------+
| buku |
+------------------------+

Pada hasil perintah diatas ditampilkan, bahwa tabel yang sudah ada di database perpustakaan adalah
buku. Untuk menampilkan struktur dari tabel buku, perintahkan:

mysql> describe buku;


+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id_buku | bigint(5) | | PRI | NULL | auto_increment |
| index_buku | varchar(15) | | | | |
| no_urut | tinyint(3) | YES | | 0 | |
| referensi | tinyint(1) | YES | | NULL | |
+------------+-------------+------+-----+---------+----------------+

id_buku : menyimpan no_id tidap buku walaupun judulnya sama, sifatnya unik. Dan semua field yang
lain bergantung hanya kepada id_buku. Karena itu field ini dijadikan primary key.
index_buku : digunakan untuk menyimpan indeks setiap judul buku yang tiap judul bukunya tersimpan
di dalam tabel judul_buku yang akan kita buat berikutnya.
no_urut : digunakan untuk menyimpan no_urut buku no_urut buku untuk judul yang sama.
referensi : digunakan untuk mengetahui apakah buku boleh dipinjam/dibawa keluar atau tidak, jika
boleh maka nilainya 0 jika tidak maka nilainya 1. Seperti ini apabila tiap judul buku ada yang boleh
dibawa keluar ada yang tidak. Seandainya setiap judul buku yang sama memiliki kondisi referensi yang
sama, maka field ini dimasukkan kedalam tabel judul_buku.

Berikutnya kita akan membuat tabel judul_buku.

mysql> create table judul_buku (


-> index_buku varchar(10) NOT NULL primary key,
-> judul varchar(90),
-> kd_pengarang varchar(5),
-> kd_kelompok smallint(3),
-> edisi tinyint(2),
-> thn_terbit int(4))type=myISAM;

index_buku : buku dengan judul, pengarang, penerbit, dan edisi yang sama akan memiliki index yang
sama.

Menggapai Ilmu Menuju Rahmat 5


judul : judul buku.
kd_pengarang : kode pengarang yang nama pengarangnya ada di tabel pengarang.
kd_kelompok : kode kelompok isi buku sesuai ilmu, yang domainnya dari tabel kelompok.
edisi : cetakan ke berapa untuk judul, penerbit, dan pengarang yang sama.
thn_terbit : tahun terbit buku.
untuk tabel-tabel yang selanjutnya, coba buatlah sendiri dengan struktur sebagai berikut:
bonus: untuk mempermudah pengeditan perintah sql, kita bisa menuliskannya pada salah satu text
editor, misalnya kwrite. Setelah disimpan, kemudian kita bisa menjalankannya dengan perintah source
<[[/]nama_dir/]nama_file>

Tabel Kelompok
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| kd_kelompok | smallint(3) | | PRI | 0 | |
| kelompok | varchar(20) | | | | |
+-------------+-------------+------+-----+---------+-------+
Tabel Penerbit
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id_penerbit | varchar(5) | | PRI | | |
| penerbit | varchar(20) | YES | | NULL | |
| kota | varchar(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+

Tabel Pengarang
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id_pengarang | varchar(5) | | PRI | | |
| nama | varchar(30) | | | | |
+--------------+-------------+------+-----+---------+-------+

Tabel Anggota
+---------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+-------------+------+-----+---------+-------+
| kd_anggota | varchar(7) | YES | | NULL | |
| nama_anggota | varchar(50) | YES | | NULL | |
| tgllahir | date | YES | | NULL | |
| jklmn | tinyint(1) | YES | | NULL | |
| alamat | varchar(50) | YES | | NULL | |
| no_hp | varchar(12) | YES | | NULL | |
| no_telp | varchar(15) | YES | | NULL | |
| tmp_lahir | varchar(20) | YES | | NULL | |
| Sekolah_Universitas | varchar(30) | | | | |
+---------------------+-------------+------+-----+---------+-------+
Tabel Peminjam
+-------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+-------+
| id_anggota | varchar(7) | | | | |
| id_buku | varchar(5) | | | | |
| tgl_pinjam | date | YES | | NULL | |
| tgl_kembali | date | YES | | NULL | |
+-------------+------------+------+-----+---------+-------+
Merubah dan Memodifikasi Tabel
Terkadang ketika kita, sedang membuat tabel, ternyata ada nama field yang kurang, atau
nama_fieldnya susah dipahami, atau bisa juga type data serta ukurannya tidak/ kurang sesuai.
Sekarang coba kita perhatikan tabel yang sudah kita buat sebelumnya.
Pada tabel buku terdapat field id_buku dengan type bigint ukurannya 5, sedangkan pada tabel
peminjam id_buku typenya varchar ukurannya 5. Ini tidak sama, bisa-bisa timbul kekacauan ini…

Menggapai Ilmu Menuju Rahmat 6


(emangnya apaan, kok sampai terjadi kekacauan segala) Maksudnya ini harus disamakan supaya kedua tabel
bisa dihubungkan. Sekarang, id_buku pada tabel peminjam diubah menjadi bertype bigint(5), caranya:
mysql> alter table peminjam modify id_buku bigint(5);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Coba sekarang ditampilkan lagi struktur dari tabel peminjam, adakah perubahan? (harus dong... kita harus
selalu berubah untuk menuju yang lebih baik...)

+-------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+-------+
| id_anggota | varchar(7) | | | | |
| id_buku | bigint(5) | YES | | NULL | |
| tgl_pinjam | date | YES | | NULL | |
| tgl_kembali | date | YES | | NULL | |
+-------------+------------+------+-----+---------+-------+

Perhatikan field index_buku pada tabel buku dan pada tabel judul_buku, ukurannya juga berbeda, nah
sekarang tugas Anda/Antum semuanya adalah menyamakan dengan ukuran 15 pada tabel judul_buku.
Sudah tahu caranya? (masa gitu aja gak tahu, sich)

Merubah Nama Field


Pada tabel buku terdapat field id_buku dan index_buku, kalau melihat namanya, maka seolah-olah
fungsinya sama, kenapa ada dua field id(index) buku pada satu tabel. Padahal fungsi kedua field
tersebut berbeda. Field index_buku fungsinya untuk menyimpan indeks judul buku sedangkan field
id_buku untuk menyimpan indeks untuk setiap buku yang domainnya ada di tabel judul_buku. Judul
buku yang sama memiliki index_buku yang sama tapi id_bukunya berbeda. Sebetulnya namanya tetap
seperti itu juga tidak ada masalah, tapi akan membingungkan. (bagi orang-orang yang bingung... :) )
Untuk lebih mempermudah pemahaman hanya dengan melihat namanya saja, maka sebaiknya
namanya diganti dengan id_judul. Caranya?

mysql> alter table buku change index_buku id_judul varchar(15);


Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

Sudah tahu tugas berikutnya? Nah... Ubahlah field index_buku yang ada di tabel judul_buku dengan
id_judul. Ubah juga field yang berawalan dengan kd dengan id, misalnya kd_penerbit menjadi
id_penerbit. Ini hanya untuk melatih cara merubah nama field serta untuk menyeragamkan penamaan
saja. Selain itu, ubah juga field sekolah_universitas menjadi sekolah saja. Untuk apa panjang-panjang,
universitas juga sekolah kan? Apakah SD itu universitas? Kenapa nggak sekolah_sma, atau sekolah_lpk, atau sekolah_stmik
saja, kenapa sekolah_universitas? he... he... he... :)

Menambah Field
Kalau kita perhatikan tabel penerbit, dengan tabel manakah tabel ini berhubungan? Kalau tabel
pengarang berhubungan dengan tabel judul_buku menggunakan field kd_pengarang / id_pengarang
(jika sudah diganti). Sehingga untuk mengetahui nama pengarang dari suatu judul buku tinggal
menghubungkan tabel judul_buku dengan pengarang menggunakan field kunci id_pengarang.
Harusnya tabel penerbit diperlukan juga oleh tabel judul_buku untuk mengetahui nama penerbit dari
suatu judul buku. Tapi jangan khawatir, SQL punya juga bahasa yang digunakan untuk
menambah/menyisipkan field kedalam suatu tabel.

mysql> alter table judul_buku add id_penerbit varchar(5) after judul;

Perintah di atas digunakan untuk menyisipkan field id_penerbit ke dalam tabel judul_buku diletakkan
setelah field judul. Untuk membuktikan, tampilkan saja struktur tabel judul_buku.
Menghapus Field
Di dalam tabel anggota, kita bisa melihat di sana terdapat field no_hp dan no_telp. Perlukah kedua-
duanya disimpan? Tidak semua anggota punya no. hp, dan tidak pula semuanya memiliki no. telpon.
(macam mana pula ini, kok disimpan semuanya? ini pemborosan namanya. instruksi presiden kan disuruh hemat energi. Lho...
kok sampai bbm?) Untuk menghapus field no_hp gunakan perintah berikut:

mysql> alter table anggota drop no_hp;


Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Menggapai Ilmu Menuju Rahmat 7
Merubah Nama Tabel
Tabel peminjam berfungsi untuk menyimpan data anggota yang melakukan peminjaman dan
pengembalian buku. Mungkin akan lebih jelasnya kalau nama peminjam diganti dengan transaksi. Untuk
melakukannya gunakan perintah :

mysql> alter table peminjam rename transaksi;

Menghapus Table dan Database


Terkadang kita sudah membuat suatu tabel atau database, tapi ternyata tabel tersebut sebetulnya tidak
diperlukan. Mungkin karena pembatasan masalah, ataupun mungkin karena diketahui setelahnya
bahwa tabel tersebut tidaklah diperlukan, dan hanya memboroskan tempat penyimpanan saja, atau
dengan tabel tersebut menjadikan tidak efektif dan efisien. Atau bisa saja tabel tersebut diciptakan
hanya untuk keperluan sementara saja(temporari), maka kita harus atau perlu untuk menghapus tabel
tersebut. Begitu juga dengan database yang sudah kita buat ,ternyata database tersebut sudah kita
perlukan lagi. Perintah yang digunakan untuk menghapus adalah DROP.

Menghapus Tabel
struktur perintah:
drop table <nama_table>
contoh:

mysql> drop table pengarang;

Menghapus Database
struktur perintah:
drop database <nama_table>
contoh:

mysql> drop database pengarang;

Coba sekarang tampilkan semua tabel yang ada di dalam database, atau tampilkan semua database
yang ada di dalam server, masih adakah tabel atau database yang diberlakukan padanya perintah
drop? Jika perintah yang dilakukan sesuai dengan aturannya (syariat) tanpa mengurangi ataupun
menambahnya (dengan kebid'ahan-kebid'ahan), pasti akan mendapatkan hasilnya (pahalanya)sesuai yang sudah
disebutkan (dijanjikan, kecuali jika ada kesalahan penulisan maka diluar tanggung jawab percetakan. lho...?).

BAB 3
Tujuan:
1. Mengenal Sub Bahasa DML (Data Manipulation Language)
2. Menggunakan Sub Bahasa DML
3. Mengenal Sub Bahasa DCL (Data Control Language)

b. Data Manipulation Language


DML adalah kelompok perintah yang berfungsi untuk memanipulasi data dalam basis data, misalnya
untuk pengambilan, penyisipan, pengubahan, dan penghapusan data. Perintah yang masuk kategori
DML adalah :
1. Insert
Perintah Insert digunakan untuk menyisipkan data baru ke dalam sebuah tabel database. Ada dua
macam perintah Insert, yaitu yang digunakan untuk menyisipkan data satu persatu dan yang
menyisipkan banyak data sekaligus. Sintaksnya adalah sebagai berikut :
Untuk menyisipkan banyak record :
Untuk menyisipkan satu record :

INSERT INTO tujuan [(t_field1[, t_field2[, …]])] VALUES (nilai1[, nilai2[, … ] ])

Arti parameter-parameter yang disertakan:


Tujuan adalah nama tabel yang akan disisipi data.
Sumber adalah nama tabel sumber data.
T_field1, t_field2 adalah nama field yang akan disisipi data.
s_field1, s_field2 adalah nama field sumber data.
Nilai1, nilai2 adalah nilai data yang akan disisipkan.
Sebagai latihan, akan ditambahkan kedalam tabel buku beberapa data.

mysql> insert into buku values(1,'KD-OD9-HW-EMK-1',1,1);

Menggapai Ilmu Menuju Rahmat 8


Perintah di atas bertujuan menambahkan/menyisipkan tabel kedalam tabel buku dengan data
sesuai urutan field ketika membuat tabel (bisa ditampilkan dengan perintah describe).

Bisa juga menggunakan cara:

mysql> INSERT INTO buku(id_buku,id_judul,no_urut,referensi)


-> VALUES (2,'AF-HMA-MA-MDK-5',1,1);

Ataupun

mysql> INSERT INTO buku (id_judul,referensi, no_urut)


-> VALUES ('KP-PDM-RS-AOF,3',1,1);

Tampilkan semua data yang ada di dalam tabel buku

mysql> select * from buku;


+---------+-----------------+---------+-----------+
| id_buku | id_judul | no_urut | referensi |
+---------+-----------------+---------+-----------+
| 1 | KD-OD9-HW-EMK-1 | 1 | 1 |
| 2 | AF-HMA-MA-MDK-5 | 1 | 1 |
| 3 | KP-PDM-RS-AOF,3 | 1 | 1 |
+---------+-----------------+---------+-----------+

mysql> INSERT INTO buku


-> SET id_judul='KP-PWP-IFB-4',
-> no_urut=1,
-> referensi=1;

mysql> INSERT INTO buku


-> VALUES
-> (5,'KP-PWP-BS-IFB-4',2,1),
-> (6,'KP-PWP-BS-IFP-4',3,2),
-> (7,'KP-PWP-BS-IFP-4',4,2);

mysql> INSERT INTO buku (no_urut,referensi,id_judul)


-> VALUES
-> (1,1,'KD-MDS-FU-AOF-3'),
-> (2,2,'KD-MDS-FU-AOF-3'),
-> (3,1,'KD-MDS-FU-AOF-3'),
-> (4,1,'KD-MDS-FU-AOF-3'),
-> (5,2,'KD-MDS-FU-AOF-3');

mysql> INSERT INTO buku values(NULL,'AN-NIQ-IQ-TBY-7',1,2);

mysql> INSERT INTO buku values('','AN-NIQ-IQ-TBY-7',2,2),('','KP-PAT-


LP-AOF-6',1,2),('','KP-PWH-BS-IFB-8',1,1);
Tampilkan semua data yang ada di tabel buku. Dan buatlah kesimpulan dari perintah-perintah
yang ada di atas.

Mengimport Tabel
MySQL mempunyai fasilitas yang dapat kita gunakan untuk mengimport data tabel dari file lain
dengan format teks.

Kita lanjutkan dengan tabel yang lain dengan cara yang lain lagi. Untuk tabel judul buku, buatlah
file teks (bisa menggunakan kwrite di linux, atau kalau di windows bisa pakai notepad atau editor
teks yang lain) data berikut:

KD-OD9-HW-EMK-1 Oracle 9i Database EMK HENWI 211 2 2003


AF-HMA-MA-MDK-5 Hukum membaca Al Quran untuk orang Mati MDK MUHAB 111 6 2004
KP-PDM-RS-AOF-3 Pemrograman Database MySQL 4 dg Bahasa C AOF RIDSJ 212 1 2004
KP-PWP-BS-IFB-4 Pemrograman Web dengan PHP IFB BETSI 213 2 2002
KD-MDS-FU-AOF-3 Mengelola Database Server di Linux dan Windows AOF FIRUT 211 1 2002
AN-NIQ-IQ-TBY-7 Nasehat Ibnul Qayyim Kepada Setiap Muslim TBY IBNQA 112 3 2001
KP-PAT-LP-AOF-6 Program Akutansi Terpadu AOF LIMPH 214 1 2004

Menggapai Ilmu Menuju Rahmat 9


Antar field/kolom dipisah dengan koma, dan antar record/baris dipisah dengan enter. Sebagai
contoh:
AN-NIQ-IQ-TBY-7,Nasehat Ibnul Qayyim Kepada Setiap Muslim,TBY,IQ1,112,3,2001
AF-HMA-MA-MDK-5,Hukum membaca Al Quran untuk orang Mati,MDK,MA1,111,6,2004

Setelah file dibuat, simpanlah di tempat yang jelas (sebagai contoh di /home/uunboy/ dengan
nama ). Selanjutnya jalankan perintah:
load data infile "/home/uunboy/buku" into table judul_buku fields terminated by ",";

Isikan untuk tabel-tabel yang lain seperti pada tabel berikut:


Tabel Penerbit
+-------------+----------------------+------------+
| id_penerbit | penerbit | kota |
+-------------+----------------------+------------+
| MDK | Media Dakwah | Jakarta |
| EMK | Elex Media Komputind | Jakarta |
| AOF | Andi Offset | Yogyakarta |
| IFB | Informatika Bandung | Bandung |
| MDH | Media Hidayah | Surakarta |
| TBY | Pustaka At Tibyan | Surakarta |
| MKD | Menara Kudus | Yogyakarta |
+-------------+----------------------+------------+

Tabel Pengarang
+--------------+----------------------------+
| id_pengarang | nama |
+--------------+----------------------------+
| HENWI | Ir. Hendra Wijaya |
| MUHAB | Muhammad Ahmad Abdul Salam |
| RIDSJ | Ridwan Sanjaya S.Kom |
| BETSI | Betha Sidik |
| FIRUT | Firrar Utdirartatmo ST MT |
| IBNQA | Ibnul Qayyim Aljauziah |
| LIMPH | Lim Phek Yiong |
| ABDKD | Abdul Kadir |
| JOGIY | Jogiyanto |
+--------------+----------------------------+

Tabel Kelompok
+-------------+----------------------+
| kd_kelompok | kelompok |
+-------------+----------------------+
| 110 | Aqidah |
| 111 | Fikih |
| 112 | Muamalah |
| 113 | Ibadah |
| 211 | Komputer Database |
| 212 | Pemrograman Database |
| 213 | Pemrograman Web |
| 214 | Pemrograman Akutansi |
+-------------+----------------------+

Buatlah file teks dengan data sebagai berikut:


INSERT INTO anggota VALUES ('0540001','Farmadi','1981-12-15',2,'Karangkajen MG III / 890 55153
Yk','','Yogyakarta','STMIK El Rahma');
INSERT INTO anggota VALUES ('0520002','Ana','1990-01-15',2,'Karangkajen MG III / 847 55153
Yk','','Yogyakarta','SMP 16 Yk');
INSERT INTO anggota VALUES ('0540003','Irma M','1984-12-22',2,'Karangkajen MG III / 915 55153
Yk','(0274)448549','Yogyakarta','UNY');
INSERT INTO anggota VALUES ('0540004','Untung Subagyo Al-Kabumaeni','1982-06-03',1,'Jl. Sisingamangaraja 76
Yogyakarta','(0274)377982','Kebumen','UGM');
INSERT INTO anggota VALUES ('0530005','Tashya','1988-10-04',2,'Karangkajen MG III / 935 55153
Yk','08164896920','Yogyakarta','MoEHa Punya');
INSERT INTO anggota VALUES ('0540006','Dyaning Utami Putri','1984-06-27',2,'Karangkajen Jl. Menukan MG III /
235 55153 Yk','','Yogyakarta','UST');
INSERT INTO anggota VALUES ('0530007','Agatha kenang M','1991-03-30',2,'Karangkajen MG III 55153
Yk','08164896920','Yogyakarta','SMPN 2 Yk');
INSERT INTO anggota VALUES ('0540008','Ririn Rikhul J','1986-03-05',2,'Karangkajen MG III / 983 55153
Yk','(0274)382031','Yogyakarta','UAD');
INSERT INTO anggota VALUES ('0540009','Nurul Madaniyah','1987-08-28',2,'Karangkajen
70','08562951646','Yogyakarta','UAD');
INSERT INTO anggota VALUES ('0540010','Dyah Kurniawati','1983-10-18',2,'Karangkajen MG III / 812 55153
Yk','(0274)379539','Yogyakarta','UWM');

Menggapai Ilmu Menuju Rahmat 10


INSERT INTO anggota VALUES ('0520011','Adelia Rosharyati','1990-12-30',2,'Karangkajen MG III / 965 55153
Yk','(0274)372666','Yogyakarta','SMPN 10 Yk');
INSERT INTO anggota VALUES ('0540012','Nur Rahmania Fitriastuti','1985-06-27',2,'Karangkajen MG III / 817 55153
Yk','0274-7493752','Yogyakarta','UIN Sunan Kalijaga');
INSERT INTO anggota VALUES ('0540013','Vina Agustina','1985-08-09',2,'Karangkajen MG III / 980 B 55153
Yk','085228362358','Kudus','STMIK El Rahma');
INSERT INTO anggota VALUES ('0520014','Yossi Dwiyuanna Septiani','1991-09-09',2,'Karangkajen MG III / 873
55153 Yk','085643148538','Yogyakarta','MTsN 2 Yk');
INSERT INTO anggota VALUES ('0540015','Dwian Soffa Ardafit','1986-05-09',2,'Karangkajen MG III / 966 55153
Yk','085228134770','Cilacap','STMIK El Rahma');
INSERT INTO anggota VALUES ('0540016','Siti Marfu\'ah','1986-06-07',2,'Karangkajen MG III / 927 55153
Yk','08882759801','Ngawi','STMIK El Rahma');
INSERT INTO anggota VALUES ('0540017','Noor Hidayah','1986-05-17',2,'Karangkajen MG III / 980 B 55153
Yk','085225110799','Kudus','STMIK El Rahma');
INSERT INTO anggota VALUES ('0510018','Afifah Yuniar Al-Buny','1995-06-08',2,'Karangkajen MG III / 857 55153
Yk','','Yogyakarta','SD Muhamadiyah');
INSERT INTO anggota VALUES ('0520019','Ulfias Trinta Noor Andira','1992-07-16',2,'Karangkajen MG III / 847 55153
Yk','','Yogyakarta','SMP 16 Yk');
INSERT INTO anggota VALUES ('0540022','Munawir','1986-01-15',1,'Karangkajen MG III / 840 55153
Yk','(0274)448554','Wakai','UGM');
Kemudian Jalankan file tersebut untuk mengisi data pada tabel anggota.
2. Select
Perintah Select digunakan untuk memilih data-data yang diperlukan dari sebuah database ke
dalam sebuah database sementara. Ada beberapa istilah dalam menyebut database sementara
ini, misalnya query, recordset, view. Sintaks selengkapnya adalah sebagai berikut:
SELECT { * | namafield } FROM namatabel [INTO tujuan] [WHERE kriteria] [GROUP BY grup]
[HAVING kriteria] [ORDER BY namafield] [{ASC|DESC}]
Tanda * berarti menetapkan bahwa semua field pada tabel akan dipilih.
NamaField adalah nama field yang akan dipilih.
NamaTabel adalah nama tabel yang akan dipilih.
Kriteria merupakan suatu ekspresi logika yang mjd syarat pemilihan data.
Tujuan merupakan nama dari tabel baru yang dibentuk.
Grup merupakan pengelompokan data berdasarkan nama field.
ASC atau DESC adalah pengurutan data berdasarkan abjad atau angka.
Jalankan perintah-perintah berikut:
select * from buku;
select * from buku where referensi=2;
select id_judul,judul,id_penerbit,thn_terbit from judul_buku;
select nama_anggota,tmp_lahir,sekolah from anggota
select nama_anggota,tmp_lahir from anggota where sekolah='STMIK El Rahma';
select nama_anggota,tmp_lahir from anggota where tmp_lahir='Yogyakarta';
select nama_anggota,tmp_lahir from anggota where nama_anggota like 'Untung%';
select nama_anggota,tmp_lahir from anggota where nama_anggota like '%ma%';
3. Delete
Perintah Delete digunakan untuk menghapus record pada suatu tabel. Sintaks dari perintah
Delete adalah sebagai berikut :
DELETE FROM nama_tabel [WHERE kriteria]
hati-hati dalam memberikan perintah delete ini, karena jika terlupa memberikan pernyataan
kondisi , perintah ini akan menyebabkan terhapusnya seluruh isi tabel.
Sebagai contoh kita hapus dari tabel anggota, anggota dengan id_anggota='0520002', maka
perintahnya:
DELETE FROM anggota WHERE id_anggota='0520002'
4. Update
Perintah Update digunakan untuk memodifikasi atau memperbaharui nilai-nilai record pada
sebuah tabel. Sintaksnya adalah sebagai berikut :
UPDATE nama_tabel
SET field1 = nilai1 [,field2 = nilai2 [,...]]
[WHERE kondisi]
wah..., ternyata data anggota yang kita memasukan tadi ada yang salah. Coba tampilkan
nama_anggota, beserta sekolahnya, kalau pingin tahu, boleh juga dengan tgl_lahirnya :), untuk anggota yang
tempat lahirnya di Kebumen. (masih ingat caranya? Tentu dong.....).
Nah…, ternyata kita menginputkan sekolah yang salah. Coba jalankan perintah berikut:

Menggapai Ilmu Menuju Rahmat 11


UPDATE anggota SET sekolah='STMIK El Rahma' WHERE tmp_lahir LIKE '%bumen';
Hati-hati juga dalam menjalankan perintah update ini, jangan sampai lupa untuk menuliskan kondisi data
dalam tabel yang akan diperbaiki. Maksud hati ingin merubah data yang tempat lahirnya di 'bumen' saja,
apa daya karena lupa menuliskan kondisi, jadi berubah semua datanya.
Coba, tampilkan data anggota dengan no. anggota 0540001. Aduh..., kacau ini... (mbacanya sambil memukul dahi...),
kalo ini mah terlalu tua.... Seharusnya tahun lahirnya 1984 dan tempat lahirnya Palembang. Nah sekarang...
andalah yang membetulkan. Harus betul lho..., kalau sampai datanya salah lagi, nanti ada yang mar’ah eh... marah, salah
nulis saya...:) salah maning.... salah maning... kok salah terus sih boy... gak tahu nih lagi kacau. Maaf cerita ini hanya rekaan belaka,
kalo ada nama atau identitas yang secara tidak sengaja ataupun sengaja (lho...?) sama atau menyerupai harap dimaklumi dan
jangan gr.... :)

c. Data Control Language


DCL berisi perintah-perintah untuk mengendalikan pengaksesan data. Pengendalian dapat dilakukan
berdasar per pengguna , per tabel, per kolom, maupun per operasi yang boleh dilakukan.
DCL terdiri atas sekelompok perintah SQL untuk memberikan hak akses database, mangalokasikan
space, pendefinisian space, , dan penggunaan database. Beberapa perintah ini merupakan fungsi dari
Database Administrator.
Perintah-perintah yang termasuk dalam DCL adalah :
GRANT : Memberikan kendali pengaksesan data
REVOKE : Mencabut kemampuan pengaksesan data
Selain itu ada juga COMMIT dan ROLLBACK. Detail mengenai perintah-perintah ini akan kita pelajari
pada bab mengenai pengaturan hak akses dan user.

BAB 4
Tujuan:
1. Menggunakan Bahasa SQL dengan dua tabel atau lebih

Menggabungkan Dua Tabel atau Lebih


Jika kita memperhatikan tabel buku, maka disitu hanya ada field id_buku, id_judul, no_urut, dan
referensi. Bagaimana untuk mengetahui judul bukunya? Sedangkan judul ada di tabel yang lain.
Terkadang atau bahkan sering, kita memang akan bekerja dengan dua tabel atau lebih. Kalau kita
menggabungkan dua tabel atau lebih, seperti permasalahan di atas hanya menyebut field beserta tabel-
tabel yang digunakan, misalnya perintah berikut:
select id_judul,judul,no_urut from buku,judul_buku;
maka akan ditampilkan kesalahan
ERROR 1052: Column: 'id_judul' in field list is ambiguous
Jika kebetulan nama field id-nya berbeda, atau perintah yang digunakan adalah:
select buku.id_judul,judul,no_urut from buku,judul_buku;
maka akan ditampilkan data sebanyak jumlah data buku * jumlah data judul buku, yaitu dengan
menghubungkan tiap id_judul di tabel buku dengan judul yang ada di tabel judul_buku.
Jika yang diinginkan adalah data yang bertepatan, yaitu data id_judul yang ada di tabel buku
dihubungkan dengan id_judul yang sama yang ada di tabel judul buku, maka perintahnya:
SELECT buku.id_judul,judul,no_urut FROM buku,judul_buku
-> WHERE buku.id_judul=judul_buku.id_judul;
atau
SELECT buku.id_judul,judul,no_urut
-> FROM buku INNER JOIN judul_buku
-> ON buku.id_judul=judul_buku.id_judul;

Menampilkan data judul, nama penerbit dan nama pengarangnya


SELECT judul, penerbit, nama
FROM judul_buku
INNER JOIN penerbit ON judul_buku.id_penerbit = penerbit.id_penerbit
INNER JOIN pengarang ON judul_buku.kd_pengarang = pengarang.id_pengarang;
SELECT judul, penerbit
FROM judul_buku
INNER JOIN penerbit ON judul_buku.id_penerbit = penerbit.id_penerbit;
SELECT judul, penerbit
FROM judul_buku
LEFT JOIN penerbit ON judul_buku.id_penerbit = penerbit.id_penerbit;
SELECT judul, penerbit
FROM judul_buku
Menggapai Ilmu Menuju Rahmat 12
RIGHT JOIN penerbit ON judul_buku.id_penerbit = penerbit.id_penerbit;
Perhatikan perbedaan ketiga perintah terakhir di atas beserta hasilnya, dan simpulkan.
Cobalah untuk menghapus data penerbit 'Andi offset' yang ada di tabel penerbit
Kemudian ulangi ketiga perintah di atas
Perhatikan perbedaan perubahan hasil ketiga perintah terakhir di atas beserta hasilnya, dan simpulkan.

BAB 5
Tujuan:
1. Menggunakan Bahasa SQL dengan dua tabel atau lebih
2. Mengenal dan Menggunakan Fungsi Agregat
3. Mengelompokan dan Mengurutkan Tabel
4. Membatasi hasil Query

Fungsi Agregat
Fungsi agregat merupakan fungsi yang disediakan oleh SQL untuk melakukan ringkasan data, bukan
menampilkan data per record.
a. sum(nama_field)
Fungsi sum() digunakan untuk melakukan penjumlahan isi field yang bertipe numerik yang namanya
disebutkan pada namafield yang dijadikan parameter pada fungsi sum().
select sum(thn_terbit) from judul_buku;
+-----------------+
| sum(thn_terbit) |
+-----------------+
| 14020 |
+-----------------+

Perintah diatas digunakan untuk menampilkan jumlah dari tahun terbit yang ada pad tabel judul_buku.
(masa..., tahun kok dijumlahkan??? ya... itu merupakan contoh perintah yang benar, jika dijalankan tidak muncul peringatan
salah. Tapi merupakan perintah yang salah penggunaannya. Sekali lagi ini hanya contoh saja. Tetapi ini jangan diamalkan
dalam kehidupan nyata. Masih banyak amalan yang lain, yang amalan itu merupakan amalan yang sunnah atau baik, tapi
penempatannya tidak benar. Kita harus hati-hati dengan hal ini... ????? :) Kalau jumlahnya gak sama jangan nangis ya... yang
bener yang ada di komputer... masa komputer salah... kalo usernya, atau db administratornya mungkin...:) ).

b. count(nama_field)
Fungsi ini dimaksudkan untuk mengetahui jumlah record dari suatu tabel, berdasarkan kondisi yang
disertakan. Jika kondisi tidak ditulis, maka akan ditampilkan jumlah (semua) record dari tabel. Parameter
yang disertakan bisa berupa nama field boleh juga diganti dengan tanda *.
Untuk mengetahui jumlah anggota yang terdaftar, maka kita bisamenggunakan perintah berikut ini:

select count(*) from anggota;

c. avg(nama_field)
Fungsi ini dipakai untuk memperoleh nilai rata-rata suatu field yang bertipe numerik yang nama fieldnya
disebutkan sebagai parameter.
d. max(nama_field)
Dengan menggunakan fungsi max, kita akan mendapatkan nilai terbesar dari field yang bertipe numerik,
yang nama fieldnya dituliskan dalam parameter. Kebalikan dari fungsi ini adalah min(nama_field).
Kalau kita ingin mengetahui tanggal lahir anggota yang termuda, maka kita bisa menggunakan perintah:

select max(tgllahir) from anggota;


Sedangkan tgllahir anggota yang tertua, perintahnya:

select min(tgllahir) from anggota;

Kalau hanya seperti itu..., hanya muncul tanggalnya saja, kalau pingin tahu siapa namanya gimana?
Sabar dulu... itu nanti... Bukankah Nabi Yakub telah bersabar dalam menghadapi putra-putranya? Bukankah Nabi Yusuf pun
telah bersabar untuk menghadapai berbagai cobaan? Mulai dari perlakuan saudara-saudaranya, cobaan dengan seorang
wanita, dan cobaan akan kekuasaan. Maaf, ini hanya selingan saja....

Mengelompokan dan Mengurutkan Data


a. Group By
Untuk mengelompokkan data, kita bisa menggunakan perintah group by. Misalnya kita pingin
mengetahui anggota dari perpustakaan ini lahirnya dimana saja sih? Maka kita bisa menggunakan
perintah:

Menggapai Ilmu Menuju Rahmat 13


select tmp_lahir from anggota;
tapi semua kota tampil dan ada yang berulang. Nah untuk mengatasinya, perintahkan:
select tmp_lahir from anggota group by tmp_lahir;
Tampilkan Jumlah anggota dari tiap-tiap sekolah.
select sekolah,count(*) from anggota group by sekolah;
+--------------------+----------+
| sekolah | count(*) |
+--------------------+----------+
| MoEHa Punya | 1 |
| MTsN 2 Yk | 1 |
| SD Muhamadiyah | 1 |
| SMP 16 Yk | 1 |
| SMPN 10 Yk | 1 |
| SMPN 2 Yk | 1 |
| STMIK El Rahma | 6 |
| UAD | 2 |
| UGM | 1 |
| UIN Sunan Kalijaga | 1 |
| UNY | 1 |
| UST | 1 |
| UWM | 1 |
+--------------------+----------+
Coba, tampilkan jumlah anggota dikelompokkan berdasarkan tempat lahirnya.

Mengurutkan Data
Order By adalah solusi yang bisa kita gunakan untuk mengurutkan data.
Misalkan kita akan menampilkan data anggota urut berdasarkan nama:
select nama_anggota,tmp_lahir,tgllahir from anggota order by nama_anggota;
Untuk mengurutkan berdasarkan tanggal lahir, caranya:
select nama_anggota,tmp_lahir,tgllahir from anggota order by tgllahir;

Mengurutkan data anggota berdasarkan dua kriteria, tmp_lahir dan nama

select nama_anggota,tmp_lahir from anggota order by tmp_lahir, nama_anggota;


Untuk mengurutkan secara turun(descending) defaultnya urut naik (ascending).
select nama_anggota,tmp_lahir,tgllahir from anggota order by tgllahir desc;

Menggabungkan Antara Fungsi Agregat, Pengelompokan dan Pengurutan

Menampilkan data jumlah anggota tiap-tiap kota tempat lahir urut dari jumlah terkecil sampai terbesar
dan urut berdasarkan nama kota tempat lahir:

select tmp_lahir,count(nama_anggota) as jumlah from anggota group by tmp_lahir


order by jumlah,tmp_lahir;
+------------+--------+
| tmp_lahir | jumlah |
+------------+--------+
| Cilacap | 1 |
| Kebumen | 1 |
| Ngawi | 1 |
| Wakai | 1 |
| Kudus | 2 |
| Yogyakarta | 13 |
+------------+--------+
Kalau hasilnya seperti di atas, antum berhak dimarahi oleh anggota yang dari Palembang (siapa ya???), nggak boleh ikut lari
pagi bareng senat & hmj, karena tidak mau membetulkan datanya…. Kalau dimarahin jangan salahkan saya lho....udah
dibilangin kok ngeyel….!

Menambahkan parameter limit


Menampilkan 5 data pertama
select kd_anggota,nama_anggota from anggota limit 5;
Menampilkan data mulai data ke 12 (setelah data ke 11) sampai data ke 17 (sebanyak 5 data)
select kd_anggota,nama_anggota from anggota limit 11,5;
Coba jalankan perintah berikut:
Menggapai Ilmu Menuju Rahmat 14
select nama_anggota,tgllahir from anggota order by tgllahir limit 1;
select nama_anggota,tgllahir from anggota order by tgllahir desc limit 1;
(Adakah suatu permasalahan yang sudah terselesaikan?)

BAB 6
Tujuan:
1. Menggunakan Program Klien dari Prompt Sistem Operasi
2. Mengenal dan Menggunakan Fungsi di dalam MySQL
3. Menggunakan Fungsi Sistem, dan Fungsi Agregat
Program klien MySQL dari prompt Sistem Operasi
Keluarlah dari mysql, dan masuklah ke konsole. Kemudian jalankan perintah-perintah berikut, dan buat
kesimpulannya:
mysql -e "select * from pengarang" perpustakaan -uroot -p
mysql -e "select * from judul_buku" perpustakaan -uroot -p
mysql -e "delete from judul_buku" perpustakaan -uroot -p
mysql -e "load data infile '/home/uunboy/judul' into table judul_buku fields
terminated by ','" perpustakaan -uroot -pbismillah
mysqlshow -uroot -p
mysqlshow perpustakaan -uroot -p
mysqlshow perpustakaan anggota -uroot -p

Fungsi
Fungsi adalah suatu rutin khusus yang disediakan oleh MySQL untuk melakukan manipulasi suatu data.
Fungsi digunakan sebagai bagian dari suatu perintah SQL (select). Secara umum fungsi dinyatakan
dalam sQL select adalah sebagai berikut:
SELECT fungsi(ekspresi) [FROM namatabel];
Penulisan fungsi dalam MySQL adalah case insensitive.
Fungsi dalam MySQL dibedakan menjadi:
a. Fungsi Sistem
Kelompok ini digunakan untuk memberikan informasi tentang pemakaian server database oleh pemakai.
DATABASE()
LAST_INSERT_ID()
SESSION_USER()
SISTEM_USER()
USER()
VERSION()
BENCHMARK(x,ekspresi)
LOAD_FILE(namafile)

b. Fungsi Agregat
Fungsi Agregat digunakan untuk melakukan summary, merupakan fungsi statistik standar yang
dikenakan pada suatu tabel atau query.

AVG(ekspresi)
COUNT(x)
MAX(ekspresi)
MIN(ekspresi)
MAX(ekspresi)
STD(ekspresi)
STDEV(ekspresi)
SUM(ekspresi)

BAB 7
Tujuan:
1. Mengenal dan Menggunakan Fungsi Aritmatika
2. Mengenal dan Menggunakan Fungsi String
3. Mengenal dan Menggunakan Fungsi Tanggal
4. Mengenal dan Menggunakan Fungsi Logika

c. Fungsi Aritmatika
Menggapai Ilmu Menuju Rahmat 15
Fungsi Aritmatika dipakai untuk melakukan manipulasi data numerik, seperti penjumlahan(+),
pengurangan(-), perkalian(*), dan pembagian(/), sisa hasil bagi(%) yang disertakan dalam perintah
select, atau biasa dikenal dengan istilah operator aritmatika.
Selain operator-operator di atas, ada juga fungsi aritmatika yang lain, yang dapat digunakan untuk
kebutuhan yang lebih kompleks dalam memanipulasi data secara aritmatik.

ABS(x) LOG(x)
ACOS(x) LOG10(x)
ASIN(x) MOD(x,y)
ATAN(x) OCT(x)
ATAN2(x) PI()
BIN(x) POW(x,y)
CEILING(x) POWER(x,y)
CONV(x,daribasis, kebasis) RADIANS(x)
COS(x) RAND()
COT(x) ROUND(x)
DEGREES(x) ROUND(x,y)
EXP(x) SIGN(x)
FLOOR(x) SIN(x)
FORMAT(num,dec) SQRT(x)
GREATEST(x,y,...) TAN(x)
HEX(x) TRUNCATE(x,y)
LEAST(x,y,z,...)
d. Fungsi String
Fungsi string digunakan untuk melakukan manipulasi data teks(string). MySQL menyediakan banyak
fungsi built in untuk melakukan manipulasi teks ini.

ASCII(x) LTRIM(x)
CHAR(x,y,z,...) MID(x,y,z)
COALESCE(ekspresi1,ekspresi2,...) PASSWORD(password)
CONCAT(x,y,z,...) POSITION(x,y)
DECODE(string_biner,string_enkripsi) REPEAT(x,y)
ELT(x,a,b,c,...) REPLACE(x,y,z)
ENCODE(word,string_enkripsi) REVERSE(x)
ENCRYPT(word[,seed]) RIGHT(string,length)
FIELD(x,y,z,...) RPAD(x,y,z)
FIND_IN_SET(x,stringlist) RTRIM(x,y,z)
INSERT(x,y,z,j) SOUNDEX(x)
INSTR(x,y) SPACE(x)
LCASE(x) STRCMP(x)
LEFT(x,y) STRCMP(string1,string2)
LENGTH(x) SUBSTRING_INDEX(x,y,z)
LOAD_FILE(namafile) TRIM([[BOTH OR LEADING or TRAILING][x]
LOCATE(x,y,z) FROM] y)
LOWER(x) UCASE(x)
LPAD(x,y,z) UPPER(x)

e. Fungsi Tanggal
tanggal dalam MySQL menggunakan tanggal dari sistem UNIX, tidak ada masalah sampai dengan
tahun 2069. Semua tahun yang ditulis dengan dua digit diasumsikan tahun tersebut ada pada range
tanggal antara tahun 1970 sampai 2069.

Fungsi-fungsi built-in untuk data tanggal dalam MySQL:


ADDDATE(date, INTERVAL ekspresi_interval) EXTRACT(value FROM date)
CURDATE() FROM_DAYS(days)
CURRENT_DATE() FROM_UNIXTIME(unixtime[,simbolformat])
CURTIME() HOUR(time)
CURRENT_TIME() MINUTE(time)
DATE_ADD(date, INTERVAL ekspresi_interval) MONTH(date)
DATE_FORMAT(date,simbolformat) MONTHNAME(date)
DATE_SUB(date, INTERVAL ekspresi_interval) NOW()
DAYNAME(date) PERIOD_ADD(x,y)
DAYOFMONTH(date) PERIOD_DIFF(x,y)
DAYOFWEEK(date) QUARTER(date)
DAYOFYEAR(date) SECOND(time)
Menggapai Ilmu Menuju Rahmat 16
SEC_TO_TIME(second) TO_DAYS(date)
SUBDATE() UNIX_TIMESTAMP([date])
SYSDATE() WEEK(date[,start])
TIME_FORMAT(time, simbolformat) WEEKDAY(date)
TIME_TO_SEC(time) YEAR(date)

Fungsi Logika
Fungsi logika digunakan untuk melakukan evaluasi suatu ekspresi.

IF(ekspresi1,ekspresi2,ekspresi3)
IFNULL(ekspresi1,ekspresi2)
ISNULL(ekspresi)

BAB 8
Tujuan:
1. Mengadministrasi Database MySQL
2. Mengatur Hak Akses User

Administrasi Database MySQL

Data organisasi atau perusahaan sebaiknya tidak bisa dilihat oleh semua anggota, user atau pegawai,
hanya orang tertentu saja yang diberi hak untuk mengetahui dan menggunakan untuk kepentingan
analisis dan pengambilan keputusan.
Privilege adalah hak dan wewenang yang diberikan kepada pemakai yang telah didefinisikan untuk
dapat mengakses dan mengelola database MySQL. Dalam bahasa yang lebih sederhana adalah hak
akses atau permission.
Superuser database MySQL adalah penanggung jawab dan pengelola database MySQL dengan level
tertinggi, superuser akan menentukan privilege dari setiap pemakai. Privilege mengatur hak mengakses
database, data mana saja yang boleh diakses, dari mana saja bisa mengaksesnya.
Dalam istilah database secara umum superuser database sering disebut dengan administrator database
atau system manager, tergantung pada database yang digunakan. Dalam MySQL superuser bernama
root.

MySQL menggunakan tabel-tabel khusus untuk melakukan pengelolaan pemakai dari privilegenya yang
tersimpan di dalam database dengan nama mysql.

use mysql;

show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+

Tabel columns_priv
Tabel ini digunakan untuk menyimpan informasi privilege pemakai sampai dengan level field.
mysql> desc columns_priv;
+-------------+----------------------------------------------+-----+---+----+------+
| Field | Type |Null |Key|Defa|Extra |
+-------------+----------------------------------------------+-----+---+----+------+
| Host | char(60) binary | |PRI| | |
| Db | char(64) binary | |PRI| | |
| User | char(16) binary | |PRI| | |
| Table_name | char(64) binary | |PRI| | |
Menggapai Ilmu Menuju Rahmat 17
| Column_name | char(64) binary | |PRI| | |
| Timestamp | timestamp(14) | YES | |NULL| |
| Column_priv | set('Select','Insert','Update','References') | | | | |
+-------------+----------------------------------------------+-----+---+----+------+
Tabel db
Berisi informasi database mana saja yang bisa diakses oleh setiap pemakai, dan dari komputer mana.
mysql> desc db;
+-----------------------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------+------+-----+---------+-------+
| Host | char(60) binary | | PRI | | |
| Db | char(64) binary | | PRI | | |
| User | char(16) binary | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+-----------------+------+-----+---------+-------+
Tabel func
mysql> desc func;
+-------+------------------------------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+----------+-------+
| name | char(64) binary | | PRI | | |
| ret | tinyint(1) | | | 0 | |
| dl | char(128) | | | | |
| type | enum('function','aggregate') | | | function | |
+-------+------------------------------+------+-----+----------+-------+
Tabel host
Digunakan untuk menyimpan informasi kompyuter mana saja yang dapat mengakses database MySQL,
siapa nama pemakainya.
mysql> desc host;
+-----------------------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------+------+-----+---------+-------+
| Host | char(60) binary | | PRI | | |
| Db | char(64) binary | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+-----------------+------+-----+---------+-------+
Tabel tables_priv
Tabel ini menyimpan informasi privilege pemakai pada level tabel
mysql> desc tables_priv;
+-------------+-------------------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+-------------+-------------------------+------+-----+---------+-------+
| Host | char(60) binary | | PRI | | |
| Db | char(64) binary | | PRI | | |
| User | char(16) binary | | PRI | | |
| Table_name | char(60) binary | | PRI | | |
| Grantor | char(77) | | MUL | | |
| Timestamp | timestamp(14) | YES | | NULL | |

Menggapai Ilmu Menuju Rahmat 18


| Table_priv |
set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index'
,'Alter') | | | | |
| Column_priv | set('Select','Insert','Update','References')
| | | | |
+-------------+-------------------------+------+-----+---------+-------+
Tabel user
Digunakan untuk menyimpan data pemakai database dan data privilegenya pada saat mengakses ke
dalam database.
mysql> desc user;
+----------------------+---------------------------------+----+---+--------+-------+
| Field | Type |Null|Key|Default | Extra |
+----------------------+---------------------------------+----+---+--------+-------+
| Host | varchar(60) binary | |PRI| | |
| User | varchar(16) binary | |PRI| | |
| password | varchar(16) | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
|Alter_priv | enum('N','Y') | | | N | |
| Show_db_priv | enum('N','Y') | | | N | |
| Super_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv| enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
| Execute_priv | enum('N','Y') | | | N | |
| Repl_slave_priv | enum('N','Y') | | | N | |
| Repl_client_priv | enum('N','Y') | | | N | |
| ssl_type |enum('','ANY','X509','SPECIFIED')| | | | |
| ssl_cipher | blob | | | | |
| x509_issuer | blob | | | | |
| x509_subject | blob | | | | |
| max_questions | int(11) unsigned | | | 0 | |
| max_updates | int(11) unsigned | | | 0 | |
| max_connections | int(11) unsigned | | | 0 | |
+----------------------+---------------------------------+----+---+--------+-------+
Pengelolaan Privilege Pemakai
Cara mendefinisikan pemakai yang diperbolehkan mengakses database MySQL adalah dengan
menambahkan sebuah record kepada tabel user dengan menggunakan perintah Sql secara langsung.
Setelah pemakai dimasukan kedalam tabel user, maka berikutnya yang dilakukan adalah
mendefinisikan privilege pemakai tersebut dalam mengakses dan mengelola database MySQL.
Cara mendefinisikan privilege pemakai dalam MySQL:
a. menggunakan DML
b. Menggunakan DCL
Mendefinisikan Pemakai dan Privilegenya dengan DCL
Perintah yang digunakan : GRANT
sintax:
GRANT [privilege] [all | nama-nama_kolom}
ON namadb.namatbl|*
TO namauser[@hostname]
[IDENTIFIED BY “password”
[WITH GRANT OPTION]
Privilege dalam Grant
Nama Privilege Keterangan

ALL Digunakan untuk memberikan privilege kepada pemakai

ALTER Privilege yang diberikan agar pemakai dapat melakukan


perubahan pada tabel, kolom, dan indeks

Menggapai Ilmu Menuju Rahmat 19


Nama Privilege Keterangan

CREATE Privilege yang memperbolehkan user untuk membuat tabel


atau database

DELETE Privilege yang memperbolehkan user untuk menghapus


record dari tabel

DROP Privilege yang memperbolehkan user untuk menghapus


tabel atau database

FILE Privilege yang memperbolehkan user supaya dapat


melakukan penulisan dan pembacaan file di dalam server

INDEX Privilege yang memperbolehkan user untuk menambah atau


menghapus indeks

INSERT Privilege yang memperbolehkan user untuk menambahkan


record ke dalam tabel

PROCESS Privilege yang memperbolehkan user supaya dapat melihat


dan mematikan proses sistem MySQL

REFERENCES Privilege ini belum diimplementasikan

RELOAD Privilege yang memperbolehkan user untuk dapat


memberikan perintah FLUSH

SELECT Privilege yang memperbolehkan user untuk menggunakan


perintah SELECT

SHUTDOWN Privilege yang memperbolehkan user untuk mematikan


server MySQL

UPDATE Privilege yang memperbolehkan user untuk menggunakan


fungsi UPDATE

Pencabutan privilege dengan DCL


Perintah yang digunakan : REVOKE
sintax:
REVOKE [privileges][nama-nama kolom]
ON namadb.namatbl
FROM namauser.hostname
Lakukan eksplorasi untuk perintah-perintah pendefinisian dan pencabutan pemakai dan privilegenya
baik dengan perintah DML maupun DCL, kemudian simpulkan hasilnya.
FLUSH PRIVILEGES
Setelah selesai melakukan pendefinisian/pencabutan user maupun privilege, maka aturan tidak akan
diberlakukan sebelum dijalankan perintah Flush Privilege. Flush Privilege merupakan perintah yang
memaksa MySQL untuk menggunakan daftar pemakai dan privilegenya dari data pemakai dan privilege
database yang baru.

BAB 9
Tujuan:
1. Backup, Restore, dan Import, Eksport data di MySQL

Backup dan Restore


Menyalin dan membaca kembali isi database ke dalam dan dari file teks.

SELECT * FROM namatabel INTO OUTFILE namafile

contoh:
SELECT * FROM anggota INTO OUTFILE “anggota.txt”

Menggapai Ilmu Menuju Rahmat 20


Menambah Data dari File Teks

load data infile nama_file into table nama_tabel;

cara lain:

mysqlimport namadb namafiledata/namatbl

Menyalin dan membaca kembali isi database ke dalam dan dari perintah SQL

mysqldump [option] namadb [namatabel] > namafile[.sql | .txt ]

Mengeluarkan Struktur Database dan Data

mysqldump -uroot -p perpustakaan > perpus.sql;

Mengeluarkan data saja

mysqldump -t -uroot -p perpustakaan > perpus.sql;

Mengeluarkan Struktur Tabel

mysqldump --no-data -uroot -p perpustakaan > perpus.sql;

Memasukan kembali Data hasil Dump ke dalam Database

mysql [option] namadb < namafile.sql

Menyalin dan membaca kembali isi database ke dalam dan dari satu server ke server lain.
Sintaks :
mysqldump dbygdibackup | mysql --host=namaserver dbpenampung

Menggapai Ilmu Menuju Rahmat 21


BAB 10
Tujuan:
1. Administrsi Database menggunakan Program Bantu Aplikasi
2. Menggunakan mysqlcc
3. Menggunakan phpMyadmin

Lakukanlah eksplorasi dengan program MySQLcc

Menggapai Ilmu Menuju Rahmat 22


Lakukanlah eksplorasi dengan program phpMyAdmin

Menggapai Ilmu Menuju Rahmat 23

You might also like