Materi Praktikum MySQL Part 1-5
Materi Praktikum MySQL Part 1-5
BASISDATA
PENGANTAR MY SQL
LABORATORIUM 4 BASISDATA
Melihat dafar database di komputer :
RUMUS :
SHOW DATABASES;
HASIL :
+--------------------+
| Database
|
+--------------------+
| information_schema |
| mysql
|
| performance_schema |
| webauth
|
+--------------------+
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| lab4
|
| mysql
|
| performance_schema |
| test
|
+--------------------+
5 rows in set (0.00 sec)
CONTOH :
mysql> create table t_mhs(nim varchar(10), nama_mhs
alamat varchar(50), no_telp varchar(12));
varchar(50),
CONTOH :
mysql> insert into t_mhs values( '111051005', 'Sholeh',
'Sleman','085785231478');
Query OK, 1 row affected (0.05 sec)
mysql> select *from t_mhs;
+-----------+----------+--------+--------------+
| nim
| nama_mhs | alamat | no_telp
|
+-----------+----------+--------+--------------+
| 111051005 | Sholeh
| Sleman | 085785231478 |
+-----------+----------+--------+--------------+
5 rows in set (0.00 sec)
Uning
Yuli
Wanto
Catur
Jogja
Bantul
Sleman
Bantul
085786452315
081354687923
088869874563
081244455566
RUMUS :
LOAD(spasi)DATA(spasi)LOCAL(spasi)INFILE(spasi)
LOKASI-FILE(spasi)
INTO(spasi)
TABLE(spasi)
NAMA_TABEL
;
D:\PRAK SMBD_SQL\SN4
CONTOH :
mysql> load data local infile 'D://km1/data.txt' into table
t_mhs;
Query OK, 4 rows affected (0.03 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select*from t_mhs;
+-----------+----------+------------+---------------+
| nim
| nama_mhs | alamat_mhs | no_telp
|
+-----------+----------+------------+---------------+
|111051001 | Uning
| Jogja
| 085786452315
|111051002 | Yuli
| Bantul
| 081354687923
|111051003 | Wanto
| Sleman
| 088869874563
|111051004 | Catur
| Bantul
| 081244455566
+-----------+----------+------------+---------------+
4 rows in set (0.00 sec)
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.03 sec)
Lihat tabel yang ada
mysql> show tables;
+----------------+
| Tables_in_lab4 |
+----------------+
| mat_kul
|
| t_mhs
|
+----------------+
2 rows in set (0.00 sec)
Hapus TABEL
DROP(spasi)TABLE(spasi)NAMA_TABEL
mysql> drop table mat_kul;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_lab4 |
+----------------+
| t_mhs
|
+----------------+
1 row in set (0.00 sec)
Buat database baru
mysql> create database coba;
Query OK, 1 row affected (0.02 sec)
Lihat database yang ada
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| coba
|
| lab4
|
| mysql
|
| performance_schema |
| test
|
+--------------------+
6 rows in set (0.00 sec)
HAPUS DATABASE
mysql> drop database coba;
Query OK, 0 rows affected (0.06 sec)
LATIHAN 1
Kerjakan soal soal di bawah ini dengan teliti..!!
1. Buatlah Database baru bernama RB1_LATIHAN1
2. Buatlah Tabel baru bernama T_Buku dengan kolom sbb :
+-----------+-------------+
| Field
| Type
+-----------+-------------+
| id_buku
| varchar(8)
| nama_buku | varchar(50) |
| pengarang | varchar(50) |
| penerbit
| varchar(50) |
| harga
| int(6)
+-----------+-------------+
| pengarang
| penerbit | harga |
+---------+--------------------+--------------+----------+-------+
|
| Hendi Susan
| Andi Ho
| 85000 |
| 30000 |
+---------+--------------------+--------------+----------+-------+
4. Buat laporan Latihan ini di Ms.Word atau Notepad dengan nama file
RB1_NIM_Latihan1
5. Simpan di Folder masing masing
CODE :
mysql>
create
table
t_pegawai(id_mhs
varchar(12)
primary
key,
nama_peg
ISI TABELNYA
mysql> select*from t_pegawai;
+---------+----------+------------+
| id_peg | nama_peg | alamat_peg |
+---------+----------+------------+
| HRD-001 | Chandra | Jakarta
|
| HRD-002 | Cindy
| Bandung
|
+---------+----------+------------+
2 rows in set (0.00 sec)
LIHAT ERRORNYA..
mysql> insert into t_pegawai values('HRD-001','Budi','Jogja');
ERROR 1062 (23000): Duplicate entry 'HRD-001' for key 'PRIMARY'
memberikan
batasan
bahwa
nilai
dalam
sebuah
kolom
harus
sama)
CODE:
mysql>
create
table
t_parkir(id_parkir
varchar(5)
primary
LIHAT DESKRIPSINYA
mysql> desc t_parkir;
+-----------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id_parkir | varchar(5) | NO
| PRI | NULL
|
|
| plat_no
| varchar(12) | YES | UNI | NULL
|
|
| merk
| varchar(10) | YES |
| NULL
|
|
+-----------+-------------+------+-----+---------+-------+
key,
plat_no
yang
| t_pegawai
+-------------------+
2 rows in set (0.00 sec)
CODE..
mysql> create table IF NOT EXISTS t_pegawai(id_peg varchar(8) primary key,
nama_peg varchar(50), alamat_peg varchar(50));
Query OK, 0 rows affected, 1 warning (0.00 sec)
+-----------+------------+--------+
2 rows in set (0.00 sec)
Lalu kita buat tabel baru dengan nama t_parkir_copy dengan mengduplikasi
seluruh isi dari tabel t_parkir, caranya :
CODE..
mysql> create table t_parkir_copy as select*from t_parkir;
Query OK, 2 rows affected (0.08 sec)
Records: 2
Duplicates: 0
Warnings: 0
bisa
lihat
isi
dari
tabel
t_parkir_copy
sama
dengan
isi
tabel
dari
t_parkir.
+-------+--------+------+-----+---------+-------+
| id
| int(8) | YES
| NULL
+-------+--------+------+-----+---------+-------+
1 row in set (0.01 sec)
Jika kita lihat dengan perintah SHOW TABLES maka temporary tabel tidak akan
muncul
mysql> show tables;
+-------------------+
| Tables_in_minggu2 |
+-------------------+
| t_parkir
| t_parkir_copy
| t_pegawai
+-------------------+
3 rows in set (0.00 sec)
Tetapi kita bisa menginputkan nilai ke temporary table, contohnya :
mysql> insert into t_temporary values('11100010');
Query OK, 1 row affected (0.03 sec)
mysql> insert into t_temporary values('11100011');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t_temporary values('11100012');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t_temporary values('11100013');
Query OK, 1 row affected (0.01 sec)
mysql> select*from t_temporary;
+----------+
| id
|
+----------+
| 11100010 |
| 11100011 |
| 11100012 |
| 11100013 |
+----------+
4 rows in set (0.00 sec)
Tapi jika kita matikan atau tutup MySQL kita maka temporary tabel akan langsung
hilang..
mysql> \q
bye
satu atau beberapa kolom pada table yang merupakan primary key pada
table satu namun diletakan pada table dimana tablenya berelasi dengan
table dirinya
tabel induk
tabel anak
`t_stok_ibfk_1`
FOREIGN
KEY
(`id_mobil`)
Maksudnya adalah tidak dapat menghapus atau mengupdate kolom pada table induk
karena
bereferensi
pada
table
t_stok.
MYSQL,
kita
harus
menambahkan
mereferensikan
perintah
ON
DELETE
foreign
key.
Opsi
[opsi]
pada
dan
ON
perintah
UPDATE
tersebut
A. RESTRICT
Jika tabel anak berisi nilai dalam kolom yang mengkait yang nilainya sama
dengan di kolom terkait pada tabel induk, baris dalam tabel induk tidak bisa
dihapus, dan nilai di kolom terkait tidak dapat diupdate. Ini adalah opsi default
jika klausa ON DELETE atau ON UPDATE tidak dispesifikasikan.
B. CASCADE
Baris-baris dalam tabel anak yang berisi nilai-nilai yang juga terdapat
dalam kolom terkait dari tabel induk dihapus ketika barisbaris yang berkaitan
dihapus dari tabel induk. Baris-baris dalam tabel anak yang berisi nilai-nilai yang
juga terdapat dalam kolom terkait dari tabel induk diupdate ketika nilai-nilai yang
berkaitan diupdate dalam tabel induk.
C. SET NULL
Nilai-nilai dalam kolom yang mengkait dari tabel anak diset ke NULL saat
baris-baris dengan data terkait dalam tabel induk dihapus dari tabel induk atau
ketika data terkait dalam tabel induk diupdate. Untuk menggunakan opsi ini, semua
kolom-kolom yang mengkait dalam tabel anak harus mengijinkan nilai NULL.
D. NO ACTION
Tidak ada aksi yang diambil dalam tabel anak ketika baris-baris dihapus dari
tabel induk atau nilai-nilai dalam kolom terkait dalam tabel induk diupdate.
E. SET DEFAULT
Nilai-nilai dalam kolom-kolom yang mengkait dari tabel anak diset ke nilai
default mereka ketika baris-baris dihapus dari tabel induk atau kolom terkait dari
tabel induk diupdate.
Untuk kali ini kita akan belajar tentang CASCADE, jadi data yang terdapat di tabel induk
dan tabel anak akan sama sama terhapus atau terupdate.
Langkah
pertama
kita
ganti
struktur
dari
tabel
anak
agar
memuat
perintah
untuk
on update cascade);
Query OK, 0 rows affected (0.06 sec)
mysql> desc t_stok;
+----------+------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| id_stok | varchar(8) | NO
| PRI | NULL
|
|
| id_mobil | varchar(8) | YES | MUL | NULL
|
|
| stok
| int(5)
| YES |
| NULL
|
|
+----------+------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
Isi tabelnya lagi
mysql>
insert
into
t_stok
values('ST-001','TOY-01','1000'),('ST-002','TOY-
02','521'),('ST-003','HON-01','875');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
menambah
kolom
dalam
tabel
kita
bisa
menggunakan
perintah
alter
table,
Duplicates: 0
Warnings: 0
| varchar(20) | YES |
| varchar(8) | YES |
| NULL
| NULL
|
|
|
|
| harga
| bigint(11) | YES |
| NULL
|
|
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
t_car
modify
type
varchar(15),
modify
e. Menghapus Kolom
Cara untuk menghapus kolom dengan perintah ALTER TABLE adalah sbb, misal kita akan
menghapus salah satu kolom di t_car, maka caranya :
Cara untuk menghapus & menambah primary key dengan perintah ALTER TABLE adalah sbb,
misal kita akan menghapus & menambah primary key di suatu table, maka caranya :
Hapus primary key
Duplicates: 0
Warnings: 0
mysql>
insert
into
t_parkir
values('11103','AB-5555-UX','HONDA'),
('11104','BH-36-B','SUZUKI'),('11105','N-7876-OK','KIA');
Query OK, 3 rows affected (0.05 sec)
Records: 3
Duplicates: 0
Warnings: 0
| 11102
| B-3454-SDE | BMW
|
| 11103
| AB-5555-UX | HONDA |
| 11104
| BH-36-B
| SUZUKI |
| 11105
| N-7876-OK | KIA
|
+-----------+------------+--------+
5 rows in set (0.00 sec)
Duplicates: 0
Warnings: 0
10.
| N-7876-OK | KIA
|
+------------+-----------+
5 rows in set (0.00 sec)
12.
| B-3454-SDE | BMW
| AB-5555-UX | HONDA
|
|
| 11104
| BH-36-B
| ISUZU |
+-----------+------------+--------+
4 rows in set (0.00 sec)
SELECT Statement
1.
2.
3.
4.
5.
6.
7.
8.
9.
III.
SUB QUERY
1.
2.
3.
4.
Table Join
1.
Cross Join
2.
3.
Natural Join
4.
5.
6.
SELECT Statement
Sebelum kita memulai pembahsan dengan SELECT terlebih dahulu kita siapkan tabel baru
bernama table pegawai.
mysql> create table pegawai(nip varchar(8) primary key, nama_peg varchar(50),
alamat_peg varchar(50), jabatan varchar(20), gaji int(7));
Query OK, 0 rows affected (0.70 sec)
mysql> desc pegawai;
+------------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| nip
| varchar(8) | NO
| PRI | NULL
|
|
| nama_peg
| varchar(50) | YES |
| NULL
|
|
| alamat_peg | varchar(50) | YES |
| NULL
|
|
| jabatan
| varchar(20) | YES |
| NULL
|
|
| gaji
| int(7)
| YES |
| NULL
|
|
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.13 sec)
Lalu kita isikan dengan data yang dudah tersedia
mysql> load data local infile 'D://file.txt' into table pegawai;
Query OK, 15 rows affected (0.63 sec)
Records: 15
Deleted: 0
Skipped: 0
Warnings: 0
Kita juga bisa mengambil seluruh data tapi hanya kolom kolom tertentu dengan
perintah dasar : SELECT <NAMA_KOLOM, NAMA_KOLOM > FROM <NAMA_TABEL>
CONTOH :
mysql> select nip, nama_peg from pegawai;
+----------+-----------------------+
| nip
| nama_peg
|
+----------+-----------------------+
| PEG-1001 | Soeharto Mangundirejo |
| PEG-1002 | Felix Nababan
|
| PEG-1003 | Olga Syahputra
|
| PEG-1004 | Chelsea Olivia
|
| PEG-1005 | Tuti Wardani
|
| PEG-1006 | Budi Drajat
|
| PEG-1007 | Bambang Pamungkas
|
| PEG-1008 | Ely Oktafiani
|
| PEG-1009 | Rani Wijaya
|
| PEG-1010 | Rano Karno
|
| PEG-1011 | Rahmadi Sholeh
|
| PEG-1012 | Ilham Ungara
|
| PEG-1013 | Endang Melati
|
| PEG-1014 | Donny Damara
|
| PEG-1015 | Paijem
|
+----------+-----------------------+
15 rows in set (0.00 sec)
Perintah yang digunakan disini menggunakan WHERE tapi yang membedakan perintah
yang
digunakan
lebih
menunjukkan
kondisi
yang
diinginkan,
dengan
bisa
mysql> select * from pegawai where alamat_peg ='Yogyakarta' AND gaji <
4000000;
+----------+----------------+------------+----------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+----------------+------------+----------------+---------+
| PEG-1008 | Ely Oktafiani | Yogyakarta | Staff Senior
| 3000000 |
| PEG-1011 | Rahmadi Sholeh | Yogyakarta | Staff Junior
| 2000000 |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
+----------+----------------+------------+----------------+---------+
3 rows in set (0.00 sec)
Perintah
diatas
menunjukkan
pemfilteran
dengan
kondisi
yaitu
berdasarkan
select
alamat_peg
from
pegawai;
from pegawai;
+-------------+
| alamat_peg |
+-------------+
| Yogyakarta |
| Medan
|
| Jakarta
|
| Bandung
|
| Jawa Tengah |
| Malang
|
| Kudus
|
| Yogyakarta |
| Magelang
|
| Solo
|
| Yogyakarta |
| Jakarta
|
| Madiun
|
| Makasar
|
| Yogyakarta |
+-------------+
15 rows in set (0.00 sec)
+-------------+
| alamat_peg |
+-------------+
| Yogyakarta |
| Medan
|
| Jakarta
|
| Bandung
|
| Jawa Tengah |
| Malang
|
| Kudus
|
| Magelang
|
| Solo
|
| Madiun
|
| Makasar
|
+-------------+
11
rows
in
set
(0.05
sec)
Pada perintah ini pengurutan data dilakukan tidak hanya berdasar 1 kolom, tetapi
berdasar 2 kolom atau lebihpun bisa.
Agar data bisa terlihat jelas maka coba buat tabel pegawai2 dengan rincian sbb :
mysql> create table pegawai2(nama varchar(20), alamat varchar(20));
Query OK, 0 rows affected (0.47 sec)
mysql> desc pegawai2;
+--------+-------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| nama
| varchar(20) | YES |
| NULL
|
|
| alamat | varchar(20) | YES |
| NULL
|
|
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.11 sec)
mysql> select*from pegawai2;
+------+------------+
| nama | alamat
|
+------+------------+
| Zeze | Yogyakarta |
| Zeze | Jakarta
|
| Riza | Bandung
|
| Riza | Aceh
|
| Amir | Demak
|
| Amir | Cilacap
|
+------+------------+
6 rows in set (0.00 sec)
Kita sudah punya tabel baru yang menunjukkan data pada kolom nama ada yang sama,
tapi di kolom alamat berbeda maka bisa diurutkan sbb :
mysql> select nama, alamat from pegawai2 ORDER BY nama, alamat;
+------+------------+
| nama | alamat
|
+------+------------+
| Amir | Cilacap
|
| Amir | Demak
|
| Riza | Aceh
|
| Riza | Bandung
|
| Zeze | Jakarta
|
| Zeze | Yogyakarta |
+------+------------+
6 rows in set (0.00 sec)
mysql> select * from pegawai2 ORDER BY nama, alamat desc;
+------+------------+
| nama | alamat
|
+------+------------+
| Amir | Demak
|
| Amir | Cilacap
|
| Riza | Bandung
|
| Riza | Aceh
|
| Zeze | Yogyakarta |
| Zeze | Jakarta
|
+------+------------+
6 rows in set (0.00 sec)
Pada tabel ini telah diurutkan nama terlebih dahulu seteleh itu baru mengurutkan
berdasarkan alamat.
BETWEEN
digunakan
untuk
memfilter
data
diantara
dua
nilai
yang
dispesifikkan
mysql> select * from pegawai WHERE gaji BETWEEN 4000000 AND 9000000;
+----------+-----------------------+-------------+-------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+-----------------------+-------------+-------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
| Manager
| 8000000 |
| PEG-1003 | Olga Syahputra
| Jakarta
| Kepala Unit | 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
| Kepala Unit | 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah | Supervisor | 4500000 |
| PEG-1006 | Budi Drajat
| Malang
| Supervisor | 4500000 |
+----------+-----------------------+-------------+-------------+---------+
6 rows in set (0.00 sec)
Perintah diatas menunjukkan penampilan gaji diantara 4jt dan 9jt .
Jika perintah BETWEEN dilakukan untuk mencari data dalam range, ada juga NOT
BETWEEN untuk mencari data diluar range yang kita tentukan.
CATATAN : penginputan range diawali dengan urutan yang lebih kecil, contoh 4jt
9jt, atau Ely O Olga S
mysql> select nama_peg, gaji from pegawai WHERE nama_peg NOT BETWEEN "Ely Oktafi
ani" AND "Olga Syahputra";
+-----------------------+---------+
| nama_peg
| gaji
|
+-----------------------+---------+
| Soeharto Mangundirejo | 9000000 |
| Chelsea Olivia
| 6000000 |
| Tuti Wardani
| 4500000 |
| Budi Drajat
| 4500000 |
| Bambang Pamungkas
| 3000000 |
| Rani Wijaya
| 3000000 |
| Rano Karno
| 2000000 |
| Rahmadi Sholeh
| 2000000 |
| Donny Damara
| 1000000 |
| Paijem
| 500000 |
+-----------------------+---------+
10 rows in set (0.00 sec)
Menunjukkan hasil dari NOT BETWEEN dalam menampilkan data yang bukan antara Ely
Oktafiani dan Olga Syahputra
Perintah untuk menunjukkan nilai maksimal atau minimal ataupun nilai rata rata
juga bisa kita lakukan di MySQL, dengan perintah SELECT diikuti oleh MIN, MAX,
atau AVERAGE, untuk lebih jelasnya kita lihat contoh :
Mencari nilai MINIMAL MIN
mysql> select MIN(gaji) from pegawai;
+-----------+
| MIN(gaji) |
+-----------+
|
500000 |
+-----------+
1 row in set (1.05 sec)
Mencari nilai MAKSIMAL MAX
mysql> select MAX(gaji) from pegawai;
+-----------+
| MAX(gaji) |
+-----------+
|
9000000 |
+-----------+
1 row in set (0.00 sec)
Mencari nilai RATA - RATA AVG
mysql> select AVG(gaji) from pegawai;
+--------------+
| AVG(gaji)
|
+--------------+
| 3766666.6667 |
+--------------+
1 row in set (0.41 sec)
Menghitung Nilai Total SUM
mysql> select SUM(gaji) from pegawai;
+-----------+
| SUM(gaji) |
+-----------+
| 56500000 |
+-----------+
1 row in set (0.39 sec)
SUB QUERY
Sub Query adalah penggunaan statement SELECT di dalam statement SELECT, Sub
Query dideklarasikan di dalam perintah my qsl di dalam tanda (), dan biasa
menggunakan salah satu dari statemen SELECT, UPDATE, SET, DELETE, atau DO
CONTOH :
mysql> select nama_peg, gaji from pegawai where gaji = (select max(gaji) from pe
gawai);
+-----------------------+---------+
| nama_peg
| gaji
|
+-----------------------+---------+
| Soeharto Mangundirejo | 9000000 |
+-----------------------+---------+
1 row in set (0.06 sec)
Perintah ini hanya bisa menerima satu(1) buah hasil dari sub query, jika hasil
dari sub query ada lebih adari satu maka akan terjadi error.
mysql> select nama_peg, gaji from pegawai where alamat_peg = (select alamat_peg
from pegawai where alamat_peg LIKE 'J%');
ERROR 1242 (21000): Subquery returns more than 1 row
Perintah diatas ini ERROR karena hasil sub query diatas ada lebih dari satu(1)
ALL
diikuti
dengan
operator
perbandingan
digunakan
memiliki
arti
menampilkan nilai jika perbandingan bernilai benar untuk semua data. Berikut
adalah contoh penggunaannya.
mysql> select nama_peg, gaji from pegawai where gaji < ALL(select gaji FROM pega
wai WHERE gaji > '2500000');
+----------------+---------+
| nama_peg
| gaji
|
+----------------+---------+
| Rano Karno
| 2000000 |
| Rahmadi Sholeh | 2000000 |
| Ilham Ungara
| 2000000 |
| Endang Melati | 2000000 |
| Donny Damara
| 1000000 |
| Paijem
| 500000 |
+----------------+---------+
6 rows in set (0.00 sec)
Contoh
diatas menunjukkan
penampilan
gajinya yang
Command ANY diikuti dengan operator perbandingan memiliki arti menampilkan nilai
yang sesuai dengan apapun yang dihasilkan oleh sub query. Alias dari ANY adalah
SOME. Berikut adalah contohnya:
mysql> select nama_peg, gaji from pegawai where gaji < ANY(select gaji FROM pega
wai WHERE gaji > '2000000');
+-------------------+---------+
| nama_peg
| gaji
|
+-------------------+---------+
| Felix Nababan
| 8000000 |
| Olga Syahputra
| 6000000 |
| Chelsea Olivia
| 6000000 |
| Tuti Wardani
| 4500000 |
| Budi Drajat
| 4500000 |
| Bambang Pamungkas | 3000000 |
| Ely Oktafiani
| 3000000 |
| Rani Wijaya
| 3000000 |
| Rano Karno
| 2000000 |
| Rahmadi Sholeh
| 2000000 |
| Ilham Ungara
| 2000000 |
| Endang Melati
| 2000000 |
| Donny Damara
| 1000000 |
| Paijem
| 500000 |
+-------------------+---------+
14 rows in set (0.00 sec)
Pada perintah diatas kita perhatikan perintah select yang berada di dalam kurung
(Sub Query), pada perintah itu menjelaskan bahwa penampilan daftar nama pegawai
yang gajinya lebih dari 2jt, sedangkan Quert seutuhnya menampilkan nama pegawai
yang gajinya lebih kecil daripada hasil sub query, Soeharto Mangundirejo tidak
keluar di hasil karena tidak ada yang mempunyai gaji sebesar dirinya.
mysql> select nama_peg, gaji from pegawai where gaji < SOME(select gaji FROM peg
awai WHERE gaji > '2000000');
+-------------------+---------+
| nama_peg
| gaji
|
+-------------------+---------+
| Felix Nababan
| 8000000 |
| Olga Syahputra
| 6000000 |
| Chelsea Olivia
| 6000000 |
| Tuti Wardani
| 4500000 |
| Budi Drajat
| 4500000 |
| Bambang Pamungkas | 3000000 |
| Ely Oktafiani
| 3000000 |
| Rani Wijaya
| 3000000 |
| Rano Karno
| 2000000 |
| Rahmadi Sholeh
| 2000000 |
| Ilham Ungara
| 2000000 |
| Endang Melati
| 2000000 |
| Donny Damara
| 1000000 |
| Paijem
| 500000 |
+-------------------+---------+
14 rows in set (0.45 sec)
maka
Query
utama
tidak
akan
dijalankan.
Lawan
dari
statement
EXISTS
+----------+-----------------------+-------------+----------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+-----------------------+-------------+----------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
| Manager
| 8000000 |
| PEG-1003 | Olga Syahputra
| Jakarta
| Kepala Unit
| 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
| Kepala Unit
| 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah | Supervisor
| 4500000 |
| PEG-1006 | Budi Drajat
| Malang
| Supervisor
| 4500000 |
| PEG-1007 | Bambang Pamungkas
| Kudus
| Staff Senior
| 3000000 |
| PEG-1008 | Ely Oktafiani
| Yogyakarta | Staff Senior
| 3000000 |
| PEG-1009 | Rani Wijaya
| Magelang
| Staff Senior
| 3000000 |
| PEG-1010 | Rano Karno
| Solo
| Staff Junior
| 2000000 |
| PEG-1011 | Rahmadi Sholeh
| Yogyakarta | Staff Junior
| 2000000 |
| PEG-1012 | Ilham Ungara
| Jakarta
| Staff Junior
| 2000000 |
| PEG-1013 | Endang Melati
| Madiun
| Staff Junior
| 2000000 |
| PEG-1014 | Donny Damara
| Makasar
| Tenaga Kontrak | 1000000 |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
+----------+-----------------------+-------------+----------------+---------+
15 rows in set (0.00 sec)
Dari perintah diatas menunjukkan bahwa Query utama dieksesusi karena Sub Query
bernilai TRUE atau ada hasilnya
mysql> select * from pegawai where EXISTS (select * from pegawai where alamat_pe
g = 'Kebumen');
Empty set (0.00 sec)
Sedangkan perintah ini tidak dijalankan karena Sub Query bernilai FALSE atau
tidak ada hasilnya.
Jika kita ganti EXISTS dengan NOT EXISTS maka hasil akan keluar seperti di bawah
ini, karena memang alamat-peg tidak ada yang bernilai Kebumen
mysql> select * from pegawai where NOT EXISTS (select * from pegawai where alama
t_peg = 'Kebumen');
+----------+-----------------------+-------------+----------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+-----------------------+-------------+----------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
| Manager
| 8000000 |
| PEG-1003 | Olga Syahputra
| Jakarta
| Kepala Unit
| 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
| Kepala Unit
| 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah | Supervisor
| 4500000 |
| PEG-1006 | Budi Drajat
| Malang
| Supervisor
| 4500000 |
| PEG-1007 | Bambang Pamungkas
| Kudus
| Staff Senior
| 3000000 |
| PEG-1008 | Ely Oktafiani
| Yogyakarta | Staff Senior
| 3000000 |
| PEG-1009 | Rani Wijaya
| Magelang
| Staff Senior
| 3000000 |
| PEG-1010 | Rano Karno
| Solo
| Staff Junior
| 2000000 |
| PEG-1011 | Rahmadi Sholeh
| Yogyakarta | Staff Junior
| 2000000 |
| PEG-1012 | Ilham Ungara
| Jakarta
| Staff Junior
| 2000000 |
| PEG-1013 | Endang Melati
| Madiun
| Staff Junior
| 2000000 |
| PEG-1014 | Donny Damara
| Makasar
| Tenaga Kontrak | 1000000 |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
+----------+-----------------------+-------------+----------------+---------+
15 rows in set (0.00 sec)
buat
terlebih
dahulu
sebuah
tabel
yang
menunjukkan
hasil
yang
kita
inginkan, contoh tabel Job ini digunakan untuk menampilkan data yang hasil dari
sub query lebih dari satu.
Table Join
Dalam basis data relasional, kita mengenal relasi antar tabel. Untuk melakukan query
terhadap dua atau lebih tabel yang memiliki relasi, kita bisa menggunakan fitur table
join di MySQL.
Sebelum
kita
mulai
mempelajari
Table
Join
kita
persiapkan
dulu
Tabel-tabel
pendukungnya :
mysql> desc jabatan;
+------------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id_jabatan | int(2)
| NO
| PRI | NULL
|
|
| nm_jabatan | varchar(20) | YES |
| NULL
|
|
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.22 sec)
mysql> select * from jabatan;
+------------+----------------+
| id_jabatan | nm_jabatan
|
+------------+----------------+
|
1 | C.E.O
|
|
2 | Manager
|
|
3 | kepala Unit
|
|
4 | Supervisor
|
|
5 | Staff Senior
|
|
6 | Staff Junior
|
|
7 | Tenaga Kontrak |
+------------+----------------+
7 rows in set (0.00 sec)
Setelah kita punya table jabatan / job, kita buat tabel baru untuk menerapkan join,
kita copykan table pegawai ke tabel pegawai_join
mysql> create table pegawai_join AS (select*from pegawai);
Query OK, 15 rows affected (0.45 sec)
Records: 15
Duplicates: 0
Warnings: 0
Duplicates: 0
Warnings: 0
<nama_table1>
nama_kolom2>
WHERE
<nama_table2>
//data
SET
yang
<nama_table1.nama_kolom>
sama//
<nama_table1.
<nama_table1.nama_kolom1>
<nama_table2.nama_kolom2>
mysql> UPDATE pegawai_join, jabatan SET pegawai_join.id_jabatan = jabatan.id_jabatan
WHERE pegawai_join.jabatan=jabatan.nm_jabatan;
Query OK, 15 rows affected (0.48 sec)
Rows matched: 15
Changed: 15
Warnings: 0
+----------+-----------------------+-------------+------------+----------------+---------+
| nip
| nama_peg
| alamat_peg | id_jabatan | jabatan
| gaji
|
+----------+-----------------------+-------------+------------+----------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah |
4 | Supervisor
| 4500000 |
| PEG-1006 | Budi Drajat
| Malang
|
4 | Supervisor
| 4500000 |
| PEG-1007 | Bambang Pamungkas
| Kudus
|
5 | Staff Senior
| 3000000 |
| PEG-1008 | Ely Oktafiani
| Yogyakarta |
5 | Staff Senior
| 3000000 |
| PEG-1009 | Rani Wijaya
| Magelang
|
5 | Staff Senior
| 3000000 |
| PEG-1010 | Rano Karno
| Solo
|
6 | Staff Junior
| 2000000 |
| PEG-1011 | Rahmadi Sholeh
| Yogyakarta |
6 | Staff Junior
| 2000000 |
| PEG-1012 | Ilham Ungara
| Jakarta
|
6 | Staff Junior
| 2000000 |
| PEG-1013 | Endang Melati
| Madiun
|
6 | Staff Junior
| 2000000 |
| PEG-1014 | Donny Damara
| Makasar
|
7 | Tenaga Kontrak | 1000000 |
| PEG-1015 | Paijem
| Yogyakarta |
7 | Tenaga Kontrak | 500000 |
+----------+-----------------------+-------------+------------+----------------+---------+
1. Cross Join
Operasi tabel yang pertama adalah cross join atau disebut juga sebagai Cartesian
join. Pada cross join,
adalah contohnya
SYNTAX DASAR
SELECT * FROM <nama_tabel1>, <nama_tabel2>;
mysql> select * from pegawai_join, jabatan;
mysql> select * from pegawai_join, jabatan;
+----------+-----------------------+-------------+------------+----------------+---------+------------+----------------+
| nip
| nama_peg
| alamat_peg | id_jabatan | jabatan
| gaji
| id_jabatan | nama_jabatan
|
+----------+-----------------------+-------------+------------+----------------+---------+------------+----------------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |1
| C.E.O
|
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |2
| Manager
|
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |3
| Kepala Unit
|
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |4
| Supervisor
|
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |5
| Staff Senior
|
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |6
| Staff Junior
|
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta |
1 | C.E.O
| 9000000 |7
| Tenaga Kontrak |
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |1
| C.E.O
|
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |2
| Manager
|
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |3
| Kepala Unit
|
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |4
| Supervisor
|
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |5
| Staff Senior
|
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |6
| Staff Junior
|
| PEG-1002 | Felix Nababan
| Medan
|
2 | Manager
| 8000000 |7
| Tenaga Kontrak |
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |1
| C.E.O
|
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |2
| Manager
|
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |3
| Kepala Unit
|
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |4
| Supervisor
|
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |5
| Staff Senior
|
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |6
| Staff Junior
|
| PEG-1003 | Olga Syahputra
| Jakarta
|
3 | Kepala Unit
| 6000000 |7
| Tenaga Kontrak |
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |1
| C.E.O
|
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |2
| Manager
|
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |3
| Kepala Unit
|
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |4
| Supervisor
|
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |5
| Staff Senior
|
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |6
| Staff Junior
|
| PEG-1004 | Chelsea Olivia
| Bandung
|
3 | Kepala Unit
| 6000000 |7
| Tenaga Kontrak |
| PEG-1005 | Tuti Wardani
| Jawa Tengah |
4 | Supervisor
| 4500000 |1
| C.E.O
|
| PEG-1005 | Tuti Wardani
| Jawa Tengah |
4 | Supervisor
| 4500000 |2
| Manager
|
| PEG-1005 | Tuti Wardani
| Jawa Tengah |
4 | Supervisor
| 4500000 |3
| Kepala Unit
|
| PEG-1005 | Tuti Wardani
| Jawa Tengah |
4 | Supervisor
| 4500000 |4
| Supervisor
|
|
|
|
|
|
|
|
PEG-1005
PEG-1005
PEG-1005
PEG-1006
PEG-1006
PEG-1006
PEG-1006
|
|
|
|
|
|
|
Tuti
Tuti
Tuti
Budi
Budi
Budi
Budi
Wardani
Wardani
Wardani
Drajat
Drajat
Drajat
Drajat
|
|
|
|
|
|
|
Jawa Tengah
Jawa Tengah
Jawa Tengah
Malang
Malang
Malang
Malang
| Malang
| Malang
| Malang
|
|
|
|
|
|
|
4
4
4
4
4
4
4
|
|
|
|
|
|
|
Supervisor
Supervisor
Supervisor
Supervisor
Supervisor
Supervisor
Supervisor
|
|
|
4 | Supervisor
4 | Supervisor
4 | Supervisor
|
|
|
|
|
|
|
4500000
4500000
4500000
4500000
4500000
4500000
4500000
|5
|6
|7
|1
|2
|3
|4
| 4500000 |5
| 4500000 |6
| 4500000 |7
|
|
|
|
|
|
|
Staff Senior
Staff Junior
Tenaga Kontrak
C.E.O
Manager
Kepala Unit
Supervisor
|
|
|
|
|
|
|
| Staff Senior
|
| Staff Junior
|
| Tenaga Kontrak |
Pada Cros Join semua data di table pegawai akan direlasikan satu persatu dengan
data di table jabatan.
Jadi ada 105 baris hasil cross join.
SELECT
FROM
pegawai
INNER
JOIN
jabatan
ON
pegawai.jabatan
jabatan.nama_jabatan;
+----------+-----------------------+-------------+----------------+---------+------------+----------------+
| nip
| nama_peg
| alamat_peg
| jabatan
| gaji
| id_jabatan | nama_jabatan
+----------+-----------------------+-------------+----------------+---------+------------+----------------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta
| C.E.O
| 9000000 |
1 | C.E.O
| Medan
| Manager
| 8000000 |
2 | Manager
| Jakarta
| Kepala Unit
| 6000000 |
3 | Ke pala Unit
| Bandung
| Kepala Unit
| 6000000 |
3 | Kepala Unit
| 4500000 |
4 | Supervisor
| Malang
| Supervisor
| 4500000 |
4 | Supervisor
| Kudus
| Staff Senior
| 3000000 |
5 | Staff Senior
| Yogyakarta
| Staff Senior
| 3000000 |
5 | Staff Senior
| Magelang
| Staff Senior
| 3000000 |
5 | Staff Senior
| Solo
| Staff Junior
| 2000000 |
6 | Staff Junior
| Yogyakarta
| Staff Junior
| 2000000 |
6 | Staff Junior
| Jakarta
| Staff Junior
| 2000000 |
6 | Staff Junior
| Madiun
| Staff Junior
| 2000000 |
6 | Staff Junior
| Makasar
7 | Tenaga Kontrak |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
7 | Tenaga Kontrak |
+----------+-----------------------+-------------+----------------+---------+------------+----------------+
3. Natural Join
Natural
join sebenarnya
mirip dengan
INNER
JOIN.
Namun kita
tidak perlu
menspesifikasikan kolom mana yang ingin kita bandingkan. Secara automatis, MySQL
akan
mencari
kolom
pada
dua
buah
tabel
yang
memiliki
nilai
yang
sama
dan
| nama_peg
| alamat_peg
| jabatan
| gaji
| nama_jabatan
+------------+----------+-----------------------+-------------+----------------+---------+----------------+
|
| C.E.O
| 9000000 | C.E.O
| Medan
| Manager
| 8000000 | Manager
|
|
| Jakarta
| Kepala Unit
| Bandung
| Kepala Unit
| 4500000 | Supervisor
| Malang
| Supervisor
| 4500000 | Supervisor
| Kudus
| Staff Senior
| Yogyakarta
| Staff Senior
| Magelang
| Staff Senior
| Solo
| Staff Junior
| Yogyakarta
| Staff Junior
| Jakarta
| Staff Junior
| Madiun
| Staff Junior
| Makasar
7 | PEG-1015 | Paijem
| Yogyakarta
| Tenaga Kontrak |
+------------+----------+-----------------------+-------------+----------------+---------+----------------+
15 rows in set (0.00 sec)
Kemudian jika kita lakukan LEFT JOIN dengan tabel jobs yang kita sebut terlebih
dahulu (atau di sebelah kiri) maka akan muncul sebagai berikut:
Meskipun pada tabel jabatan ada data yang belum direferensi, namun data tersebut tetap ditampilkan dan
diberi nilai NULL untuk nilai di tabel pegawai_join yang belum diketahui. Hal yang sama juga berlaku untuk
RIGHT JOIN, kali ini dengan tabel jabatan berada di sebelah kanan.
dapat
melakukan
UPDATE <table1>,
<conditions>
update
<table2>
menggunakan
SET
Join
<column_name>
Misal,
menjadi
'Bono'.
table.
Bentuk
sintaksnya
'new_value'
WHERE
Changed: 1
Warnings: 0
mysql> SELECT nip, nama_peg, jabatan FROM pegawai_join INNER JOIN jabatan USING
(id_jabatan) LIMIT 3;
+----------+---------------------+-------------+
| nip
| nama_peg
| jabatan
|
+----------+---------------------+-------------+
| PEG-1001 | Soeharto Mangantelo | C.E.O
|
| PEG-1002 | Felix Nababan
| Manager
|
| PEG-1003 | Olga Syahputra
| Kepala Unit |
+----------+---------------------+-------------+
3 rows in set (0.00 sec)
DELETE
pegawai_join
pegawai_join.id_jabatan
FROM
pegawai_join,
jabatan.id_jabatan
'Manager';
Query OK, 1 row affected (0.05 sec)
AND
jabatan
WHERE
jabatan.nama_jabatan
mysql> SELECT nip, nama_peg, jabatan FROM pegawai_join INNER JOIN jabatan USING
(id_jabatan) LIMIT 3;
+----------+---------------------+-------------+
| nip
| nama_peg
| jabatan
|
+----------+---------------------+-------------+
| PEG-1001 | Soeharto Mangantelo | C.E.O
|
| PEG-1003 | Olga Syahputra
| Kepala Unit |
| PEG-1004 | Chelsea Olivia
| Kepala Unit |
+----------+---------------------+-------------+
3 rows in set (0.00 sec)
13. View
a. Algorithm Attributes
b. Updatable View
c. Klausa WITH CHECK OPTION
d. Merubah View
e. Melihat definisi pembuatan view
14. Trigger
a. Membuat trigger
b. BEFORE TRIGGER
c. AFTER TRIGGER
d. Melihat trigger yang sudah dibuat
VIEW
View adalah query tersimpan yang menghasilkan result set ketika dipanggil. View
bertindak sebagai tabel virtual. Beberapa hal yang tidak boleh digunakan pada query
yang mendefinisikan view adalah sebagai berikut:
definisi view tidak boleh memiliki sub query di klausa FROM dari statement SQL
variabel user, sistem, atau lokal tidak boleh digunakan dalam sebuah SQL
SELECT
view tidak dapat merujuk ke tabel temporer
trigger tidak dapat diasosiasikan terhadap sebuah view
view
yang
dibuat
di
dalam
stored
procedure
tidak
dapat
merujuk
kepada
Setelah view dibuat, view dapat diquery seperti tabel biasa. Bentuk dasar pembuatan
view adalah sebagai berikut:
1. Algorithm Attributes
Algorithm attributes memberikan kendali bagaimana MySQL memproses view. Atribut
ini bersifat opsional. Atribut algoritma menerima tiga buah nilai, yaitu MERGE,
TEMPTABLE, dan UNDEFINED.
Default algoritma yang dipilih adalah UNDEFINED.
Untuk algoritma MERGE, teks dari statement query yang merujuk ke sebuah view dan
definisi
view
digabung
sedemikian
sehingga
bagian
dari
definisi
view
algoritma
UNDEFINED,
MySQL
memilih
sendiri
algoritma
mana
yang
akan
digunakan. MySQL lebih memilih MERGE karena biasanya lebih efisien. Selain itu,
view
yang
menggunakan
TEMPTABLE
tidak
dapat
diupdate
karena
menggunakan
temporary table.
Berikut adalah contoh pembuatan view menggunakan atribut algoritma MERGE.
mysql>
CREATE
nama_pegawai,gaji)
ALGORITHM
AS
SELECT
MERGE
nip,
VIEW
nama_peg,
v_merge
gaji
FROM
(nomor_induk_pegawai,
pegawai
WHERE
gaji
>
2000000;
Query OK, 0 rows affected (0.03 sec)
mysql> select*from v_merge;
+---------------------+-----------------------+---------+
| nomor_induk_pegawai | nama_pegawai
| gaji
|
+---------------------+-----------------------+---------+
| PEG-1001
| Soeharto Mangundirejo | 9000000 |
| PEG-1002
| Felix Nababan
| 8000000 |
| PEG-1003
| Olga Syahputra
| 6000000 |
| PEG-1004
| Chelsea Olivia
| 6000000 |
| PEG-1005
| Tuti Wardani
| 4500000 |
| PEG-1006
| Budi Drajat
| 4500000 |
| PEG-1007
| Bambang Pamungkas
| 3000000 |
| PEG-1008
| Ely Oktafiani
| 3000000 |
| PEG-1009
| Rani Wijaya
| 3000000 |
+---------------------+-----------------------+---------+
9 rows in set (0.00 sec)
Adanya tambahan syntax ALGORITHM=MERGE tersebut bertujuan untuk mendeklarasikan
Algoritma mana yang kita pilih, jika kita tidak mendeklarasikannya punjuga bisa
karena MySQL bisa memilih sendiri contoh :
mysql> CREATE VIEW v_merge2(nomor_induk_pegawai, nama_pegawai, gaji) AS SELECT n
ip, nama_peg, gaji FROM pegawai WHERE gaji > 2000000;
Query OK, 0 rows affected (0.03 sec)
mysql> select*from v_merge2;
+---------------------+-----------------------+---------+
| nomor_induk_pegawai | nama_pegawai
| gaji
|
+---------------------+-----------------------+---------+
| PEG-1001
| Soeharto Mangundirejo | 9000000 |
| PEG-1002
| Felix Nababan
| 8000000 |
| PEG-1003
| Olga Syahputra
| 6000000 |
| PEG-1004
| Chelsea Olivia
| 6000000 |
| PEG-1005
| Tuti Wardani
| 4500000 |
| PEG-1006
| Budi Drajat
| 4500000 |
| PEG-1007
| Bambang Pamungkas
| 3000000 |
| PEG-1008
| Ely Oktafiani
| 3000000 |
| PEG-1009
| Rani Wijaya
| 3000000 |
+---------------------+-----------------------+---------+
9 rows in set (0.00 sec)
Algoritma
MERGE
tidak
dapat
digunakan
ketika
view
memerlukan
penggunaan
CREATE
ALGORITHM
TEMPTABLE
VIEW
v_temptable(nomor_induk_pegawai,
nama_pegawai, gaji) AS SELECT nip, nama_peg, gaji FROM pegawai WHERE gaji >
2000000 LIMIT 5;
Query OK, 0 rows affected (0.03 sec)
mysql> select * from v_temptable;
+---------------------+-----------------------+---------+
| nomor_induk_pegawai | nama_pegawai
| gaji
|
+---------------------+-----------------------+---------+
| PEG-1001
| Soeharto Mangundirejo | 9000000 |
| PEG-1002
| Felix Nababan
| 8000000 |
| PEG-1003
| Olga Syahputra
| 6000000 |
| PEG-1004
| Chelsea Olivia
| 6000000 |
| PEG-1005
| Tuti Wardani
| 4500000 |
+---------------------+-----------------------+---------+
5 rows in set (0.00 sec)
Ketika kita mendefinisikan VIEW menggunakan algoritma TEMPTABLE tidak muncul
pesan warning.
2. Updateable VIEW
Ada beberapa view yang dapat diupdate menggunakan statement UPDATE, DELETE, atau
INSERT.
Update juga dilakukan pada tabel yang dirujuk view tersebut. Supaya sebuah view
dapat diupdate, harus ada hubungan satu-satu antara baris dalam view dengan
baris pada tabelnya. Selain view yang dapat diupdate ada juga view yang tidak
dapat diupdate, yaitu view yang memiliki:
fungsi aggregat, seperti SUM(), MIN(), MAX(), COUNT().
DISTINCT
GROUP BY
HAVING
sub query di SELECT
Join-join tertentu
Nonupdatable view di klausa FROM
Sebuah subquery di klausa WHERE yang merujuk ke sebuah tabel dalam
klausa FROM.
Hanya merujuk ke nilai literal (tidak merujuk ke sebuah tabel)
Menggunakan ALGORITHM = TEMPTABLE (penggunaan temporary table membuat
view
Changed: 1
Warnings: 0
view
bukan
hanya
merubah
data
dlm
view
tetapi
merubah
data
secara
keseluruhan.
Kita bisa lihat sbb :
mysql> select * from pegawai;
+----------+-----------------------+-------------+----------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+-----------------------+-------------+----------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
| Manager
| 8000000 |
| PEG-1003 | Olga Syahrini
| Jakarta
| Kepala Unit
| 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
| Kepala Unit
| 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah | Supervisor
| 4500000 |
| PEG-1006 | Budi Drajat
| Malang
| Supervisor
| 4500000 |
| PEG-1007 | Bambang Pamungkas
| Kudus
| Staff Senior
| 3000000 |
| PEG-1008 | Ely Oktafiani
| Yogyakarta | Staff Senior
| 3000000 |
| PEG-1009 | Rani Wijaya
| Magelang
| Staff Senior
| 3000000 |
| PEG-1010 | Rano Karno
| Solo
| Staff Junior
| 2000000 |
| PEG-1011 | Rahmadi Sholeh
| Yogyakarta | Staff Junior
| 2000000 |
| PEG-1012 | Ilham Ungara
| Jakarta
| Staff Junior
| 2000000 |
| PEG-1013 | Endang Melati
| Madiun
| Staff Junior
| 2000000 |
| PEG-1014 | Donny Damara
| Makasar
| Tenaga Kontrak | 1000000 |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
+----------+-----------------------+-------------+----------------+---------+
15 rows in set (0.00 sec)
Sekarang kita coba mengupdate view yang memuat larangan tadi, contoh kita akan
mengupdate v_temptable yang merupakan temptable view, maka syntaxnya :
mysql> UPDATE v_temptable SET nama_pegawai = 'Chelsea' WHERE nama_pegawai=
'Chelsea Olivia';
ERROR 1288 (HY000): The target table v_temptable of the UPDATE is not updatable
CHECK OPTION adalah LOCAL dan CASCADED. Parameter LOCAL berarti pengecekan hanya
dilakukan pada view yang didefinisikan. Parameter CASCADED berarti pengecekan
dilakukan pada view beserta tabel yang direferensi oleh view tersebut. Secara
default, pendefinisian CHECK OPTION bernilai CASCADED.
Berikut adalah contoh definisi view menggunakan CHECK OPTION:
mysql> CREATE VIEW v_1 AS SELECT nip, nama_peg, gaji FROM pegawai WHERE gaji
<2000000 WITH CHECK OPTION;
Query OK, 0 rows affected (0.03 sec)
mysql> select * from v_1;
+----------+---------------+---------+
| nip
| nama_peg
| gaji
|
+----------+---------------+---------+
| PEG-1014 | Donny Damara | 1000000 |
| PEG-1015 | Paijem
| 500000 |
+----------+---------------+---------+
3 rows in set (0.00 sec)
mysql> CREATE VIEW v_2 AS SELECT * FROM v_1 WHERE gaji > 500000 WITH LOCAL CHECK
OPTION;
Query OK, 0 rows affected (0.03 sec)
mysql> select * from v_2;
+----------+---------------+---------+
| nip
| nama_peg
| gaji
|
+----------+---------------+---------+
| PEG-1014 | Donny Damara | 1000000 |
+----------+---------------+---------+
2 rows in set (0.00 sec)
mysql> CREATE VIEW v_3 AS SELECT * FROM v_1 WHERE gaji > 500000 WITH CASCADED
CHECK OPTION;
Query OK, 0 rows affected (0.03 sec)
mysql> select * from v_3;
+----------+---------------+---------+
| nip
| nama_peg
| gaji
|
+----------+---------------+---------+
| PEG-1014 | Donny Damara | 1000000 |
+----------+---------------+---------+
2 rows in set (0.00 sec)
Pada View v_1 kita membuat sebuah view untuk menampilkan data pegawai yang
memiliki gaji kurang dari 2jt, lalu kita membuat view v_2 yang berfungsi untuk
mengambil data dari hasil eksekusi view v_1 tetapi dibatasi data pegawai yang
memiliki gaji lebih dari 500rb dan juga memuat klausa WITH LOCAL CHECK OPTION,
sedangkan
view_v3
fungsinya
sama
dengan
view
v_2
tetapi
bedanya
view
v_3
menggunakan klausa WITH CASCADED CHECK OPTION. Untuk melihat perbedaannya kita
bisa melakukan masukkan data sbb :
mysql> insert into v_2 values('PEG-1018','Robert Gugu',3000000);
Query OK, 1 row affected (0.05 sec)
v_3
keseluruhan,
dinyatakan
mulai
dari
error
karena
pengecheckan
dia
v_1
mengecheck
yang
secara
direferensikan
CASCADED
oleh
v_3,
atau
dan
karena v_1 memiliki batasan 2jt maka masukkan 3jt ke v_3 dianggap salah.
4. Merubah VIEW
View yang telah kita buat bisa kita modifikasi dengan ALTER VIEW, contohnya sbb
:
mysql> ALTER VIEW view_2(NIP, NAMA_PEGAWAI, GAJI) AS SELECT nip, nama_peg, gaji
FROM pegawai WHERE alamat_peg='Yogyakarta';
Query OK, 0 rows affected (0.02 sec)
mysql> select * from view_2;
+----------+-----------------------+---------+
| NIP
| NAMA_PEGAWAI
| GAJI
|
+----------+-----------------------+---------+
| PEG-1001 | Soeharto Mangundirejo | 9000000 |
| PEG-1008 | Ely Oktafiani
| 3000000 |
| PEG-1011 | Rahmadi Sholeh
| 2000000 |
| PEG-1015 | Paijem
| 500000 |
+----------+-----------------------+---------+
5 rows in set (0.02 sec)
| Type
+--------------+-------------+------+-----+---------+-------+
| NIP
| varchar(8)
| NULL
| NULL
| GAJI
| NULL
| int(7)
| NO
| YES
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
TRIGGER
Trigger adalah sebuah objek database yang diasosiasikan dengan sebuah tabel. Trigger
diaktifkan
ketika
sebuah
event
terjadi
pada
tabel
yang
diasosiasikan.
Tabel
yang
diasosiasikan dengan trigger haruslah sebuah tabel yang permanen dan bukan temporary
tabel.
1. Membuat Trigger
Trigger bisa dibuat dengan syntax sbb :
dan
REPLACE.
Namun
demikian,
DROP
TABLE
dan
TRUNCATE
TABLE
tidak
dan
trigger_event
yang
sama.
Sebagai
contoh,
kita
tidak
dapat
membuat dua buah BEFORE UPDATE trigger pada satu buah tabel yang sama, namun
kita dapat membuat trigger BEFORE UPDATE dan AFTER UPDATE untuk satu tabel yang
sama.
Jika
ada
beberapa
statement
yang
ingin
dijalankan,
statement-
2. BEFORE TRIGGER
Berikut adalah contoh trigger yang dijalankan sebelum data dimasukkan ke dalam
sebuah tabel.
mysql> DELIMITER (spasi)#
mysql> CREATE TRIGGER sebelum_insert BEFORE INSERT ON pegawai FOR EACH ROW
BEGIN
IF NEW.gaji IS NULL OR NEW.gaji = 0
THEN
SET NEW.gaji = 500000;
ELSE
SET NEW.gaji = NEW.gaji + 100000;
END IF;
END #
Query OK, 0 rows affected (0.23 sec)
Mysql> DELIMITER(spasi);
Dalam
TRIGGER
diatas
adalah
salah
satu
contoh
trigger
yang
akan
dijalankan
sebelum sebuah even dipanggil (BEFORE INSERT). Dalam trigger ini akan mengganti
nilaigaji jika gaji yang di-INSERT-kan bernilai NULL atau 0 dan akan menambahkan
nilai 100rb jika kita masukkan selain NULL dan 0.
Berikut contoh masukkan data setelah didefinisikan trigger :
INPUT NILAI NULL atau 0
mysql> insert into pegawai values('PEG-1017','Astuti','Kudus','Staff Junior',0);
Query OK, 1 row affected (0.05 sec)
mysql> select * from pegawai;
+----------+-----------------------+-------------+-----------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+-----------------------+-------------+-----------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
| Manager
| 8000000 |
| PEG-1003 | Olga Syahrini
| Jakarta
| Kepala Unit
| 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
| Kepala Unit
| 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah | Supervisor
| 4500000 |
| PEG-1006 | Budi Drajat
| Malang
| Supervisor
| 4500000 |
| PEG-1007 | Bambang Pamungkas
| Kudus
| Staff Senior
| 3000000 |
| PEG-1008 | Ely Oktafiani
| Yogyakarta | Staff Senior
| 3000000 |
| PEG-1009 | Rani Wijaya
| Magelang
| Staff Senior
| 3000000 |
| PEG-1010 | Rano Karno
| Solo
| Staff Junior
| 2000000 |
| PEG-1011 | Rahmadi Sholeh
| Yogyakarta | Staff Junior
| 2000000 |
| PEG-1012 | Ilham Ungara
| Jakarta
| Staff Junior
| 2000000 |
| PEG-1013 | Endang Melati
| Madiun
| Staff Junior
| 2000000 |
| PEG-1014 | Donny Damara
| Makasar
| Tenaga Kontrak | 1000000 |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
| PEG-1016 | Djono
| Yogyakarta | Tenanga Kontrak | 1000000 |
| PEG-1017 | Astuti
| Kudus
| Staff Junior
| 500000 |
+----------+-----------------------+-------------+-----------------+---------+
17 rows in set (0.00 sec)
insert
into
pegawai
values('PEG-1018','Puspito','Magelang','Staff
Junior',1000000);
Query OK, 1 row affected (0.03 sec)
mysql> select * from pegawai;
+----------+-----------------------+-------------+-----------------+---------+
| nip
| nama_peg
| alamat_peg | jabatan
| gaji
|
+----------+-----------------------+-------------+-----------------+---------+
| PEG-1001 | Soeharto Mangundirejo | Yogyakarta | C.E.O
| 9000000 |
| PEG-1002 | Felix Nababan
| Medan
| Manager
| 8000000 |
| PEG-1003 | Olga Syahrini
| Jakarta
| Kepala Unit
| 6000000 |
| PEG-1004 | Chelsea Olivia
| Bandung
| Kepala Unit
| 6000000 |
| PEG-1005 | Tuti Wardani
| Jawa Tengah | Supervisor
| 4500000 |
| PEG-1006 | Budi Drajat
| Malang
| Supervisor
| 4500000 |
| PEG-1007 | Bambang Pamungkas
| Kudus
| Staff Senior
| 3000000 |
| PEG-1008 | Ely Oktafiani
| Yogyakarta | Staff Senior
| 3000000 |
| PEG-1009 | Rani Wijaya
| Magelang
| Staff Senior
| 3000000 |
| PEG-1010 | Rano Karno
| Solo
| Staff Junior
| 2000000 |
| PEG-1011 | Rahmadi Sholeh
| Yogyakarta | Staff Junior
| 2000000 |
| PEG-1012 | Ilham Ungara
| Jakarta
| Staff Junior
| 2000000 |
| PEG-1013 | Endang Melati
| Madiun
| Staff Junior
| 2000000 |
| PEG-1014 | Donny Damara
| Makasar
| Tenaga Kontrak | 1000000 |
| PEG-1015 | Paijem
| Yogyakarta | Tenaga Kontrak | 500000 |
| PEG-1016 | Djono
| Yogyakarta | Tenanga Kontrak | 1000000 |
| PEG-1017 | Astuti
| Kudus
| Staff Junior
| 500000 |
| PEG-1018 | Puspito
| Magelang
| Staff Junior
| 1100000 |
+----------+-----------------------+-------------+-----------------+---------+
18 rows in set (0.00 sec)
Namun demikian, kita tidak dapat mengupdate tabel yang sama dengan tabel yang
diasosiasikan dengan trigger menggunakan trigger.
Mysql> DELIMITER #
mysql> CREATE TRIGGER before_update BEFORE UPDATE ON pegawai FOR EACH ROW
BEGIN
UPDATE
pegawai
SET
gaji=gaji+(NEW.gaji
OLD.gaji)
WHERE
nip=NEW.nip;
END #
Query OK, 0 rows affected (0.03 sec)
mysql> DELIMITER ;
mysql> UPDATE pegawai SET gaji = 2000000 WHERE nip="PEG-1017";
ERROR 1442 (HY000):
Can't update
3. AFTER TRIGGER
Berikut
adalah
contoh
trigger
yang
dijalankan
setelah
update
dilakukan
terhadap tabel
Untuk mencobanya kita buat dulu table pencatat, nanti di table pencatat ini akan
kita buat syntax untuk mencatat perubahan yang terjadi.
mysql> create table pencatat(catatan varchar(50));
15.
16.
Function
i.
Membuat function
Procedure
i. Membuat procedure
ii. Parameter dalam procedure
1. Parameter IN
2. Parameter OUT
3. Parameter INOUT
4. Melihat procedure yang telah dibuat
5. Menghapus procedure
18.
iii. Perulangan
1. Perulangan WHILE
2. Perulangan REPEAT UNTIL
3. Perulangan LOOP
1. Fuction
dan
DELETE.
Hasil
dari
function
dapat
dikembalikan
sebagai
1.1
Membuat fuction
| Doe
| Alison
| Mathews
| James
| Smith
| Celia
| Rice
| Robert
| Black
| Linda
| Green
| David
| Larry
| Hercule
| Poirot
| Lincoln
| Rhyme
| Sherlock
| Holmes
+------------+---------------+
10 rows in set (0.00 sec)
Selanjutnya kita membuat function
mysql> delimiter //
mysql>
create
function
nama_lengkap(in_nama_depan
in_nama_belakang varchar(15))
-> returns varchar(35)
-> begin
-> return concat(in_nama_depan,' ',in_nama_belakang);
varchar(15),
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql>select nama_lengkap(nama_depan,nama_belakang) from pekerja;
+-----------------------------------------+
| nama_lengkap(nama_depan, nama_belakang) |
+-----------------------------------------+
| John Doe
| Alison Mathews
| James Smith
| Celia Rice
| Robert Black
| Linda Green
| David Larry
| Hercule Poirot
| Lincoln Rhyme
| Sherlock Holmes
+-----------------------------------------+
10 rows in set (0.00 sec)
1.2
Function apa saja yang telah kita buat dapat dilihat menggunakan
statement SHOW FUNCTION STATUS.
1.3
Menghapus function
2. Procedure
Procedure dapat berisi statement SQL (INSERT, UPDATE, DELETE, SELECT)
atau
operasi
lain
yang
disimpan
dalam
database.
Sebuah
procedure
2.1
membuat procedure
| pekerjaan |
+------------+---------------+--------+---------+-----------+
| John
| Doe
| Sleman |
500000 | Programer |
| Alison
| Mathews
| Sleman |
500000 | Programer |
| James
| Smith
| Celia
| Rice
| Robert
| Black
| Klaten |
200000 | Security
| Linda
| Green
| Bantul |
200000 | Security
| David
| Larry
| Bantul |
500000 | Programer |
| Hercule
| Poirot
| Klaten |
500000 | Programer |
| Lincoln
| Rhyme
| Klaten |
500000 | Programer |
| Sherlock
| Holmes
+------------+---------------+--------+---------+-----------+
10 rows in set (0.00 sec)
2.2
Procedure
menerima
parameter
(proc_parameter)
yang
didefinisikan
sebagai berikut:
proc_parameter:
[ IN | OUT | INOUT ] param_name type
Dalam parameter procedure, didefinisikan jenis parameter, yaitu IN,
OUT, atau INOUT. Bila tidak dispesifikasikan saat pembuatan, maka
default jenis parameter yang dipilih adalah IN.
Parameter
IN
mengirimkan
Procedure
bisa
saja
sebuah
merubah
nilai
nilai
ke
dalam
parameter
procedure.
ini,
namun
inisial
dari
parameter
ini
adalah
NULL
dan
nilainya
Parameter
dimodifikasi
INOUT
oleh
diinisialisasi
procedure,
dan
oleh
pemanggil,
perubahan
nilai
2.2.1parameter IN
Berikut adalah contoh penggunaan parameter IN:
dapat
parameter
mysql> delimiter $$
mysql>
create
procedure
getPekerjaByAlamat
(in
namaAlamat
varchar(255))
-> begin
-> select*from pekerja where alamat LIKE namaAlamat;
-> end $$
Mysql> delimiter ;
sesuai
parameter
masukan.
Pemanggilan
procedure
ini
dapat
dilihat pada contoh di bawah ini. Pada contoh ini, kita memasukkan
Sleman sebagai parameter masukan procedure.
| Doe
| Sleman |
| Alison
| Mathews
| Sleman |
| Sherlock
| Holmes
| Sleman |
+------------+---------------+--------+
3 rows in set (0.00 sec)
2.2.2parameter OUT
berikut adalah contoh penggunaan parameter OUT;
mysql> delimiter :)
mysql> delimiter ;
2.2.3parameter INOUT
berikut adalah contoh penggunaan parameter INOUT:
mysql> delimiter ^^
mysql> create procedure increase(inout number int)
-> begin
-> set number = number + 15;
-> end ^^
Query OK, 0 rows affected (0.04 sec)
mysql> delimiter ;
115 |
+------+
1 row in set (0.00 sec)
yang
telah
kita
buat
PROCEDURE.
Mysql> DROP PROCEDURE increaseGaji;
dapat
dihapus
menggunakan
DROP
mysql> delimiter #
mysql>
create
procedure
isi(
in
nama
varchar(10))
-> begin
-> insert into hoho values(nama, alamat);
-> end #
Query OK, 0 rows affected (0.02 sec)
call isi("Didi","Sleman");
call isi("Fera","Abarawa");
call isi("Rara","Jogja");
+------+---------+
| Fera | Abarawa |
| Rara | Jogja
| Didi | Sleman
+------+---------+
varchar(10),
alamat
+------+---------+
| Fera | Abarawa |
| Rara | Jogja
+------+---------+
mysql> DELIMITER ;
Pada contoh di atas, dibuat sebuah function dengan variabel bernama tax.
Variabel ini diset memiliki nilai default 0.05 dan digunakan untuk
mengubah nilai gaji. Contoh di bawah ini menunjukkan penggunaan function
addTax.
mysql> select nama_depan, addTax(gaji) from pekerja;
+------------+--------------+
| nama_depan | addTax(gaji) |
+------------+--------------+
| John
|
475000.00 |
| Alison
|
475000.00 |
| James
|
950000.00 |
| Celia
|
950000.00 |
| Robert
|
190000.00 |
| Linda
|
190000.00 |
| David
|
475000.00 |
| Hercule
|
475000.00 |
| Lincoln
|
475000.00 |
| Sherlock
|
950000.00 |
+------------+--------------+
10 rows in set, 3 warnings (0.28 sec)
Nama variabel lokal seharusnya tidak sama dengan nama kolom dalam tabel
database. Jika pada statement SQL seperti SELECT terdapat referensi ke
kolom tabel dengan nama yang sama, MySQL mereferensikannya sebagai nama
variabel. Berikut adalah contohnya.
mysql> DELIMITER **
mysql> CREATE PROCEDURE checkScope()
-> BEGIN
-> DECLARE nama_depan VARCHAR(15) DEFAULT 'bob';
-> SELECT nama_depan FROM pekerja;
-> END **
Query OK, 0 rows affected (0.54 sec)
mysql> DELIMITER ;
mysql> call checkScope();
+------------+
| nama_depan |
+------------+
| bob
|
| bob
|
| bob
|
| bob
|
| bob
|
| bob
|
| bob
|
| bob
|
| bob
|
| bob
|
+------------+
10 rows in set (0.00 sec)
Pada contoh di atas, ketika kita melakukan pemilihan SELECT untuk
nama_depan, nilai yang ditampilkan adalah nilai default dari variable
nama_depan, yaitu 'bob'.
delimiter &&
create function hideGaji(gaji float(8,2))
returns varchar(20)
begin
declare bayaran varchar(20);
if gaji <4000 then set bayaran='Gaji Rendah';
else set bayaran='Gaji Tinggi';
FROM
mysql> delimiter //
mysql> create function deskripsi(pekerjaan varchar(225))
-> returns float(3,2)
-> begin
-> declare des float(3,2) default 0.05;
-> case pekerjaan
-> when 'Manager' then set des=0.1;
-> when 'Programer' then set des=0.07;
-> when 'Security' then set des=0.06;
-> else set des =0.05;
-> end case;
-> return des;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select nama_depan, nama_belakang, deskripsi from pekerja;
+------------+---------------+-----------+
| nama_depan | nama_belakang | deskripsi |
+------------+---------------+-----------+
| John
| Doe
|
NULL |
| Alison
| Mathews
|
NULL |
| James
| Smith
|
NULL |
| Celia
| Rice
|
NULL |
| Robert
| Black
|
NULL |
| Linda
| Green
|
NULL |
| David
| Larry
|
NULL |
| Hercule
| Poirot
|
NULL |
| Lincoln
| Rhyme
|
NULL |
| Sherlock
| Holmes
|
NULL |
+------------+---------------+-----------+
10 rows in set (0.00 sec)
4.3 Perulangan
Pada function dan procedure juga disediakan perulangan. Beberapa bentuk
perulangan yang disediakan
dalam MySQL adalah WHILE,REPEAT UNTIL, dan LOOP.
4.3.1 Perulangan WHILE
Bentuk sintaks untuk perulangan WHILE adalah sebagai berikut:
WHILE search_condition DO
statement_list
END WHILE
Statement_list yang terdapat dalam WHILE diulang selama search_condition
bernilai true.
statement_list terdiri atas satu atau lebih statement SQL, setiap
statementnya dipisahkan dengan
delimiter titik koma (;). Berikut adalah contoh penggunaan WHILE.
mysql> create procedure mod12(in number int(10))
-> begin
-> while number mod 12>0 do
-> set number = number + 1;
-> end while;
-> select number;
-> end //
Query OK, 0 rows affected (0.11 sec)
mysql> delimiter ;
mysql> call mod12(10);
+--------+
| number |
+--------+
|
12 |
+--------+
1 row in set (0.05 sec)
Query OK, 0 rows affected (0.06 sec)
mysql> call mod12(24);
+--------+
| number |
+--------+
|
24 |
+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
4.3.2 Perulangan REPEAT UNTIL
Sintaks dari REPEAT UNTIL adalah sebagai berikut:
REPEAT
statement_list
UNTIL search_condition
END REPEAT
Statement_list di dalam REPEAT dilakukan secara berulang hingga ekspresi
search_condition bernilai true. Oleh karena itu, sebuah REPEAT memasuki
perulangan paling sedikit sebanyak satu kali. statment_list terdiri atas
satu atau lebih statement, masing-masing dipisah dengan delimiter titik
koma (;). Berikut adalah contoh penggunaan REPEAT UNTIL.
mysql> create procedure repeatDemo(in number int(10))
-> begin
-> repeat
-> set number = number + 1;
-> until number mod 12 = 0
-> end repeat;
-> select number;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call repeatDemo(10);
+--------+
| number |
+--------+
|
12 |
+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
4.3.3 Perulangan LOOP
Sintaks dari perulangan LOOP adalah sebagai berikut:
[begin_label:] LOOP
statement_list
END LOOP [end_label]
LOOP merupakan bentuk perulangan sederhana. Perulangan dilakukan
terhadap statement_list, yang terdiri atas beberapa statement dengan
dipisahkan oleh tanda titik koma (;). Statement di dalam LOOP diulang
sampai LOOP berakhir. Cara mengakhiri LOOP biasanya dilakukan dengan
No. Komp
1
2
3
4
5
6
7
8
9
10
Judul SI
SI Terminal
SI Swalayan
SI Rental Mobil
SI Perpustakaan
SI Lab Kesehatan
SI Biro Perjalanan
SI Bimbingan Belajar
SI Bandara
SI Apotek
SI Akademik (KRS)
No. Komp
11
12
13
14
15
16
17
18
19
20
Judul SI
SI Akademik (KRS)
SI Apotek
SI Bandara
SI Bimbingan Belajar
SI Biro Perjalanan
SI Lab Kesehatan
SI Perpustakaan
SI Rental Mobil
SI Swalayan
SI Terminal
JUDUL SISTEM INFORMASI yang dibuat sesuai dengan Nomor komputer saat praktikum.