Sunday, January 8, 2017

Bab 10. PHP/MySQL Untuk Pemula (Bagian 2)


Pelbagai Kasus Database (Bagian 2)


Menggunakan SET untuk Menyisipkan Data Dalam Tabel DVD
Untuk menyisipkan rekaman ke dalam tabel DVD, ketikkan statemen INSERT berikut:

mysql> INSERT INTO DVD
    -> SET NamaDVD='Some Like It Hot', TahunRilis=2001, IDTipeM='mt12',
    -> IDStudio='s108', IDRating='NR', IDFormat='f1', IDStatus='s2';
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`rentaldvd`.`dvd`, CONSTRAINT `dvd_ibfk_2` FOREIGN KEY (`IDStudio`) REFERENCES `studio` (`IDStudio`))

Anda menerima pesan error yang menyatakan bahwa kekangan foreign key gagal karena nilai IDStudio tidak ada dalam tabel induk yang direferensi (Studio).

Untuk menyisipkan rekaman yang diinginkan ke dalam tabel Studio, ketikkan statemen INSERT berikut:

mysql> INSERT INTO Studio
    -> VALUES('s108','Metro-Goldwyn-Mayer');
Query OK, 1 row affected (0.08 sec)

Untuk memastikkannya, ketikkan query berikut:

mysql> SELECT * FROM Studio;
+----------+---------------------------+
| IDStudio | DeskripsiStudio           |
+----------+---------------------------+
| s101     | Universal Studios         |
| s102     | Warner Brothers           |
| s103     | Time Warner               |
| s104     | Columbia Pictures         |
| s105     | Paramount Pictures        |
| s106     | Twentieth Century Fox     |
| s107     | Merchant Ivory Production |
| s108     | Metro-Goldwyn-Mayer       |
+----------+---------------------------+
8 rows in set (0.00 sec)

Sekarang, Anda dapat menyisipkan rekaman ke dalam tabel DVD. Ketikkan statemen INSERT berikut:

mysql> INSERT INTO DVD
    -> SET NamaDVD='Some Like It Hot', TahunRilis=2001, IDTipeM='mt12',
    -> IDStudio='s108', IDRating='NR', IDFormat='f1', IDStatus='s2';
Query OK, 1 row affected (0.03 sec)

Untuk memastikkannya, ketikkan query berikut:

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt12    | s108     | NR       | f1       | s2       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
9 rows in set (0.00 sec)

Menggunakan REPLACE untuk Menyisipkan Data
Untuk menyisipkan rekaman ke dalam tabel Studio, ketikkan statemen REPLACE berikut ini:

mysql> REPLACE Studio (IDStudio, DeskripsiStudio)
    -> VALUES('s109','New Line Cinema, Inc.');
Query OK, 1 row affected (0.06 sec)

Untuk memastikkannya, ketikkan query berikut:

mysql> SELECT * FROM Studio;
+----------+---------------------------+
| IDStudio | DeskripsiStudio           |
+----------+---------------------------+
| s101     | Universal Studios         |
| s102     | Warner Brothers           |
| s103     | Time Warner               |
| s104     | Columbia Pictures         |
| s105     | Paramount Pictures        |
| s106     | Twentieth Century Fox     |
| s107     | Merchant Ivory Production |
| s108     | Metro-Goldwyn-Mayer       |
| s109     | New Line Cinema, Inc.     |
+----------+---------------------------+
9 rows in set (0.00 sec)


Menggunakan SET untuk Menyisipkan Data Dalam Tabel TipeMovie
Untuk menyisipkan rekaman ke dalam tabel TipeMovie, ketikkan statemen INSERT berikut:

mysql> REPLACE TipeMovie
    -> SET IDTipeM='mt17', DeskripsiTipeM='Foreign-subtitled';
Query OK, 1 row affected (0.06 sec)

Untuk memastikkannya, ketikkan query berikut:

mysql> SELECT * FROM TipeMovie;
+---------+-------------------+
| IDTipeM | DeskripsiTipeM    |
+---------+-------------------+
| mt10    | Aksi              |
| mt11    | Drama             |
| mt12    | Komedi            |
| mt13    | Komedi Romantis   |
| mt14    | Fantasi           |
| mt15    | Dokumenter        |
| mt16    | Musikal           |
| mt17    | Foreign-subtitled |
+---------+-------------------+
8 rows in set (0.00 sec)


Menggunakan UPDATE untuk Memodifikasi Data Dalam Tabel DVD
Untuk memperbarui rekaman dalam tabel DVD, ketikkan statemen UPDATE berikut:

mysql> UPDATE DVD
    -> SET IDStudio='s107'
    -> WHERE IDDVD=10;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Untuk memastikkannya, ketikkan query berikut:

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt12    | s107     | NR       | f1       | s2       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
9 rows in set (0.00 sec)

Sekarang, Anda akan memperbarui tabel dengan cara yang berbeda. Untuk memperbarui rekaman dalam tabel DVD, ketikkan statemen UPDATE berikut:

mysql> UPDATE DVD
    -> SET IDStatus='s1'
    -> WHERE IDDVD=10;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt12    | s107     | NR       | f1       | s1       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
9 rows in set (0.00 sec)

Untuk memperbarui rekaman yang sama dalam tabel DVD, ketikkan statemen UPDATE berikut:

mysql> UPDATE DVD
    -> SET IDStatus='s3', IDTipeM='mt13'
    -> WHERE IDDVD=10;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt13    | s107     | NR       | f1       | s3       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+--------+
9 rows in set (0.00 sec)

Menggunakan DELETE untuk Menghapus Data Dalam Tabel TipeMovie
Untuk menghapus rekaman dalam tabel TipeMovie, ketikkan statemen UPDATE berikut:

mysql> SELECT * FROM TipeMovie;
+---------+-------------------+
| IDTipeM | DeskripsiTipeM    |
+---------+-------------------+
| mt10    | Aksi              |
| mt11    | Drama             |
| mt12    | Komedi            |
| mt13    | Komedi Romantis   |
| mt14    | Fantasi           |
| mt15    | Dokumenter        |
| mt16    | Musikal           |
| mt17    | Foreign-subtitled |
+---------+-------------------+
8 rows in set (0.00 sec)

mysql> DELETE FROM TipeMovie
    -> WHERE IDTipeM='mt17';
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM TipeMovie;
+---------+-----------------+
| IDTipeM | DeskripsiTipeM  |
+---------+-----------------+
| mt10    | Aksi            |
| mt11    | Drama           |
| mt12    | Komedi          |
| mt13    | Komedi Romantis |
| mt14    | Fantasi         |
| mt15    | Dokumenter      |
| mt16    | Musikal         |
+---------+-----------------+
7 rows in set (0.00 sec)


Mempelajari Statemen SELECT Lebih Dalam
Untuk membaca semua rekaman, ketikkan statemen SELECT berikut:

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
+------------+------------+------------+---------------+
6 rows in set (0.00 sec)

Selanjutnya, Anda akan membaca nilai-nilai dari FNKaryawan dan LNKaryawan dari tabel Karyawan. Ketikkan statemen SELECT berikut:

mysql> SELECT FNKaryawan, LNKaryawan
    -> FROM Karyawan;
+------------+---------------+
| FNKaryawan | LNKaryawan    |
+------------+---------------+
| Rismon     | Sianipar      |
| I          | Wiryajati     |
| Muhammad   | Irwan         |
| Hamzan     | Wadi          |
| Tobat      | Sinaga        |
| Krista     | Simanungkalit |
+------------+---------------+
6 rows in set (0.00 sec)

Sekarang, Anda akan membaca nilai-nilai yang sama, tetapi kali ini dengan menyediakan nama-nama alias untuk tiap kolom. Ketikkan statemen SELECT berikut:

mysql> SELECT FNKaryawan AS 'Nama Depan', LNKaryawan AS 'Nama Belakang'
    -> FROM Karyawan;
+------------+---------------+
| Nama Depan | Nama Belakang |
+------------+---------------+
| Rismon     | Sianipar      |
| I          | Wiryajati     |
| Muhammad   | Irwan         |
| Hamzan     | Wadi          |
| Tobat      | Sinaga        |
| Krista     | Simanungkalit |
+------------+---------------+
6 rows in set (0.00 sec)

Selanjutnya, Anda bisa mendefinisikan variabel (@rating) dalam statemen SELECT, sebagai berikut:

mysql> SELECT @rating:=IDRating
    -> FROM DVD
    -> WHERE NamaDVD='White Christmas';
+-------------------+
| @rating:=IDRating |
+-------------------+
| NR                |
+-------------------+
1 row in set (0.01 sec)

Setelah variabel diciptakan, Anda dapat menggunakannya di dalam statemen SELECT. Untuk menggunakan variabel dalam membaca rekaman-rekaman dari tabel DVD, ketikkan statemen SELECT berikut:

mysql> SELECT IDDVD, NamaDVD, IDTipeM
    -> FROM DVD
    -> WHERE IDRating=@rating;
+-------+-------------------------------+---------+
| IDDVD | NamaDVD                       | IDTipeM |
+-------+-------------------------------+---------+
|     1 | White Christmas               | mt16    |
|     4 | The Maltese Falcon            | mt11    |
|     6 | The Rocky Horror Picture Show | mt12    |
|     7 | A Room with a View            | mt11    |
|    10 | Some Like It Hot              | mt13    |
+-------+-------------------------------+---------+
5 rows in set (0.02 sec)

Dalam statemen SELECT, Anda dapat memiliki opsi ALL untuk membaca rekaman-rekaman dari tabel DVD. Ketikkan statemen SELECT berikut:

mysql> SELECT ALL IDRating, IDStatus
    -> FROM DVD;
+----------+----------+
| IDRating | IDStatus |
+----------+----------+
| NR       | s1       |
| G        | s2       |
| PG       | s1       |
| NR       | s2       |
| PG       | s2       |
| NR       | s2       |
| NR       | s1       |
| R        | s2       |
| NR       | s3       |
+----------+----------+
9 rows in set (0.00 sec)

Sekarang, Anda bisa menggunakan opsi DISTINCT menggantukan opsi ALL. Ketikkan statemen SELECT berikut:

mysql> SELECT DISTINCT IDRating, IDStatus
    -> FROM DVD;
+----------+----------+
| IDRating | IDStatus |
+----------+----------+
| NR       | s1       |
| G        | s2       |
| PG       | s1       |
| NR       | s2       |
| PG       | s2       |
| R        | s2       |
| NR       | s3       |
+----------+----------+
7 rows in set (0.00 sec)

Statemen SELECT dalam memuat klause WHERE yang memuat satu kondisi. Ketikkan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM
    -> FROM DVD
    -> WHERE IDStatus='s2';
+-------------------------------+---------+
| NamaDVD                       | IDTipeM |
+-------------------------------+---------+
| What's Up, Doc?               | mt12    |
| The Maltese Falcon            | mt11    |
| Amadeus                       | mt11    |
| The Rocky Horror Picture Show | mt12    |
| Mash                          | mt12    |
+-------------------------------+---------+
5 rows in set (0.00 sec)

Sekarang, Anda bisa mengubah statemen SELECT yang telah Anda ciptakan sebelumnya sehingga memuat beberapa kondisi di dalam klausa WHERE. Ketikkan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM
    -> FROM DVD
    -> WHERE IDStatus='s1' OR IDStatus='s3' OR IDStatus='s4';
+--------------------+---------+
| NamaDVD            | IDTipeM |
+--------------------+---------+
| White Christmas    | mt16    |
| Out of Africa      | mt11    |
| A Room with a View | mt11    |
| Some Like It Hot   | mt13    |
+--------------------+---------+
4 rows in set (0.03 sec)

Selanjutnya, statemen SELECT berikut mencantumkan beberapa kondisi dalam klausa WHERE. Kali ini, Anda mengunakan operator OR dan AND. Ketikkan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM
    -> FROM DVD
    -> WHERE IDStatus='s2' AND (IDRating='NR' OR IDRating='G');
+-------------------------------+---------+
| NamaDVD                       | IDTipeM |
+-------------------------------+---------+
| What's Up, Doc?               | mt12    |
| The Maltese Falcon            | mt11    |
| The Rocky Horror Picture Show | mt12    |
+-------------------------------+---------+
3 rows in set (0.00 sec)

Anda bisa menggunakan statemen SELECT untuk mengelompokkan nilai-nilai dalam kolom IDPesan. Ketikkan statemen SELECT berikut:

mysql> SELECT IDPesan, COUNT(*) AS Transaksi
    -> FROM Transaksi
    -> GROUP BY IDPesan;
+---------+-----------+
| IDPesan | Transaksi |
+---------+-----------+
|       1 |         3 |
|       2 |         1 |
|       3 |         3 |
|       4 |         1 |
|       5 |         1 |
|       6 |         2 |
|       7 |         1 |
|       8 |         3 |
|       9 |         2 |
|      10 |         1 |
|      11 |         3 |
|      12 |         1 |
|      13 |         1 |
+---------+-----------+
13 rows in set (0.00 sec)

Statemen SELECT berikutnya mengelompokkan nilai-nilai  pada kolom-kolom tabel IDTipeM dan IDRating. Ketikkan statemen SELECT berikut:

mysql> SELECT IDTipeM, IDRating, COUNT(*) AS 'Total DVD'
    -> FROM DVD
    -> GROUP BY IDTipeM, IDRating;
+---------+----------+-----------+
| IDTipeM | IDRating | Total DVD |
+---------+----------+-----------+
| mt11    | NR       |         2 |
| mt11    | PG       |         2 |
| mt12    | G        |         1 |
| mt12    | NR       |         1 |
| mt12    | R        |         1 |
| mt13    | NR       |         1 |
| mt16    | NR       |         1 |
+---------+----------+-----------+
7 rows in set (0.00 sec)

Statemen SELECT selanjutnya sama dengan sebelumnya kecuali bahwa sekarang Anda mencantumkan opsi WITH ROLLUP di dalam klausa GROUP BY. Ketikkan statemen SELECT berikut:

mysql> SELECT IDTipeM, IDRating, COUNT(*) AS 'Total DVD'
    -> FROM DVD
    -> GROUP BY IDTipeM, IDRating WITH ROLLUP;
+---------+----------+-----------+
| IDTipeM | IDRating | Total DVD |
+---------+----------+-----------+
| mt11    | NR       |         2 |
| mt11    | PG       |         2 |
| mt11    | NULL     |         4 |
| mt12    | G        |         1 |
| mt12    | NR       |         1 |
| mt12    | R        |         1 |
| mt12    | NULL     |         3 |
| mt13    | NR       |         1 |
| mt13    | NULL     |         1 |
| mt16    | NR       |         1 |
| mt16    | NULL     |         1 |
| NULL    | NULL     |         9 |
+---------+----------+-----------+
12 rows in set (0.00 sec)

Statemen SELECT dapat dipakai untuk membatasi baris-baris hanya pada yang memiliki nilai total lebih dari 1. Ketikkan statemen SELECT berikut:

mysql> SELECT IDRating, COUNT(*) AS Total
    -> FROM DVD
    -> GROUP BY IDRating
    -> HAVING Total>1;
+----------+-------+
| IDRating | Total |
+----------+-------+
| NR       |     5 |
| PG       |     2 |
+----------+-------+
2 rows in set (0.00 sec)

Statemen SELECT berikutnya mencantumkan klausa HAVING yang membatasi baris-baris dengan nilai total lebih dari 2. Ketikkan statemen SELECT berikut:

mysql> SELECT IDKaryawan, COUNT(*) AS Total
    -> FROM Pesan
    -> GROUP BY IDKaryawan
    -> HAVING Total>2;
+------------+-------+
| IDKaryawan | Total |
+------------+-------+
|          2 |     3 |
+------------+-------+
1 row in set (0.00 sec)

Statemen SELECT berikut membaca baris-baris dari tabel DVD dan mengurutkannya berdasarkan nilai-nilai pada kolom NamaDVD. Ketikkan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM, IDRating
    -> FROM DVD
    -> WHERE IDRating!='NR'
    -> ORDER BY NamaDVD;
+-----------------+---------+----------+
| NamaDVD         | IDTipeM | IDRating |
+-----------------+---------+----------+
| Amadeus         | mt11    | PG       |
| Mash            | mt12    | R        |
| Out of Africa   | mt11    | PG       |
| What's Up, Doc? | mt12    | G        |
+-----------------+---------+----------+
4 rows in set (0.00 sec)

Statemen SELECT juga dapat membaca baris-baris dari tabel DVD, hanya kali ini, baris-baris diurutkan berdasarkan nilai-nilai pada kolom IDTipeM dan pada kolom IDRating. Ketikkan statemen SELECT berikut:

mysql> SELECT IDTipeM, IDRating, NamaDVD
    -> FROM DVD
    -> WHERE IDRating!='NR'
    -> ORDER BY IDTipeM, IDRating;
+---------+----------+-----------------+
| IDTipeM | IDRating | NamaDVD         |
+---------+----------+-----------------+
| mt11    | PG       | Out of Africa   |
| mt11    | PG       | Amadeus         |
| mt12    | G        | What's Up, Doc? |
| mt12    | R        | Mash            |
+---------+----------+-----------------+
4 rows in set (0.00 sec)

Sekarang, Anda akan menciptakan statemen SELECT yang menggunakan klausa ORDER BY dan klausa LIMIT untuk menghasilkan pesanan terakhir yang ditambahkan pada tabel Pesan. Ketikkan statemen SELECT berikut:

mysql> SELECT IDPesan, IDKonsumen
    -> FROM Pesan
    -> ORDER BY IDPesan DESC
    -> LIMIT 1;
+---------+------------+
| IDPesan | IDKonsumen |
+---------+------------+
|      13 |          5 |
+---------+------------+
1 row in set (0.00 sec)


Menciptakan Ekspresi Dengan Operator Aritmatik
Statemen SELECT berikut memuat sebuah ekspresi yang memuat sebuah operator artimatik (-). Tuliskanlah statemen SQL berikut:

mysql> SELECT NamaDVD, TahunRilis, (YEAR(CURDATE())-TahunRilis) AS Rentang_Tahun
    -> FROM DVD;
+-------------------------------+------------+---------------+
| NamaDVD                       | TahunRilis | Rentang_Tahun |
+-------------------------------+------------+---------------+
| White Christmas               |       2000 |            14 |
| What's Up, Doc?               |       2001 |            13 |
| Out of Africa                 |       2000 |            14 |
| The Maltese Falcon            |       2000 |            14 |
| Amadeus                       |       1997 |            17 |
| The Rocky Horror Picture Show |       2000 |            14 |
| A Room with a View            |       2000 |            14 |
| Mash                          |       2001 |            13 |
| Some Like It Hot              |       2001 |            13 |
+-------------------------------+------------+---------------+
9 rows in set (0.00 sec)

Pada statemen SQL ini, Anda menciptakan sebuah statemen INSERT yang menambahkan suatu baris ke dalam tabel DVD. Tuliskanlah statemen INSERT berikut:

mysql> INSERT INTO DVD
    -> SET NamaDVD='The Wizard of Oz', NomorDisk=2, TahunRilis=1999,
    -> IDTipeM='mt14', IDStudio='s102', IDRating='G', IDFormat='f2', IDStatus='s2';
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt13    | s107     | NR       | f1       | s3       |
|    11 | The Wizard of Oz              |         2 |       1999 | mt14    | s102     | G        | f2       | s2       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
10 rows in set (0.00 sec)

Sekarang, Anda menuliskan statemen UPDATE yang mencantumkan sebuah ekspresi di dalam klausa SET dan di dalam klausa WHERE. Tuliskanlah statemen UPDATE berikut:

mysql> UPDATE DVD
    -> SET NomorDisk=NomorDisk/2
    -> WHERE NamaDVD='The Wizard of Oz';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt13    | s107     | NR       | f1       | s3       |
|    11 | The Wizard of Oz              |         1 |       1999 | mt14    | s102     | G        | f2       | s2       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
10 rows in set (0.00 sec)

Untuk mengembalikan tabel DVD ke keadaan semula, Anda bisa menghapus baris yang telah Anda ciptakan sebelumnya. Tuliskanlah statemen DELETE berikut:

mysql> DELETE FROM DVD
    -> WHERE NamaDVD='The Wizard of Oz';
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM DVD;
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
| IDDVD | NamaDVD                       | NomorDisk | TahunRilis | IDTipeM | IDStudio | IDRating | IDFormat | IDStatus |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
|     1 | White Christmas               |         1 |       2000 | mt16    | s105     | NR       | f1       | s1       |
|     2 | What's Up, Doc?               |         1 |       2001 | mt12    | s103     | G        | f1       | s2       |
|     3 | Out of Africa                 |         1 |       2000 | mt11    | s101     | PG       | f1       | s1       |
|     4 | The Maltese Falcon            |         1 |       2000 | mt11    | s103     | NR       | f1       | s2       |
|     5 | Amadeus                       |         1 |       1997 | mt11    | s103     | PG       | f1       | s2       |
|     6 | The Rocky Horror Picture Show |         2 |       2000 | mt12    | s106     | NR       | f1       | s2       |
|     7 | A Room with a View            |         1 |       2000 | mt11    | s107     | NR       | f1       | s1       |
|     8 | Mash                          |         2 |       2001 | mt12    | s106     | R        | f1       | s2       |
|    10 | Some Like It Hot              |         1 |       2001 | mt13    | s107     | NR       | f1       | s3       |
+-------+-------------------------------+-----------+------------+---------+----------+----------+----------+----------+
9 rows in set (0.00 sec)




Menciptakan Ekspresi Dengan Operator Perbandingan
Statemen SELECT berikut membaca informasi dari tabel DVD. Statemen ini menghasilkan hanya baris-baris yang memiliki nilai IDStatus s2. Tuliskanlah statemen SELECT berikut:

mysql> SELECT NamaDVD, IDStatus
    -> FROM DVD
    -> WHERE IDStatus='s2'
    -> ORDER BY NamaDVD;
+-------------------------------+----------+
| NamaDVD                       | IDStatus |
+-------------------------------+----------+
| Amadeus                       | s2       |
| Mash                          | s2       |
| The Maltese Falcon            | s2       |
| The Rocky Horror Picture Show | s2       |
| What's Up, Doc?               | s2       |
+-------------------------------+----------+
5 rows in set (0.00 sec)

Statemen SELECT selanjutnya sama dengan yang telah Anda ciptakan sebelumnya, kecuali bahwa Anda hanya akan menampilkan baris-baris yang tidak memiliki nilai IDStatus s2. Tuliskanlah statemen SELECT berikut:

mysql> SELECT NamaDVD, IDStatus
    -> FROM DVD
    -> WHERE IDStatus<>'s2'
    -> ORDER BY NamaDVD;
+--------------------+----------+
| NamaDVD            | IDStatus |
+--------------------+----------+
| A Room with a View | s1       |
| Out of Africa      | s1       |
| Some Like It Hot   | s3       |
| White Christmas    | s1       |
+--------------------+----------+
4 rows in set (0.00 sec)

Statemen SELECT berikutnya akan membaca baris-baris dari tabel DVD untuk tahun rilis setelah tahun 2000. Tuliskanlah statemen SELECT berikut:

mysql> SELECT NamaDVD, TahunRilis, IDStatus
    -> FROM DVD
    -> WHERE TahunRilis>2000
    -> ORDER BY NamaDVD;
+------------------+------------+----------+
| NamaDVD          | TahunRilis | IDStatus |
+------------------+------------+----------+
| Mash             |       2001 | s2       |
| Some Like It Hot |       2001 | s3       |
| What's Up, Doc?  |       2001 | s2       |
+------------------+------------+----------+
3 rows in set (0.00 sec)

Statemen SELECT berikutnya membaca informasi dari tabel Karyawan. Hanya baris-baris yang tidak memuat nilai MNKaryawan NULL yang akan ditampilkan. Tuliskanlah statemen SELECT berikut:

mysql> SELECT FNKaryawan, MNKaryawan, LNKaryawan
    -> FROM Karyawan
    -> WHERE MNKaryawan IS NOT NULL;
+------------+------------+---------------+
| FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+---------------+
| Rismon     | H.         | Sianipar      |
| I          | Ketut      | Wiryajati     |
| Krista     | C.         | Simanungkalit |
+------------+------------+---------------+
3 rows in set (0.00 sec)

Sekarang, Anda melakukan query terhadap data pada tabel Transaksi. Statemen SELECT berikut akan menghasilkan baris-baris yang memiliki IDDVD 2, 5, atau 8. Tuliskanlah statemen SELECT berikut:

mysql> SELECT IDPesan, IDTransaksi, IDDVD
    -> FROM Transaksi
    -> WHERE IDDVD IN(2, 5, 8)
    -> ORDER BY IDPesan, IDTransaksi;
+---------+-------------+-------+
| IDPesan | IDTransaksi | IDDVD |
+---------+-------------+-------+
|       1 |           3 |     8 |
|       6 |          10 |     2 |
|       8 |          13 |     2 |
|      10 |          18 |     5 |
|      11 |          20 |     2 |
|      11 |          21 |     8 |
|      12 |          22 |     5 |
+---------+-------------+-------+
7 rows in set (0.03 sec)

Pada statemen SELECT selanjutnya, Anda akan melakukan query terhadap tabel DVD dan menghasilkan semua baris yang memuat kata “horror” di dalam nilai NamaDVD. Tuliskanlah statemen SELECT berikut:

mysql> SELECT NamaDVD, IDStatus, IDRating
    -> FROM DVD
    -> WHERE NamaDVD LIKE '%horror%'
    -> ORDER BY NamaDVD;
+-------------------------------+----------+----------+
| NamaDVD                       | IDStatus | IDRating |
+-------------------------------+----------+----------+
| The Rocky Horror Picture Show | s2       | NR       |
+-------------------------------+----------+----------+
1 row in set (0.00 sec)

Statemen SELECT berikut akan menghasilkan semua baris dengan nilai NamaDVD yang memuat huruf-huruf “ro”. Tuliskanlah statemen SELECT berikut:

mysql> SELECT NamaDVD, IDStatus, IDRating
    -> FROM DVD
    -> WHERE NamaDVD REGEXP 'ro'
    -> ORDER BY NamaDVD;
+-------------------------------+----------+----------+
| NamaDVD                       | IDStatus | IDRating |
+-------------------------------+----------+----------+
| A Room with a View            | s1       | NR       |
| The Rocky Horror Picture Show | s2       | NR       |
+-------------------------------+----------+----------+
2 rows in set (0.04 sec)


Menciptakan Ekspresi Dengan Operator Logikal
Statemen SELECT berikut memuat dua ekspresi pada klausa WHERE yang dihubungkan dengan operator logikal OR. Tuliskan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM, IDRating
    -> FROM DVD
    -> WHERE IDRating='G' OR IDRating='PG'
    -> ORDER BY NamaDVD;
+-----------------+---------+----------+
| NamaDVD         | IDTipeM | IDRating |
+-----------------+---------+----------+
| Amadeus         | mt11    | PG       |
| Out of Africa   | mt11    | PG       |
| What's Up, Doc? | mt12    | G        |
+-----------------+---------+----------+
3 rows in set (0.00 sec)

Selanjutnya, Anda menuliskan statemen SELECT yang mencantumkan klausa WHERE dengan tiga ekspresi. Klausa tersebut memuat sebuah operator AND dan sebuah operator OR. Tuliskan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM, IDRating
    -> FROM DVD
    -> WHERE IDStatus='s2' AND (IDRating='G' OR IDRating='PG')
    -> ORDER BY NamaDVD;
+-----------------+---------+----------+
| NamaDVD         | IDTipeM | IDRating |
+-----------------+---------+----------+
| Amadeus         | mt11    | PG       |
| What's Up, Doc? | mt12    | G        |
+-----------------+---------+----------+
2 rows in set (0.00 sec)

Statemen SELECT berikut memuat tiga ekspresi yang dihubungkan oleh suatu operator AND dan sebuah operator OR. Selain itu, Anda juga menggunakan operator NOT untuk membalikkan kondisi. Tuliskan statemen SELECT berikut:

mysql> SELECT NamaDVD, IDTipeM, IDRating
    -> FROM DVD
    -> WHERE IDStatus='s2' AND NOT (IDRating='G' OR IDRating='PG')
    -> ORDER BY NamaDVD;
+-------------------------------+---------+----------+
| NamaDVD                       | IDTipeM | IDRating |
+-------------------------------+---------+----------+
| Mash                          | mt12    | R        |
| The Maltese Falcon            | mt11    | NR       |
| The Rocky Horror Picture Show | mt12    | NR       |
+-------------------------------+---------+----------+
3 rows in set (0.00 sec)


Menciptakan Ekspresi Dengan Operator Sort
Statemen SELECT berikut tidak menggunakan operator BINARY. Tuliskan statemen SELECT berikut ini:

mysql> SELECT NamaDVD, IDStatus, IDRating
    -> FROM DVD
    -> WHERE NamaDVD REGEXP 'W'
    -> ORDER BY NamaDVD;
+-------------------------------+----------+----------+
| NamaDVD                       | IDStatus | IDRating |
+-------------------------------+----------+----------+
| A Room with a View            | s1       | NR       |
| The Rocky Horror Picture Show | s2       | NR       |
| What's Up, Doc?               | s2       | G        |
| White Christmas               | s1       | NR       |
+-------------------------------+----------+----------+
4 rows in set (0.03 sec)

Sekarang, Anda akan menuliskan statemen SELECT yang hampir identik dengan sebelumnya, kecuali bahwa statemen baru ini memuat operator BINARY. Tuliskan statemen SELECT berikut ini:

mysql> SELECT NamaDVD, IDStatus, IDRating
    -> FROM DVD
    -> WHERE NamaDVD REGEXP BINARY 'W'
    -> ORDER BY NamaDVD;
+-----------------+----------+----------+
| NamaDVD         | IDStatus | IDRating |
+-----------------+----------+----------+
| What's Up, Doc? | s2       | G        |
| White Christmas | s1       | NR       |
+-----------------+----------+----------+
2 rows in set (0.01 sec)


Menggunakan Fungsi Perbandingan
Statemen SELECT berikut menugaskan sebuah nilai kepada variabel @dvd1. Tuliskanlah statemen SQL berikut:

mysql> SELECT @dvd1:=IDDVD
    -> FROM DVD
    -> WHERE NamaDVD='White Christmas';
+--------------+
| @dvd1:=IDDVD |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)

Selanjutnya, Anda menugaskan sebuah nilai kepada variabel @dvd2. Tuliskanlah statemen SQL berikut:

mysql> SELECT @dvd2:=IDDVD
    -> FROM DVD
    -> WHERE NamaDVD='Out of Africa';
+--------------+
| @dvd2:=IDDVD |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)

Sekarang, Anda akan menggunakan kedua variabel tersebut di dalam klausa WHERE pada suatu statemen SELECT. Tuliskanlah statemen SQL berikut:

mysql> SELECT IDPesan, IDTransaksi, IDDVD
    -> FROM Transaksi
    -> WHERE IDDVD=LEAST(@dvd1, @dvd2)
    -> ORDER BY IDPesan, IDTransaksi;
+---------+-------------+-------+
| IDPesan | IDTransaksi | IDDVD |
+---------+-------------+-------+
|       1 |           1 |     1 |
|       3 |           6 |     1 |
|       6 |          11 |     1 |
|       8 |          14 |     1 |
|       9 |          17 |     1 |
+---------+-------------+-------+
5 rows in set (0.09 sec)

Statemen SELECT berikut menggunakan fungsi IF() di dalam klausa SELECT untuk membaca data. Tuliskanlah statemen SQL berikut:

mysql> SELECT NamaDVD AS Judul, IDStatus As Status, IDRating As Rating,
    -> IF(NomorDisk>1, 'Periksa disk ekstra!', 'Hanya 1 disk.') As Verifikasi
    -> FROM DVD
    -> ORDER BY Judul;
+-------------------------------+--------+--------+----------------------+
| Judul                         | Status | Rating | Verifikasi           |
+-------------------------------+--------+--------+----------------------+
| A Room with a View            | s1     | NR     | Hanya 1 disk.        |
| Amadeus                       | s2     | PG     | Hanya 1 disk.        |
| Mash                          | s2     | R      | Periksa disk ekstra! |
| Out of Africa                 | s1     | PG     | Hanya 1 disk.        |
| Some Like It Hot              | s3     | NR     | Hanya 1 disk.        |
| The Maltese Falcon            | s2     | NR     | Hanya 1 disk.        |
| The Rocky Horror Picture Show | s2     | NR     | Periksa disk ekstra! |
| What's Up, Doc?               | s2     | G      | Hanya 1 disk.        |
| White Christmas               | s1     | NR     | Hanya 1 disk.        |
+-------------------------------+--------+--------+----------------------+
9 rows in set (0.05 sec)

Sekarang Anda akan menggunakan fungsi CASE(). Tuliskanlah statemen SQL berikut:

mysql> SELECT NamaDVD, IDRating AS Rating,
    -> CASE
    -> WHEN IDRating='R' THEN 'Perlu pendampingan orang dewasa.'
    -> WHEN IDRating='X' THEN 'Tidak untuk usia di bawah 17 tahun.'
    -> WHEN IDRating='NR' THEN 'Perlu kehati-hatian dalam menyewa.'
    -> ELSE 'OK untuk disewa anak-anak.'
    -> END AS Kebijakan
    -> FROM DVD
    -> ORDER BY NamaDVD;
+-------------------------------+--------+------------------------------------+
| NamaDVD                       | Rating | Kebijakan                          |
+-------------------------------+--------+------------------------------------+
| A Room with a View            | NR     | Perlu kehati-hatian dalam menyewa. |
| Amadeus                       | PG     | OK untuk disewa anak-anak.         |
| Mash                          | R      | Perlu pendampingan orang dewasa.   |
| Out of Africa                 | PG     | OK untuk disewa anak-anak.         |
| Some Like It Hot              | NR     | Perlu kehati-hatian dalam menyewa. |
| The Maltese Falcon            | NR     | Perlu kehati-hatian dalam menyewa. |
| The Rocky Horror Picture Show | NR     | Perlu kehati-hatian dalam menyewa. |
| What's Up, Doc?               | G      | OK untuk disewa anak-anak.         |
| White Christmas               | NR     | Perlu kehati-hatian dalam menyewa. |
+-------------------------------+--------+------------------------------------+
9 rows in set (0.00 sec)

Pada statemen berikutnya, Anda juga akan menggunakan fungsi CASE(), tetapi Anda menggunakannya dengan format yang berbeda. Tuliskanlah statemen SQL berikut:

mysql> SELECT NamaDVD, IDRating AS Rating,
    -> CASE IDRating
    -> WHEN IDRating='R' THEN 'Perlu pendampingan orang dewasa.'
    -> WHEN IDRating='X' THEN 'Tidak untuk usia di bawah 17 tahun.'
    -> WHEN IDRating='NR' THEN 'Perlu kehati-hatian dalam menyewa.'
    -> ELSE 'OK untuk disewa anak-anak.'
    -> END AS Kebijakan
    -> FROM DVD
    -> ORDER BY NamaDVD;
+-------------------------------+--------+-------------------------------------+
| NamaDVD                       | Rating | Kebijakan                           |
+-------------------------------+--------+-------------------------------------+
| A Room with a View            | NR     | Perlu pendampingan orang dewasa.    |
| Amadeus                       | PG     | Perlu pendampingan orang dewasa.    |
| Mash                          | R      | Tidak untuk usia di bawah 17 tahun. |
| Out of Africa                 | PG     | Perlu pendampingan orang dewasa.    |
| Some Like It Hot              | NR     | Perlu pendampingan orang dewasa.    |
| The Maltese Falcon            | NR     | Perlu pendampingan orang dewasa.    |
| The Rocky Horror Picture Show | NR     | Perlu pendampingan orang dewasa.    |
| What's Up, Doc?               | G      | Perlu pendampingan orang dewasa.    |
| White Christmas               | NR     | Perlu pendampingan orang dewasa.    |
+-------------------------------+--------+-------------------------------------+
9 rows in set, 2 warnings (0.00 sec)


Menggunakan Fungsi String
Statemen berikut menggunakan fungsi CHAR_LENGTH() untuk menentukan panjang dari sebuah nilai yang dibaca. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT NamaDVD, CHAR_LENGTH(NamaDVD) AS PjgChar
    -> FROM DVD
    -> WHERE CHAR_LENGTH(NamaDVD)>10
    -> ORDER BY NamaDVD;
+-------------------------------+---------+
| NamaDVD                       | PjgChar |
+-------------------------------+---------+
| A Room with a View            |      18 |
| Out of Africa                 |      13 |
| Some Like It Hot              |      16 |
| The Maltese Falcon            |      18 |
| The Rocky Horror Picture Show |      29 |
| What's Up, Doc?               |      15 |
| White Christmas               |      15 |
+-------------------------------+---------+
7 rows in set (0.00 sec)

Statemen SELECT berikut menggunakan fungsi CONCAT_WS() untuk menggabungkan nama-nama karyawan. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDKaryawan, CONCAT_WS(' ', FNKaryawan, MNKaryawan, LNKaryawan) AS Nama
    -> FROM Karyawan
    -> ORDER BY LNKaryawan;
+------------+-------------------------+
| IDKaryawan | Nama                    |
+------------+-------------------------+
|          3 | Muhammad Irwan          |
|          1 | Rismon H. Sianipar      |
|          6 | Krista C. Simanungkalit |
|          5 | Tobat Sinaga            |
|          4 | Hamzan Wadi             |
|          2 | I Ketut Wiryajati       |
+------------+-------------------------+
6 rows in set (0.09 sec)

Selanjutnya, Anda menggunakan fungsi CONCAT() dan LEFT() untuk menciptakan kode-kode registrasi untuk karyawan. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDKaryawan, CONCAT(LEFT(FNKaryawan, 2), LEFT(LNKaryawan, 3), IDKaryawan) AS IDReg
    -> FROM Karyawan
    -> ORDER BY IDKaryawan;
+------------+--------+
| IDKaryawan | IDReg  |
+------------+--------+
|          1 | RiSia1 |
|          2 | IWir2  |
|          3 | MuIrw3 |
|          4 | HaWad4 |
|          5 | ToSin5 |
|          6 | KrSim6 |
+------------+--------+
6 rows in set (0.03 sec)

Sekarnag, Anda menuliskan sebuah statemen SELECT yang menggunakan fungsi UPPER(), CONCAT_WS(), CONCAT(), LOWER(), dan LEFT() untuk memanipulasi data dari tabel Karyawan. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDKaryawan, UPPER(CONCAT_WS(' ', FNKaryawan, MNKaryawan, LNKaryawan)) AS Nama,
    -> CONCAT(LOWER(LEFT(FNKaryawan, 2)), LOWER(LEFT(LNKaryawan, 3)), IDKaryawan) AS IDReg
    -> FROM Karyawan
    -> ORDER BY IDKaryawan;
+------------+-------------------------+--------+
| IDKaryawan | Nama                    | IDReg  |
+------------+-------------------------+--------+
|          1 | RISMON H. SIANIPAR      | risia1 |
|          2 | I KETUT WIRYAJATI       | iwir2  |
|          3 | MUHAMMAD IRWAN          | muirw3 |
|          4 | HAMZAN WADI             | hawad4 |
|          5 | TOBAT SINAGA            | tosin5 |
|          6 | KRISTA C. SIMANUNGKALIT | krsim6 |
+------------+-------------------------+--------+
6 rows in set (0.01 sec)

Sekarang statemen SELECT memuat fungsi UPPER(), CONCAT_WS(), CONCAT(), LOWER(), dan SUBSTRING() untuk memanipulasi data dari tabel Karyawan. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDKaryawan, UPPER(CONCAT_WS(' ', FNKaryawan, MNKaryawan, LNKaryawan)) AS Nama,
    -> CONCAT(LOWER(SUBSTRING(FNKaryawan, 2, 2)),
    -> LOWER(SUBSTRING(LNKaryawan, 2, 3)), IDKaryawan) AS IDReg
    -> FROM Karyawan
    -> ORDER BY IDKaryawan;
+------------+-------------------------+--------+
| IDKaryawan | Nama                    | IDReg  |
+------------+-------------------------+--------+
|          1 | RISMON H. SIANIPAR      | isian1 |
|          2 | I KETUT WIRYAJATI       | iry2   |
|          3 | MUHAMMAD IRWAN          | uhrwa3 |
|          4 | HAMZAN WADI             | amadi4 |
|          5 | TOBAT SINAGA            | obina5 |
|          6 | KRISTA C. SIMANUNGKALIT | riima6 |
+------------+-------------------------+--------+
6 rows in set (0.00 sec)


Menggunakan Fungsi Tanggal/Waktu
Statemen SELECT berikut menggunakan fungsi DATEDIFF() untuk menentukan selisih antara TanggalKeluar dan TanggalLambat pada tabel Transaksi. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDDVD, TanggalKeluar, TanggalLambat, DATEDIFF(TanggalLambat, TanggalKeluar) AS TotalHari
    -> FROM Transaksi
    -> WHERE IDTransaksi=11;
+-------+---------------+---------------+-----------+
| IDDVD | TanggalKeluar | TanggalLambat | TotalHari |
+-------+---------------+---------------+-----------+
|     1 | 2014-08-23    | 2014-08-26    |         3 |
+-------+---------------+---------------+-----------+
1 row in set (0.04 sec)

Selanjutnya, Anda menggunakan fungsi DAYNAME() untuk membaca nama hari dari tanggal tertentu. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDDVD, TanggalLambat, DAYNAME(TanggalLambat) AS HariLambat
    -> FROM Transaksi
    -> WHERE IDTransaksi=11;
+-------+---------------+------------+
| IDDVD | TanggalLambat | HariLambat |
+-------+---------------+------------+
|     1 | 2014-08-26    | Tuesday    |
+-------+---------------+------------+
1 row in set (0.00 sec)

Pada statemen SELECT berikut, Anda menggunakan fungsi YEAR() untuk mengekstrak tahun dari sebuah nilai tanggal. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDTransaksi, YEAR(TanggalKeluar) AS TanggalKeluar
    -> FROM Transaksi
    -> WHERE IDTransaksi>15
    -> ORDER BY IDTransaksi;
+-------------+---------------+
| IDTransaksi | TanggalKeluar |
+-------------+---------------+
|          16 |          2014 |
|          17 |          2014 |
|          18 |          2014 |
|          19 |          2014 |
|          20 |          2014 |
|          21 |          2014 |
|          22 |          2014 |
|          23 |          2014 |
+-------------+---------------+
8 rows in set (0.00 sec)

Selanjutnya, Anda menggunakan fungsi DATE_ADD() untuk menambah empat hari pada nilai TanggalKeluar di dalam tabel Transaksi. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDTransaksi, TanggalLambat,
    -> DATE_ADD(TanggalLambat, INTERVAL 4 DAY) AS Tambah4Hari
    -> FROM Transaksi
    -> WHERE IDTransaksi=11;
+-------------+---------------+-------------+
| IDTransaksi | TanggalLambat | Tambah4Hari |
+-------------+---------------+-------------+
|          11 | 2014-08-26    | 2014-08-30  |
+-------------+---------------+-------------+
1 row in set (0.04 sec)

Statemen SELECT berikut membaca tanggal dan waktu sekarang pada sistem Anda. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT CURDATE(), CURTIME(), NOW();
+------------+-----------+---------------------+
| CURDATE()  | CURTIME() | NOW()               |
+------------+-----------+---------------------+
| 2014-08-23 | 16:07:31  | 2014-08-23 16:07:31 |
+------------+-----------+---------------------+
1 row in set (0.00 sec)


Menggunakan Fungsi Agregat
Pertama, Anda menggunakan fungsi MAX() untuk menghasilkan nilai maksimum pada kolom NomorDisk pada tabel DVD. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDTipeM, MAX(NomorDisk) AS DiskMaks
    -> FROM DVD
    -> GROUP BY IDTipeM;
+---------+----------+
| IDTipeM | DiskMaks |
+---------+----------+
| mt11    |        1 |
| mt12    |        2 |
| mt13    |        1 |
| mt16    |        1 |
+---------+----------+
4 rows in set (0.00 sec)

Sekarang, Anda menggunakan fungsi COUNT() untuk menentukan jumlah baris pada tiap grup IDRating/IDTipeM pada tabel DVD. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDRating, IDTipeM, COUNT(*) AS Total
    -> FROM DVD
    -> GROUP BY IDRating, IDTipeM WITH ROLLUP;
+----------+---------+-------+
| IDRating | IDTipeM | Total |
+----------+---------+-------+
| G        | mt12    |     1 |
| G        | NULL    |     1 |
| NR       | mt11    |     2 |
| NR       | mt12    |     1 |
| NR       | mt13    |     1 |
| NR       | mt16    |     1 |
| NR       | NULL    |     5 |
| PG       | mt11    |     2 |
| PG       | NULL    |     2 |
| R        | mt12    |     1 |
| R        | NULL    |     1 |
| NULL     | NULL    |     9 |
+----------+---------+-------+
12 rows in set (0.00 sec)



Menggunakan Penggabungan Dalam Membaca Data
Statemen SELECT berikut menggunakan dasar penggabungan untuk membaca nilai-nilai NamaDVD dari tabel DVD dan nilai-nilai DeskripsiTipeM dari tabel TipeMovie. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT NamaDVD, DeskripsiTipeM AS TipeMovie
    -> FROM DVD AS d, TipeMovie AS tm
    -> WHERE d.IDTipeM=tm.IDTipeM AND IDStatus='s2'
    -> ORDER BY NamaDVD;
+-------------------------------+-----------+
| NamaDVD                       | TipeMovie |
+-------------------------------+-----------+
| Amadeus                       | Drama     |
| Mash                          | Komedi    |
| The Maltese Falcon            | Drama     |
| The Rocky Horror Picture Show | Komedi    |
| What's Up, Doc?               | Komedi    |
+-------------------------------+-----------+
5 rows in set (0.00 sec)

Statemen SELECT berikut ini sama dengan yang sebelumnya kecuali bahwa Anda juga membaca data dari tabel Rating. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT NamaDVD, DeskripsiTipeM AS TipeMovie,
    -> CONCAT(d.IDRating, ':', r.DeskripsiRating) AS Rating
    -> FROM DVD AS d, TipeMovie AS tm, Rating AS r
    -> WHERE d.IDTipeM=tm.IDTipeM AND d.IDRating=r.IDRating
    -> AND IDStatus='s2'
    -> ORDER BY NamaDVD;
+-------------------------------+-----------+--------------------------------+
| NamaDVD                       | TipeMovie | Rating                         |
+-------------------------------+-----------+--------------------------------+
| Amadeus                       | Drama     | PG:Parental guidance suggested |
| Mash                          | Komedi    | R:Under 17 requires adult      |
| The Maltese Falcon            | Drama     | NR:Not rated                   |
| The Rocky Horror Picture Show | Komedi    | NR:Not rated                   |
| What's Up, Doc?               | Komedi    | G:General audiences            |
+-------------------------------+-----------+--------------------------------+
5 rows in set (0.04 sec)

Selanjutnya, Anda membaca data yang sama dengan statemen SELECT sebelumnya, hanya kali ini, Anda menggunakan penggabungan silang. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT NamaDVD, DeskripsiTipeM AS TipeMovie,
    -> CONCAT(d.IDRating, ':', r.DeskripsiRating) AS Rating
    -> FROM TipeMovie AS tm CROSS JOIN DVD AS d USING (IDTipeM)
    -> CROSS JOIN Rating AS r USING (IDRating)
    -> WHERE IDStatus='s2'
    -> ORDER BY NamaDVD;
+-------------------------------+-----------+--------------------------------+
| NamaDVD                       | TipeMovie | Rating                         |
+-------------------------------+-----------+--------------------------------+
| Amadeus                       | Drama     | PG:Parental guidance suggested |
| Mash                          | Komedi    | R:Under 17 requires adult      |
| The Maltese Falcon            | Drama     | NR:Not rated                   |
| The Rocky Horror Picture Show | Komedi    | NR:Not rated                   |
| What's Up, Doc?               | Komedi    | G:General audiences            |
+-------------------------------+-----------+--------------------------------+
5 rows in set (0.00 sec)

Dalam statemen SELECT berikutnya, Anda menggunakan penggabungan dalam untuk membaca nama-nama konsumen dan ID-ID transaksi untuk transaksi yang melibatkan DVD dengan nilai IDDVD 4. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT CONCAT_WS(' ', FNKonsumen, MNKonsumen, LNKonsumen) AS Konsumen, IDTransaksi
    -> FROM Konsumen INNER JOIN Pesan USING (IDKonsumen)
    -> INNER JOIN Transaksi USING (IDPesan)
    -> WHERE IDDVD=4
    -> ORDER BY LNKonsumen;
+------------------+-------------+
| Konsumen         | IDTransaksi |
+------------------+-------------+
| Putra H. Nababan |          12 |
| Najwa Shihab     |           5 |
| Ralph Tampubolon |           2 |
| Joko Widodo      |           8 |
+------------------+-------------+
4 rows in set (0.00 sec)

Selanjutnya, Anda menggunakan statemen SELECT untuk menggabungkan empat tabel untuk menampilkan nama-nama partisipan, film-film mereka berpartisipasi, dan peran-peran yang dimainkan. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT CONCAT_WS(' ', FNPartisipan, MNPartisipan, LNPartisipan) AS Partisipan, NamaDVD,
    -> DeskripsiPeran AS Peran
    -> FROM DVD AS d, PartisipanDVD As dp, Partisipan AS p, Peran AS r
    -> WHERE d.IDDVD=dp.IDDVD AND p.IDPartisipan=dp.IDPartisipan AND r.IDPeran=dp.IDPeran
    -> ORDER BY LNPartisipan;
+------------------+-----------------+------------------+
| Partisipan       | NamaDVD         | Peran            |
+------------------+-----------------+------------------+
| John Barry       | Out of Africa   | Komposer         |
| Irving Berlin    | White Christmas | Komposer         |
| Henry Buck       | What's Up, Doc? | Penulis Skenario |
| Rosemary Clooney | White Christmas | Aktor            |
| Bing Crosby      | White Christmas | Aktor            |
| Michael Curtiz   | White Christmas | Sutradara        |
| Danny Kaye       | White Christmas | Aktor            |
| Sydney Pollack   | Out of Africa   | Produser         |
| Sydney Pollack   | Out of Africa   | Sutradara        |
| Robert Redfort   | Out of Africa   | Aktor            |
| Meryl Streep     | Out of Africa   | Aktor            |
+------------------+-----------------+------------------+
11 rows in set (0.00 sec)


Menggunakan Penggabungan Luar Membaca Data
Untuk menguji penggabungan kiri, Anda perlu menambahkan data pada tabel Karyawan agar dapat mendemonstrasikan bagaimana penggabungan kiri dilakukan. Tuliskanlah statemen SQL berikut ini:

mysql> INSERT INTO Karyawan
    -> VALUES(NULL, 'Rebecca', 'T.', 'Siahaan'),
    -> (NULL, 'Rico', 'Chandra', 'Sianipar');
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

Sekarang, Anda akan melakukan penggabungan luar atas tabel Karyawan dan tabel Pesan. Karena tabel Karyawan dinamai lebih dahulu dalam kondisi penggabungan, semua baris dibaca dari tabel tersebut, tidak memedulikan apakah baris-baris tersebut berkaitan dengan tabel Pesan. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT CONCAT_WS(' ', FNKaryawan, MNKaryawan, LNKaryawan) AS Karyawan, IDPesan
    -> FROM Karyawan LEFT JOIN Pesan USING (IDKaryawan)
    -> ORDER BY LNKaryawan;
+-------------------------+---------+
| Karyawan                | IDPesan |
+-------------------------+---------+
| Muhammad Irwan          |       1 |
| Muhammad Irwan          |       6 |
| Rebecca T. Siahaan      |    NULL |
| Rismon H. Sianipar      |       5 |
| Rismon H. Sianipar      |      11 |
| Rico Chandra Sianipar   |    NULL |
| Krista C. Simanungkalit |       4 |
| Krista C. Simanungkalit |      12 |
| Tobat Sinaga            |       3 |
| Tobat Sinaga            |       9 |
| Hamzan Wadi             |       8 |
| Hamzan Wadi             |      13 |
| I Ketut Wiryajati       |       2 |
| I Ketut Wiryajati       |       7 |
| I Ketut Wiryajati       |      10 |
+-------------------------+---------+
15 rows in set (0.04 sec)


Mencantumkan Subquery Pada Statemen SELECT
Statemen SELECT berikut membaca data dari tabel DVD. Statemen itu menggunakan sebuah subquery untuk menghasilkan suatu nilai dari nilai Status. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT NamaDVD
    -> FROM DVD
    -> WHERE IDStatus<>
    -> (SELECT IDStatus FROM Status WHERE DeskripsiStatus='Tersedia')
    -> ORDER By NamaDVD;
+--------------------+
| NamaDVD            |
+--------------------+
| A Room with a View |
| Out of Africa      |
| Some Like It Hot   |
| White Christmas    |
+--------------------+
4 rows in set (0.04 sec)

Statemen SELECT berikutnya membaca data dari tabel DVD dan tabel TipeMovie. Statemen tersebut juga memuat subquery di dalam klausa WHERE untuk membaca suatu nilai dari tabel Status. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT NamaDVD, DeskripsiTipeM AS TipeMovie
    -> FROM DVD AS d, TipeMovie AS tm
    -> WHERE d.IDTipeM=tm.IDTipeM AND IDStatus IN
    -> (SELECT IDStatus FROM Status WHERE DeskripsiStatus<>'Tersedia')
    -> ORDER BY NamaDVD;
+--------------------+-----------------+
| NamaDVD            | TipeMovie       |
+--------------------+-----------------+
| A Room with a View | Drama           |
| Out of Africa      | Drama           |
| Some Like It Hot   | Komedi Romantis |
| White Christmas    | Musikal         |
+--------------------+-----------------+
4 rows in set (0.00 sec)

Statemen SELECT berikut menggunakan klausa GROUP BY untuk mengelompokkan data. Selain itu, statemen tersebut memuat sebuah klausa HAVING yang memuat subquery yang membaca data dari tabel TipeMovie. Tuliskanlah statemen SQL berikut ini:

mysql> SELECT IDTipeM, IDRating, COUNT(*) AS TotalDVD
    -> FROM DVD
    -> GROUP BY IDTipeM, IDRating
    -> HAVING IDTipeM IN
    -> (SELECT IDTipeM FROM TipeMovie WHERE DeskripsiTipeM<>'Dokumenter');
+---------+----------+----------+
| IDTipeM | IDRating | TotalDVD |
+---------+----------+----------+
| mt11    | NR       |        2 |
| mt11    | PG       |        2 |
| mt12    | G        |        1 |
| mt12    | NR       |        1 |
| mt12    | R        |        1 |
| mt13    | NR       |        1 |
| mt16    | NR       |        1 |
+---------+----------+----------+
7 rows in set (0.00 sec)


Mengimpor Data Dari File
Statemen SELECT berikut mengekspor data dari tabel-tabel gabungan dalam database RentalDVD ke sebuah teks dengan nama Ada.txt. Tulislah SQL berikut ini:

mysql> SELECT NamaDVD, DeskripsiTipeM, DeskripsiFormat, d.IDRating
    -> INTO OUTFILE 'C:/wamp/www/Ada.txt'
    -> FROM DVD AS d, TipeMovie AS m, Format AS f
    -> WHERE d.IDTipeM=m.IDTipeM AND d.IDFormat=f.IDFormat
    -> AND IDStatus='s2'
    -> ORDER BY NamaDVD;
Query OK, 5 rows affected (0.01 sec)

Berikut adalah isi dari file Ada.txt:



Pada statemen SELECT berikut, Anda menambahkan subklausa FIELDS TERMINATED BY dan LINES TERMINATED BY. Tulislah SQL berikut ini:

mysql> SELECT NamaDVD, DeskripsiTipeM, DeskripsiFormat, d.IDRating
    -> INTO OUTFILE 'C:/wamp/www/Ada2.txt'
    -> FIELDS TERMINATED BY '*,*'
    -> LINES TERMINATED BY '**\n'
    -> FROM DVD AS d, TipeMovie AS m, Format AS f
    -> WHERE d.IDTipeM=m.IDTipeM AND d.IDFormat=f.IDFormat
    -> AND IDStatus='s2'
    -> ORDER BY NamaDVD;
Query OK, 5 rows affected (0.02 sec)

Berikut adalah isi dari file Ada2.txt:





Menyalin Data Ke Tabel
Sekarang, Anda akan menciptakan sebuah definisi tabel yang memuat statemen SELECT untuk membaca data dari tabel DVD, TipeMovie, dan Format. Tuliskanlah statemen SQL berikut:

mysql> CREATE TABLE DVD2
    -> (
    -> NamaDVD VARCHAR(60) NOT NULL,
    -> DeskripsiTipeM VARCHAR(30) NOT NULL,
    -> DeskripsiFormat VARCHAR(15) NOT NULL,
    -> IDRating VARCHAR(4) NOT NULL
    -> )
    -> SELECT NamaDVD, DeskripsiTipeM, DeskripsiFormat, d.IDRating
    -> FROM DVD AS d, TipeMovie AS m, Format AS f
    -> WHERE d.IDTipeM=m.IDTipeM AND d.IDFormat=f.IDFormat
    -> AND IDStatus='s2'
    -> ORDER BY NamaDVD;
Query OK, 5 rows affected (0.31 sec)
Records: 5  Duplicates: 0  Warnings: 0

Selanjutnya, Anda bisa melihat isi dari tabel DVD2, sebagai berikut:

mysql> SELECT * FROM DVD2;
+-------------------------------+----------------+-----------------+----------+
| NamaDVD                       | DeskripsiTipeM | DeskripsiFormat | IDRating |
+-------------------------------+----------------+-----------------+----------+
| Amadeus                       | Drama          | Widescreen      | PG       |
| Mash                          | Komedi         | Widescreen      | R        |
| The Maltese Falcon            | Drama          | Widescreen      | NR       |
| The Rocky Horror Picture Show | Komedi         | Widescreen      | NR       |
| What's Up, Doc?               | Komedi         | Widescreen      | G        |
+-------------------------------+----------------+-----------------+----------+
5 rows in set (0.00 sec)


Menyalin Data Ke Tabel Yang Telah Ada
Sekarang, Anda akan menciptakan statemen INSERT untuk menyalin data ke tabel DVD2. Tuliskanlah statemen SQL berikut:

mysql> INSERT INTO DVD2
    -> SELECT NamaDVD, DeskripsiTipeM, DeskripsiFormat, d.IDRating
    -> FROM DVD AS d, TipeMovie AS m, Format AS f
    -> WHERE d.IDTipeM=m.IDTipeM AND d.IDFormat=f.IDFormat
    -> AND IDStatus='s1'
    -> ORDER BY NamaDVD;
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0

Selanjutnya, Anda bisa melihat isi dari tabel DVD2, sebagai berikut:

mysql> SELECT * FROM DVD2;
+-------------------------------+----------------+-----------------+---------+
| NamaDVD                       | DeskripsiTipeM | DeskripsiFormat | IDRating|
+-------------------------------+----------------+-----------------+---------+
| Amadeus                       | Drama          | Widescreen      | PG      |
| Mash                          | Komedi         | Widescreen      | R       |
| The Maltese Falcon            | Drama          | Widescreen      | NR      |
| The Rocky Horror Picture Show | Komedi         | Widescreen      | NR      |
| What's Up, Doc?               | Komedi         | Widescreen      | G       |
| A Room with a View            | Drama          | Widescreen      | NR      |
| Out of Africa                 | Drama          | Widescreen      | PG      |
| White Christmas               | Musikal        | Widescreen      | NR      |
+-------------------------------+----------------+-----------------+---------+
8 rows in set (0.00 sec)


Mengimpor Data Ke Tabel Yang Telah Ada
Pertama-tama, Anda perlu menghapus data yang tersimpan pada tabel DVD2. Eksekusilah statemen SQL berikut:

mysql> TRUNCATE DVD2;
Query OK, 0 rows affected (0.28 sec)

mysql> SELECT * FROM DVD2;
Empty set (0.00 sec)

Sekarang, Anda mengimpor data dari file Ada.txt ke dalam tabel DVD2. Eksekusilah statemen SQL berikut:

mysql> LOAD DATA INFILE 'C:/wamp/www/Ada.txt'
    -> INTO TABLE DVD2;
Query OK, 5 rows affected, 12 warnings (0.22 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 12

Selanjutnya, Anda bisa melihat isi dari tabel DVD2, sebagai berikut:

mysql> SELECT * FROM DVD2;
+-------------------------------+----------------+-----------------+----------+
| NamaDVD                       | DeskripsiTipeM | DeskripsiFormat | IDRating |
+-------------------------------+----------------+-----------------+----------+
| Amadeus                       | Drama          | Widescreen      | PG       |
| Mash                          | Komedi         | Widescreen      | R        |
| The Maltese Falcon            | Drama          | Widescreen      | NR       |
| The Rocky Horror Picture Show | Komedi         | Widescreen      | NR       |
| What's Up, Doc?               | Komedi         | Widescreen      | G        |
+-------------------------------+----------------+-----------------+----------+
5 rows in set (0.00 sec)



Mengimpor Data Ke Tabel Yang Telah Ada Menggunakan Perintah source
Ciptakanlah sebuah file teks dan namai dengan DVD_1.sql. Tambahkan statemen berikut pada file tersebut, dan simpan pada direktori server Anda:

INSERT INTO DVD2
VALUES ('A Room with a View', 'Drama', 'Widescreen', 'NR');

Selanjutnya, Anda menggunakan perintah source untuk mengeksekusi statemen INSERT pada file DVD_1.sql. Eksekusilah SQL berikut:

mysql> source C:/wamp/www/DVD_1.sql
Query OK, 1 row affected (0.06 sec)

Selanjutnya, Anda bisa melihat isi dari tabel DVD2, sebagai berikut:

mysql> SELECT * FROM DVD2;
+-------------------------------+----------------+-----------------+----------+
| NamaDVD                       | DeskripsiTipeM | DeskripsiFormat | IDRating |
+-------------------------------+----------------+-----------------+----------+
| Amadeus                       | Drama          | Widescreen      | PG       |
| Mash                          | Komedi         | Widescreen      | R        |
| The Maltese Falcon            | Drama          | Widescreen      | NR       |
| The Rocky Horror Picture Show | Komedi         | Widescreen      | NR       |
| What's Up, Doc?               | Komedi         | Widescreen      | G        |
| A Room with a View            | Drama          | Widescreen      | NR       |
+-------------------------------+----------------+-----------------+----------+
6 rows in set (0.00 sec)


Menciptakan Transaksi
Langkah pertama adalah memulai transaksi Anda. Eksekusilah statemen SQL berikut:

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

Sekarang, ciptakanlah statemen INSERT yang menambahkan satu baris pada tabel Karyawan. Eksekusilah statemen SQL berikut:

mysql> INSERT INTO Karyawan
    -> VALUES(NULL, 'Rebecca', 'V.', 'Hinalang');
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
|          9 | Rebecca    | V.         | Hinalang      |
+------------+------------+------------+---------------+
9 rows in set (0.00 sec)

Sekarang, Anda bisa membatalkan statemen INSERT yang telah Anda tuliskan sebelumnya. Eksekusilah statemen SQL berikut:

mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
+------------+------------+------------+---------------+
8 rows in set (0.00 sec)

Sekarang, Anda memulai transaksi kedua. Eksekusilah statemen SQL berikut:

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

Sekarang, Anda akan menambahkan baris yang sama pada tabel Karyawan. Eksekusilah statemen SQL berikut:

mysql> INSERT INTO Karyawan
    -> VALUES(NULL, 'Rebecca', 'V.', 'Hinalang');
Query OK, 1 row affected (0.06 sec)

Terakhir, Anda perlu memastikan transaksi Anda sehingga perubahan tersebut terjadi. Eksekusilah statemen SQL berikut:

mysql> COMMIT;
Query OK, 0 rows affected (0.06 sec)

Untuk memverifikasi perubahan yang telah dilakukan pada tabel, eksekusilah statemen SQL berikut:

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
|         11 | Rebecca    | V.         | Hinalang      |
+------------+------------+------------+---------------+
9 rows in set (0.00 sec)

Sekarang, Anda perlu menghapus baris yang Anda tambahkan pada tabel Karyawan untuk mengembalikan tabel ke kondisi awal. Eksekusilah statemen SQL berikut:

mysql> DELETE FROM Karyawan
    -> WHERE LNKaryawan='Hinalang';
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
+------------+------------+------------+---------------+
8 rows in set (0.00 sec)


Menggunakan SAVEPOINT
Langkah pertama adalah memulai transaksi Anda. Eksekusilah statemen SQL berikut:

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

Sekarang, ciptakanlah statemen INSERT yang menambahkan satu baris pada tabel Karyawan. Eksekusilah statemen SQL berikut:

mysql> INSERT INTO Karyawan
    -> VALUES(NULL, 'Rebecca', 'V.', 'Hinalang');
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
|         12 | Rebecca    | V.         | Hinalang      |
+------------+------------+------------+---------------+
9 rows in set (0.00 sec)

Sekarang, ciptakan sebuah savepoint sp1 pada transaksi Anda. Eksekusilah statemen SQL berikut:

mysql> SAVEPOINT sp1;
Query OK, 0 rows affected (0.00 sec)

Sekarang, ciptakanlah statemen INSERT yang menambahkan satu baris lagi pada tabel Karyawan. Eksekusilah statemen SQL berikut:

mysql> INSERT INTO Karyawan
    -> VALUES(NULL, 'Freddy', 'V.', 'Siantar');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
|         12 | Rebecca    | V.         | Hinalang      |
|         13 | Freddy     | V.         | Siantar       |
+------------+------------+------------+---------------+
10 rows in set (0.00 sec)

Sekarang Anda bisa kembali ke titik savepoint. Eksekusilah statemen SQL berikut:

mysql> ROLLBACK TO SAVEPOINT sp1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
|         12 | Rebecca    | V.         | Hinalang      |
+------------+------------+------------+---------------+
9 rows in set (0.00 sec)

Langkah selanjutnya adalah memastikan bagian transaksi yang permanen. Eksekusilah statemen SQL berikut:

mysql> COMMIT;
Query OK, 0 rows affected (0.07 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
|         12 | Rebecca    | V.         | Hinalang      |
+------------+------------+------------+---------------+
9 rows in set (0.00 sec)

Sekarang, Anda perlu menghapus baris yang Anda tambahkan pada tabel Karyawan untuk mengembalikan tabel ke kondisi awal. Eksekusilah statemen SQL berikut:

mysql> DELETE FROM Karyawan
    -> WHERE LNKaryawan='Hinalang';
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM Karyawan;
+------------+------------+------------+---------------+
| IDKaryawan | FNKaryawan | MNKaryawan | LNKaryawan    |
+------------+------------+------------+---------------+
|          1 | Rismon     | H.         | Sianipar      |
|          2 | I          | Ketut      | Wiryajati     |
|          3 | Muhammad   | NULL       | Irwan         |
|          4 | Hamzan     | NULL       | Wadi          |
|          5 | Tobat      | NULL       | Sinaga        |
|          6 | Krista     | C.         | Simanungkalit |
|          7 | Rebecca    | T.         | Siahaan       |
|          8 | Rico       | Chandra    | Sianipar      |
+------------+------------+------------+---------------+
8 rows in set (0.00 sec)




No comments:

Post a Comment