modul praktikum sbd ptiik 2013

Upload: ardana-putra

Post on 26-Feb-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    1/70

    MODUL PRAKTIKUM

    SISTEM BASIS DATA

    PTI 15007

    LABORATORIUM SISTEM INFORMASI

    PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER

    UNIVERSITAS BRAWIJAYA

    MALANG

    2013

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    2/70

    2

    DAFTAR ISI

    Bab I - Data Definition Languange (Ddl) .................................................................................. 5

    1.1 Tipe Data ..................................................................................................................... 5

    1.2 Membuat Tabel ........................................................................................................... 5

    1.3 Melihat Tabel .............................................................................................................. 9

    1.4 Membuat View ............................................................................................................ 9

    1.5 Memodifikasi Objek Database .................................................................................. 10

    1.6 Penghapusan Objek Database ................................................................................... 11

    1.7 Latihan ............................................................................................................................ 12

    Bab II - Simple Sql Queries................................................................................................... 13

    2.1 Simple Sql ...................................................................................................................... 13

    2.2 Latihan ............................................................................................................................ 15

    Bab III - Data Manipulation Language .................................................................................... 16

    3.1 Data Manipulation Language ......................................................................................... 16

    3.2 Menambahkan Baris Baru Ke Dalam Tabel .................................................................. 16

    3.3 Menambahkan Baris Dengan Nilai Null ........................................................................ 17

    3.4 Sintak Statement Update ................................................................................................ 17

    3.5 Mengupdate Baris Dalam Tabel ..................................................................................... 17

    3.6 Statement Delete ............................................................................................................ 18

    3.7 Menghapus Baris Dari Tabel.......................................................................................... 18

    3.8 Menggunakan Subquery Dalam Statement Insert .......................................................... 18

    3.9 Transaksi Database ......................................................................................................... 18

    3.10 Latihan .......................................................................................................................... 19

    Bab IV - Menampilkan Data Dari Banyak Tabel .................................................................... 20

    4.1 Penggabungan Tabel ...................................................................................................... 20

    4.2 Inner Join ........................................................................................................................ 20

    4.3 Outer Joins...................................................................................................................... 23

    4.4 Self Join .......................................................................................................................... 27

    4.5 Latihan ............................................................................................................................ 27

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    3/70

    3

    Bab V - Relational Operator .................................................................................................... 28

    5.1 Contoh Penggunaan Operasi Matematika ...................................................................... 28

    5.2 Fungsi Baris Tunggal ..................................................................................................... 29

    Bab VIColumn Function And Grouping ............................................................................. 34

    6.1 Fungsi Group .................................................................................................................. 34

    6.2 Latihan ............................................................................................................................ 38

    Bab VII - Union, Intersection, Dan Difference Operations ..................................................... 39

    7.1 Union .............................................................................................................................. 39

    7.2 Intersection ..................................................................................................................... 40

    7.3 Difference ....................................................................................................................... 42

    7.4 Operasi Gabungan Dari Union, Intersection, Dan Difference ....................................... 44

    7.5 Latihan ............................................................................................................................ 44

    Bab VIII - Sub Query ............................................................................................................... 46

    8.1 Menggunakan Subquery Untuk Menyelesaikan Masalah .............................................. 46

    8.2 Sintak Subquery ............................................................................................................. 47

    8.3 Penempatan Subquery .................................................................................................... 47

    8.4 Penggunaan Subquery .................................................................................................... 48

    8.5 Petunjuk Penggunaan Subquery ..................................................................................... 49

    8.6 Tipe-Tipe Subquery........................................................................................................ 49

    8.7 Subquery Baris Tunggal ................................................................................................. 49

    8.8 Menjalankan Subquery Baris Tunggal ........................................................................... 50

    8.9 Menggunakan Fungsi Group Dalam Subquery .............................................................. 50

    8.10 Klausa Having Dengan Subquery ................................................................................ 51

    8.11 Subquery Baris Ganda .................................................................................................. 52

    8.12 Latihan .......................................................................................................................... 54

    Bab IX - Data Concurrency And Locking ............................................................................... 54

    9.1 Concurrency And Locking ............................................................................................. 55

    9.2 Isolation Level ................................................................................................................ 55

    9.3 Lock Wait ....................................................................................................................... 56

    9.4 Deadlocks ....................................................................................................................... 56

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    4/70

    4

    9.5 Cursor Stability With Currently Committed (Cs With Cc) ............................................ 57

    9.6 With Currently Committed ............................................................................................ 59

    9.7 Repeatable Read ............................................................................................................. 61

    9.8 Skenario Phantom Read : Read Stability ....................................................................... 62

    9.9 Uncommited Read : Cursor Stability ............................................................................. 63

    9.10 Skenario Uncommited Read : Uncommited Read ....................................................... 64

    Bab X - Backup And Recovery ............................................................................................... 65

    10.1 Gambaran Backup Dan Recovery ................................................................................ 65

    10.2 Database Logging ......................................................................................................... 66

    10.3 Backup .......................................................................................................................... 67

    10.4 Incremental Backup...................................................................................................... 68

    10.5 Database Recovery ....................................................................................................... 68

    10.6 Tablespace Backup Dan Restore .................................................................................. 69

    10.7 Latihan .......................................................................................................................... 70

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    5/70

    5

    BAB I - DATA DEFINITION LANGUANGE (DDL)

    TUJUAN BELAJAR :

    Memahami tipe data yang di dukung oleh DBMS

    Memahami dan menerapkan sintaks DDL

    Memahami dan menerapkan constraint

    1.1

    TIPE DATA

    Tipe-tipe data yang digunakan dalam SQL tidak memiliki perbedaan jauh dengan bahasa

    pemprograman pada umumnya. Dalam SQL kita akan menemukan tipe data seperti

    integer (bigint, int, smallint), float, decimal/numeric, double, real, char, varchar, date,

    time, timestamp, blob, dll.

    Mengenai tipe data waktu pembagiannya seperti ini :

    a. Date ( YYYY-MM-DD)

    b. Time (HH:MM:SS)

    c. Timestamp (YYYY- MM- DD-HH:MM:SS:ssssss)

    1.2 MEMBUAT TABEL

    Untuk membuat tabel, syntax yang digunakan adalah CREATE TABLE. Berikut ini

    adalah Contoh pembuatan tabel :

    1.2.1 Tabel Sederhana

    CREATE TABLE MYTABLE (col integer)MYTABLE adalah nama dari tabel, col adalah nama dari atribut/field, integer

    adalah tipe data dari atribut.

    1.2.2

    Tabel dengan Default Value

    CREATE TABLE USERS (

    NAME CHAR(20),

    AGE INTEGER,

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    6/70

    6

    PROFESSION VARCHAR(30) with default 'Student')

    CREATE TABLE DEPT (

    DEPTNO SMALLINT NOT NULL

    GENERATED ALWAYS AS IDENTITY (START WITH 500, INCREMENT

    BY 1),

    DEPTNAME VARCHAR(36) NOT NULL,

    MGRNO CHAR(6),

    ADMRDEPT SMALLINT NOT NULL,

    LOCATION CHAR(30))

    Pada tabel dengan default value yang pertama, field PROFESSION memiliki nilai

    yang sudah kita tetapkan, yaitu student. Jika tabel ini tidak kita isi, maka student

    secara otomatis menjadi nilai dari field profesi.

    Pada tabel yang kedua, field DEPTNO memiliki nilai awal 500, ketika

    pertambahan baris maka terjadi penambahan nilai +1. Tabel baris kedua menjadi

    501, baris ketiga menjadi 502, dst.

    1.2.3

    Tabel dengan NOT NULL Value

    Pada tabel DEPT di atas, pada NOT NULL. NOT NULL menginisialisasi field

    bahwa field tersebut tidak boleh kosong/tidak terisi.

    1.2.4 Tabel dengan Constraint

    Contraint berfungsi untuk mendefinisikan aturan-aturan dalam tabel. Inilah tipe-

    tipe contraint :

    a. UNIQUE

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    7/70

    7

    Fungsinya adalah menjaga tabel dari terjadinya duplikasi nilai. Namun NULL

    diperbolehkan menjadi nilai data dari suatu field UNIQUE tabel.

    Contoh tabel dengan UNIQUE :

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    UNIQUE (P_Id)

    )

    CREATE TABLE Persons

    (

    P_Id int NOT NULL UNIQUE,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255)

    )

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

    )

    b. PRIMARY KEY

    Fungsinya adalah mirip dengan UNIQUE, Namun PRIMARY KEY tidak

    memperbolehkan adanya nilai NULL.

    CREATE TABLE M_KERJA (

    K_KERJA VARCHAR(3) NOT NULL,

    SINGKAT VARCHAR(15) NULL,

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    8/70

    8

    CONTENT VARCHAR(45) NULL,

    PRIMARY KEY(K_KERJA)

    )

    c. REFERENTIAL

    Fungsinya adalah untuk menjaga hubungan antar tabel.

    format tabel Referential Integrity

    CREATE TABLE DEPENDANT_TABLE

    (ID INTEGER REFERENCES BASE_TABLE

    (UNIQUE_OR_PRIMARY_KEY),

    NAME VARCHAR(9)

    );

    CREATE TABLE DEPENDANT_TABLE

    (ID INTEGER,

    NAME VARCHAR(9),

    CONSTRAINT constraint_name FOREIGN KEY (ID)

    REFERENCES BASE_TABLE(UNIQUE_OR_PRIMARY_KEY));

    Contoh

    CREATE TABLE MAHASISWA (

    NIM char (15) PRIMARY KEY NOT NULL,

    NAMA char(30)

    );

    CREATE TABLE KHS (

    NIM char (15) REFERENCES MAHASISWA (NIM),

    :

    :

    );

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    9/70

    9

    d. CHECK

    Fungsinya adalah menjaga agar data yang dimasukkan dalam field/kolom

    sesuai dengan aturan yang dibuat.

    Contoh Tabel dengan PRIMARY KEY dan CHECK

    CREATE TABLE EMPLOYEE

    (ID INTEGER NOT NULL PRIMARY KEY,

    NAME VARCHAR(9),

    DEPT SMALLINT CHECK (DEPT BETWEEN 10 AND 100),

    JOB CHAR(5) CHECK (JOB IN 'Sales','Mgr','Clerk'),

    HIREDATE DATE,

    SALARY DECIMAL(7,2),

    CONSTRAINT YEARSAL CHECK ( YEAR(HIREDATE) > 1986

    OR SALARY > 40500 )

    )

    1.3 MELIHAT TABEL

    Tabel yang sudah kita buat sebelumnya bisa kita lihat dengan menggunakan perintah

    SELECT

    Contoh melihat keseluruhan isi tabel EMPLOYEE

    SELECT * from EMPLOYEE

    Jika hanya mau melihat sebagian field dari tabel EMPLOYEE

    SELECT NAME, JOB from EMPLOYEE

    1.4 MEMBUAT VIEW

    VIEW adalah virtual tabel yang diturunkan dari satu atau lebih tabel atau juga dari view

    lainnya. Mengapa disebut virtual? Karena view tidak memiliki data sebenarnya, dia

    hanya mengacu pada hasil dari sebuah SELECT STATEMENT.

    Contoh pembuatan view yang diambil dari tabel EMPLOYEE

    CREATE VIEW MYVIEW AS

    SELECT LASTNAME, HIREDATE FROM EMPLOYEE

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    10/70

    10

    Untuk melihat view, kita bisa menggunakan cara yang sama seperti melihat tabel.

    1.5

    MEMODIFIKASI OBJEK DATABASEDatabase yang kita buat bisa kita modifikasi. Fungsi utama yang digunakan untuk

    memodifikasi adalah ALTER. Modifikasi object database meliputi :

    1.5.1

    Menambah field/kolom baru

    Format penambahan field baru adalah

    ALTER TABLE nama_tabel

    ADD COLUMN nama_kolom tipe_data (batasan);

    Contoh penambahan field baru pada tabel EMPLOYEE

    ALTER TABLE Employees

    ADD COLUMN EMPAddress Char(40);

    1.5.2 Merubah Nama field/kolom

    Format perubahan nama field adalah

    ALTER TABLE nama_tabel

    RENAME COLUMN nama_kolom_lama TO nama_kolom_baru;

    Contoh perubahan field pada tabel EMPLOYEE

    ALTER TABLE Employees

    RENAME COLUMN EMPAddress TO Alamat;

    1.5.3 Merubah tipe data dari field

    Format Perubahan tipe data dari field adalah

    ALTER TABLE nama_tabel

    ALTER COLUMN nama_kolomSET DATA TYPE new_data_type

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    11/70

    11

    Contoh perubahan tipe data pada tabel EMPLOYEE

    ALTER TABLE EMPLOYEE

    ALTER COLUMN ALAMAT SET DATA TYPE char (15)

    1.5.4 Menambah Constraint

    Format penambahan constraint

    ALTER TABLE nama_tabel

    ALTER COLUMN nama_kolomSET constraint

    Contoh penambahan constraint

    ALTER TABLE EMPLOYEE

    ALTER COLUMN ALAMAT SET NOT NULL

    1.5.5 Menghapus kolom

    Format penghapusan kolom

    ALTER TABLE nama_tabel

    DROP COLUMN nama_kolom

    Contoh penambahan constraint

    ALTER TABLE EMPLOYEE

    DROP COLUMN ALAMAT

    1.5.6

    Merubah Nama Objek DatabaseFormat Perubahan nama suatu tabel :

    RENAME nama_tabelto nama_tabel_baru;

    Contoh perubahan nama objek EMPLOYEE:

    RENAME EMPLOYEE to PEGAWAI;

    1.6 PENGHAPUSAN OBJEK DATABASE

    Format Penghapusan suatu tabel :

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    12/70

    12

    DROP TABLE nama_tabel;

    Contoh :

    DROP TABLE PEGAWAI;

    Berhati hati ketika Melakukan penghapusan objek/tabel. Karena ketika anda

    menghapus suatu objek berarti :

    a.

    Semua data dan struktur dari table akan dihapus

    b. Semua transaksi pending akan di-commit

    c.Semua indeks akan dihapus

    d. Perintah drop ini tidak bisa di-rollback

    1.7 LATIHAN1. Implementasikan model relasioanal berikut ke DBMS :

    2.

    Modifikasi table MHS_KOTA sehingga mempunyai struktur seperti berikut

    (perlihatkan hasilnya) :

    Name Null? Type Constr.

    NIM Not VARCHAR(15) FK PK

    K_PROPINSI VARCHAR(9) FK

    K_NEGARA VARCHAR(9) FK

    K_KOTA VARCHAR(9) FK

    ALAMAT VARCHAR(110)

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    13/70

    13

    KODE_POS VARCHAR(6)

    3. Buatlah table MHS_KOTA2 yang memiliki struktur sama seperti table MHS_KOTA!

    4.

    Drop table MHS_KOTA!

    5.

    Ubah nama table MHS_KOTA2 menjadi MHS_KOTA!

    BAB II - SIMPLE SQL QUERIES

    TUJUAN BELAJAR :

    Memahami operasi SELECT

    Menampilkan data dari suatu tabel

    2.1 SIMPLE SQL

    Struktur sederhana sebuah query SQL adalah sebagai berikut.

    SELECTnama_kolom

    FROMnama_tabel

    Perintah SELECT digunakan untuk melihat isi suatu tabel tertentu.Contoh melihat keseluruhan isi tabel DEPARTMENT

    SELECT * FROM DEPARTMENT

    Gambar 2.1 Contoh menampilkan keseluruhan isi table

    Jika hanya mau melihat sebagian field dari tabel DEPARTMENT

    SELECT DEPTNO, DEPTNAME, ADMRDEPT FROM DEPARTMENT

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    14/70

    14

    Gambar 2.2 Contoh menampilkan sebagian kolom suatu table

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    15/70

    15

    2.2 LATIHAN

    1. Tampilkan seluruh data dari tabel ACT dan PROJECT!

    2.

    Tampilkan SALES_PERSON, REGION, SALES dari tabel SALES!

    3. Tampilkan 5 kolom dari tabel EMPLOYEE! (kolom yang ditampilkan bebas)

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    16/70

    16

    BAB III - DATA MANIPULATION LANGUAGE

    TUJUAN BELAJAR :

    Memahami Statement DML (Data Manipulation Language)

    Menyisipkan baris kedalam table

    Merubah baris dalam table

    Menghapus baris dari table

    Mengontrol transaksi

    3.1 DATA MANIPULATION LANGUAGE

    Data Manipulation Language (DML) adalah suatu statement yang dijalankan pada saat kita

    memerlukan :

    Penambahan baris baru pada table

    Mengupdate baris yang ada pada table

    Menghapus baris yang ada pada table

    Statement DML identic dengan operasi INSERT, UPDATEdan DELETE.

    Istilah transaksi mengandung pengertian kumpulan Statement DML yang membentuk suatu

    fungsi tertentu.

    3.2 MENAMBAHKAN BARIS BARU KE DALAM TABEL

    INSERT INTO :perintah ini digunakan untuk memasukkan data ke database.

    Menambahkan baris baru kedalam table menggunakan perintah INSERT INTO.

    INSERT INTO table [(column [, column ] ) ]

    VALUES (value [, value] );

    INSERT INTO STAFF (id, name, job, dept, salary)

    values (111, Deny, Mgr, 20, 10000)

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    17/70

    17

    3.3 MENAMBAHKAN BARIS DENGAN NILAI NULL

    Kolom yang tidak disebutkan dalam perintah INSERT INTO secara otomatis akan diisi

    dengan nilai NULL.

    Atau secara eksplisit memasukkan nilai NULL ke suatu kolom :

    3.4 SINTAK STATEMENT UPDATE

    Untuk memodifikasi baris data yang ada pada table digunakan perintah UPDATE.

    Sintak dari perintah UPDATE :

    UPDATE table

    SET column = value [, column = value, ]

    [WHERE condition];

    3.5 MENGUPDATE BARIS DALAM TABEL

    Berikut contoh perintah UPDATE untuk mengubah satu baris saja :

    Jika klausa WHERE dihilangkan, maka perintah UPDATE akan mengubah nilai kolom dari

    semua data atau record yang ada pada tabel :

    INSERT INTO STAFF (id, name, job, ___ ___)

    VALUES (190, Will, Acc);

    INSERT INTO STAFF

    VALUES 200 Smith Sec NULL NULL

    UPDATE STAFF

    SET salary = 50000.00

    =

    UPDATE staff

    SET id = 200

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    18/70

    18

    3.6 STATEMENT DELETE

    Baris data yang ada pada table dapat dihapus dengan menggunakan perintah DELETE.

    Sintakpenulisannya :

    3.7 MENGHAPUS BARIS DARI TABEL

    Jika klausa WHERE disertakan pada perintah DELETE maka baris data tertentu yang akan

    dihapus hanya yang memenuhi criteria pada WHERE :

    1 row deleted

    Tapi jika klausa WHERE dihilangkan, maka semua baris data dalam table akan dihapus :

    Semua baris data di copy_staff akan terhapus.

    3.8 MENGGUNAKAN SUBQUERY DALAM STATEMENT INSERT

    Subquery dapat digunakan dalam statement INSERT :

    3.9 TRANSAKSI DATABASE

    Transaksi database berisi salah satu dari hal berikut :

    Statement DML untuk melakukan manipulasi terhadap data yang telah ada.

    Statement DDL untuk membuat, menghapus atau mengubah sebuah object database.

    DELETE FROM STAFF

    WHERE id = 200;

    DELETE FROM copy_staff

    INSERT INTO copy_staff

    (SELECT id, name, job, dept, salary

    FROM staff

    WHERE id = 201)

    VALUES (201, Kimura, Acc, 20, 20000);

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    19/70

    19

    3.10 LATIHAN

    1. Buat table copy_employee yang mempunyai struktur yang sama dengan table

    employee.

    2.

    Tambahkan baris data berikut kedalam table copy_employee

    EMPNO FIRSTNME SALARY

    68093 Alisa Aulia 1000

    11039 Bayu Setiawan 2000

    11093 Willy Wonka 500

    11033 Jessica Alba 2500

    11099 Morgan Kuffman 1200

    3. Ubah nama yang terdapat pada row ke-2 menjadi Lebo Mariano

    4. Ubah Salary menjadi 1700 untuk semua employee yang 2 digit empno

    terbelakangnya 93. Periksa perubahan yang dibuat pada soal no 3 dan 4.

    5.

    Delete mahasiswa dengan nama Morgan Kuffman, kemudian periksa hasilnya :

    6. Setelah itu hapus semua data dalam table copy_employee

    7. Periksa hasilnya dengan me-list semua isi tabel

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    20/70

    20

    BAB IV - MENAMPILKAN DATA DARI BANYAK TABEL

    TUJUAN BELAJAR :

    Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:

    Dapat menulis statement SELECT yang mengakses data ke lebih dari satu tabel dengan

    menggunakan operator join.

    Menampilkan data yang tidak memenuhi kondisi join dengan menggunakan operator

    outer join.

    Melakukan join terhadap table itu sendiri (self join).

    4.1 PENGGABUNGAN TABEL

    Perintah select sederhana pada SQL merdupakan perintah untuk memilih satu atau

    lebih kolom yang terdapat pada satu tabel. Kesulitan meningkat adalah ketika perintah

    select menggunakan tabel sebanyak dua atau lebih tabel sebgai sumber data yang ingin

    ditampilkan. Hal ini membuat banyak kemungkinan mengenai hasil akhir yang di dapat.

    Ada dua tipe penggabungan tabel pada perintah SQL :1.Inner join

    2.Outer join

    Kedua tipe penggabungan tersebut akan dijelaskan secara detail pada bagian dibawah

    ini.

    4.2 INNER JOIN

    Inner join adalah bentuk penggabungan yang paling sering digunakan pada

    perintah SQL. Inner join dapat di klasifikasikan ke dalam bentuk :

    4.2.1 Equi-join

    Bentuk ini digunakan ketika dua tabel digabungkan berdasarkan kesamaan

    kolom yang telah ditentukan; contohnya :

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    21/70

    21

    Gambar 4.1 : contoh equi-join

    Table EMPLOYEE memiliki primary key EMPNO, dan memiliki foreign key

    WORKDEPT dimana WORKDEPT ini merupakan primary key dari table yang

    lain yaitu table DEPARTMENT dengan nama kolom DEPTNO. Relasi antara

    EMPLOYEE dengan DEPARTEMENT disebut equi-join. Relasi antara dua

    tabel ditulis dalam klausa WHERE. Berikut contoh mendapatkan record data

    dengan menggunakan EquiJoin :

    Gambar 4.2 : mendapatkan record data dengan equi-join

    Contoh query lain Equi-join :

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    22/70

    22

    a.Menggunakan JOIN ON

    Gambar 4.3 : contoh lain penulisan equi join menggunakan join on

    b.

    Menggabungkan tiga tabel

    Gambar 4.4: Tabel Project, Department, dan Employee

    Misalnya ingin didapatkan data PROJNO, DEPTNO, MGRNO, dan

    LASTNAME dari DEPTNO = D21. Maka query untuk menampilkan data

    tersebut adalah sebagai berikut:

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    23/70

    23

    Gambar 4.5: Hasil dari pencarian nomer proyek dari department D21 beserta

    nomer manager dan nama managernya

    4.1.1 Cross join

    Cross join merupakan penggabungan dari tabel menggunakan metode Cartesian

    product sederhana. Contohnya :

    SELECT * FROM EMPLOYEE, DEPARTMENT

    4.3 OUTER JOINS

    Outer join merupakan bentuk penggabungan khusus yang digunakan pada perintah

    SQL. Pada outer joins, table pertama yang ditentukan pada perintah SQL pada klausa

    FROM, ditandai sebagai tabel KIRI dan table selain itu ditandai sebagai tabel KANAN.

    Outer join dibagi menjadi tiga tipe :

    Left outer join

    Right outer join

    Full outer join

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    24/70

    24

    Gambar 4.6 : perbedaan tipe outer join

    Berikut ini adalah dua tabel yang akan digunakan sebagai contoh penjelasan masing-

    masing tipe dari outer join.

    Tabel Department

    Tabel Project

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    25/70

    25

    Gambar 4.7 : Tabel department dan project yang akan digunakan sebagai contoh

    4.3.1 Left outer join

    Pada left outer join, hasil akhir merupakan perpaduan(union) dari hasil akhir

    equi-join, termasuk beberapa baris dari tabel KIRI yang tidak cocok. Berikut

    merupakan contoh query serta pengembaliannya dari left outer join :

    SELECT *

    FROM DEPARTMENT D

    LEFT OUTER JOIN PROJECT P

    ON P.DEPTNO = D.DEPTNO

    Gambar 4.8 : pengembalian dari query left outer join

    4.3.2 Right outer join

    Pada right outer join, hasil akhir merupakan perpaduan(union) dari hasil akhir

    equi-join, termasuk beberapa baris dari tabel KANAN yang tidak cocok. Berikut

    merupakan contoh query serta pengembaliannya dari right outer join :

    SELECT *

    FROM DEPARTMENT D

    RIGHT OUTER JOIN PROJECT P

    ON P.DEPTNO = D.DEPTNO

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    26/70

    26

    Gambar 4.9 : pengembalian dari query right outer join

    4.3.3

    Full outer join

    Pada full outer join, hasil akhir merupakan perpaduan(union) dari hasil akhir

    equi-join, termasuk beberapa baris dari tabel KANAN dan KIRI yang tidak

    cocok. Berikut merupakan contoh query serta pengembaliannya dari full outer

    join :

    SELECT *

    FROM DEPARTMENT D

    FULL OUTER JOIN PROJECT P

    ON P.DEPTNO = D.DEPTNO

    Gambar 4.10 : pengembalian dari query full outer join

    Jika kita ingin menampilkan daftar dari siswa yang telah didaftarkan dan yang

    belum didaftarkan pada beberapa subjek, maka kemungkinan permasalahan

    diatas dapat diselesaikan dengan left outer join.

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    27/70

    27

    4.4 SELF JOIN

    Seringkali sebuah table perlu dijoin-kan dengan table itu sendiri. Contoh:

    Tampilkan nama department dari B01 dan nama dari department yang mendapat laporan

    dari B01.

    Gambar 4.11: Ilustrasi tabel yang akan ditampilkan

    Gambar 4.12 : mendapatkan record data dengan self join

    4.5 LATIHAN1.Tampilkan informasi ACTION (dengan ACTNO lebih besar dari 100) informasi dan

    desainer nama setiap tindakan proyek (dari tabel PROJACT). Tampilkan informasi

    ini diurutkan berdasar nama desainernya.

    2.Tampilkan nama proyek yang dikerjakan oleh manajer di setiap department.

    Tampilkan pula nama belakang manajer dan nama department tempat manajer itu

    bekerja.

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    28/70

    28

    BAB V - RELATIONAL OPERATOR

    TUJUAN BELAJAR :

    Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:

    Memahami bermacam tipe fungsi yang tersedia dalam SQL

    Menggunakan fungsi Karakter, Bilangan danTanggal dalam statement SELECT

    Mengelompokkan data dengan Klausa GROUP BY

    Meng-include atau meng-exclude suatu baris data dengan klausa HAVING

    Operator relasional adalah tes dasar dan operasi yang dapat dilakukan pada data. Operator ini

    meliputi:

    - Operasi Matematika seperti +, -, * dan /

    - Logical operator : AND, OR dan NOT

    -

    Fungsi Baris Tunggal : CONCAT, SUBSTR, LENGTH, LOWER, UPPER,

    INITCAP, dsb

    - Operator perbandingan : =, , >=,

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    29/70

    29

    5.1.1 Operator Presedence

    Perkalian dan pembagian memiliki prioritas (precedence) lebih tinggi daripada

    penambahan dan pengurangan.

    5.1.2 Penggunaan tanda kurung

    Penggunaan tanda kurung memiliki prioritas paling tinggi disbanding presedensi

    operator yang lain.

    5.2 FUNGSI BARIS TUNGGALFungsi baris tunggal beroperasi hanya pada baris tunggal dan mengembalikan satu nilai

    per baris.

    5.2.1 Fungsi Karakter

    Sintak penulisan :

    function_name(column|expression, [arg1, arg2, ])

    SELECTLASTNAME, SALARY, 2 * SALARY + 300

    FROM DB2ADMIN.EMPLOYEE;

    SELECTLASTNAME, SALARY, 2 * (SALARY + 300)

    FROM DB2ADMIN.EMPLOYEE;

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    30/70

    30

    Fungsi karakter menerima karakter sebagai input dan dapat mengembalikan nilai

    karakter atau bilangan. Fungsi karakter terbagi menjadi :

    Fungsi konversi, yaitu LOWER, UPPER, INITCAP

    Fungsi manipulasi : CONCAT, SUBSTR, LENGTH, INSTR, LPAD, RPAD,

    TRIM,REPLACE.

    Penggunaan Fungsi Konversi & Manipulasi

    SELECT EMPNO,LASTNAME, WORKDEPT

    FROM EMPLOYEE

    WHERE LOWER(LASTNAME) = 'adamson'

    SELECT EMPNO,CONCAT(FIRSTNME,LASTNAME) NAMA, JOB,

    LENGTH(LASTNAME)

    FROM EMPLOYEE

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    31/70

    31

    5.2.2 Fungsi bilangan

    Ada 3 (tiga) fungsi bilangan :

    ROUND : Pembulatan decimal ke angka terdekat.

    TRUNC : Memotong nilai decimal ke posisi yang dikehendaki

    MOD : Mendapatkan sisa pembagian

    SELECT ROUND(45.981,2), ROUND(45.981,0),

    ROUND(45.981,-1)

    FROMSYSIBM.DUAL

    SELECT TRUNC(45.981,2), TRUNC(45.981,0),

    TRUNC(45.981,-2)

    FROMSYSIBM.DUAL

    SELECT LASTNAME, SALARY, MOD(SALARY,5000)

    FROM EMPLOYEE

    WHERE JOB = 'MANAGER'

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    32/70

    32

    5.2.3 Fungsi Tanggal

    5.2.4

    Coalesce

    Fungsi COALESCE digunakan untuk menggantikan nilai NULL pada sebuah

    pada result set.

    SELECT LASTNAME,(SYSDATE-HIREDATE)/7 AS WEEKS

    FROM EMPLOYEE

    WHERE WORKDEPT= 'A00'

    SELECTDEPTNAME, COALESCE(MGRNO, 'UNKNOWN') ASMANAGER

    FROMDEPARTMENT

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    33/70

    33

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    34/70

    34

    BAB VICOLUMN FUNCTION AND GROUPING

    TUJUAN BELAJAR :

    Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:

    Menyebutkan fungsi kolom yang umum dalam DB2

    Menggunakan fungsi kolom untuk menampilkan data

    6.1 FUNGSI GROUPFungsi Group melakukan operasi pada dua atau lebih baris data dan memberikan satu

    hasil per group.

    Tabel EMPLOYEE

    Tipe-tipe fungsi group yang bisa digunakan : AVG, COUNT, MAX, MIN,

    STDDEV,SUM, VARIANCE.

    Sintak (cara penulisan) dari penggunaan Fungsi Group :

    SELECT [DISTINCT] {*, column [alias] group_function(column) }

    FROM table;

    [WHERE condition(s) ]

    [GROUP BY column]

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    35/70

    35

    6.1.1 Penggunaan Fungsi Count

    Fungsi COUNT digunakan untuk mencari jumlah baris dalam table.

    6.1.2 Penggunaan fungsi AVG dan SUM

    Penggunaan Fungsi MIN dan MAX

    6.1.3 Mengelompokkan Data dengan Fungsi GROUP BY

    Hasil dari query dapat dikelompokkan berdasarkan suatu criteria tertentu dengan

    menggunakan klausa GROUP BY. Misal rata-rata gaji dikelompokkan

    berdasarkan nomor department.

    SELECT COUNT (*) FROM EMPLOYEE;

    SELECT AVG(SALARY), SUM(SALARY)

    FROM EMPLOYEE

    WHERE JOB LIKE '%NAG%'

    SELECT MIN(SALARY)AS GAJI_MIN, MAX(SALARY)AS GAJI_MAX

    FROM EMPLOYEE

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    36/70

    36

    Contoh penggunaan dengan klausa group by

    6.1.4 Klausa HAVING

    Klausa WHERE tidak boleh digunakan pada query yang sudah dikelompokkan

    dengan menggunakan Fungsi Group dengan klausa GROUP BY. Contoh

    kesalahannya seperti ini :

    SELECT WORKDEPT,AVG(SALARY)

    FROM EMPLOYEE

    GROUP BY WORKDEPT

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    37/70

    37

    HAVING adalah operator khusus, yang dapat digunakan hanya dengan klausa

    GROUP BY untuk menyaring baris yang diinginkan dalam data dikelompokkan.

    Contoh penggunaan klausa HAVING :

    SELECT [DISTINCT] {*, column [alias] group_function(column) }

    FROM table;

    [WHERE condition(s) ]

    [GROUP BY column]

    [HAVING group_condition]

    [ORDER BY column];

    SELECT AVG(SALARY),JOB

    FROM EMPLOYEE

    GROUP BY JOB

    HAVING AVG(SALARY)>20000

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    38/70

    38

    Penggunaan HAVING dengan WHERE :

    6.2 LATIHAN

    1.Hitung jumlah pekerja pria pada setiap job yang ada.

    2.Hitung total gaji yang di dapat dari setiap department yang lebih dari 200000.

    Tampilkan juga nama departmennya dan hasil query tidak boleh NULL.

    3. Tampilkan total project yang dikerjakan oleh setiap department yang ada dan

    tampilkan nama departmentnya.

    SELECT JOB,SUM(SALARY)

    FROM EMPLOYEE

    WHEREJOB NOT LIKE '%MAN%'

    GROUP BY JOB

    HAVING SUM(SALARY) > 13000

    ORDER BY SUM(SALARY)

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    39/70

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    40/70

    40

    Gambar 7.1Output Contoh Operasi Union

    7.1.2 Union All

    Serupa dengan union, operator union all juga menggabungkan dua data set,

    namun union all akan menampilkan seluruh data set yang digabung walaupun hal itu

    menyebabkan duplikasi data.

    Contoh :

    Dari sintaks tersebut akan ditampilkan seluruh pegawai yang memiliki nama

    depan berawalan C ataupun pegawai yang memiliki nama belakang berawalan H tanpa

    memperhatikan duplikasi data.

    Gambar 7.2 Output Contoh Operasi Union All dimana Terdapat Data yang

    Terduplikasi

    7.2 INTERSECTION

    7.2.1 Intersect

    SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE WHERE FIRSTNME

    LIKE 'C%'

    UNION ALL

    SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE WHERE LASTNAME

    LIKE 'H%';

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    41/70

    41

    Intersection (operatornya adalah intersect) merupakan operasi yang menghasilkan

    result set berupa data-data yang sama dari beberapa data set yang diinterseksi.

    Contoh :

    Dari sintaks tersebut akan ditampilkan pegawai dimana pekerjaannya adalah

    analyst dan edlevel adalah 18.

    Gambar 7.3Output Contoh Operasi Intersection

    SELECT LASTNAME, EDLEVEL

    FROM EMPLOYEE

    WHERE JOB = 'ANALYST'

    INTERSECT

    SELECT LASTNAME, EDLEVEL

    FROM EMPLOYEE

    WHERE EDLEVEL = 18;

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    42/70

    42

    7.2.2 Intersect All

    Serupa dengan intersect, operator intersect all juga menampilkan data-data yang

    sama, namun intersect all akan menampilkan seluruh data walaupun hal itu

    menyebabkan duplikasi data.

    Contoh :

    7.3 DIFFERENCE

    7.3.1 Except

    Difference (operatornya adalah except) merupakan operasi yang menghasilkan

    nilai kembalian berupa set yang merupakan data-data dari set pertama dikurangi data-

    data dari set kedua.

    Contoh :

    SELECT LASTNAME, EDLEVEL

    FROM EMPLOYEE

    WHERE JOB = 'ANALYST'

    INTERSECT ALL

    SELECT LASTNAME, EDLEVEL

    FROM EMPLOYEE

    SELECT * FROM EMPLOYEE

    WHERE JOB = 'ANALYST'

    EXCEPT

    SELECT * FROM EMPLOYEE

    WHERE EDLEVEL = 18;

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    43/70

    43

    Dari sintaks tersebut akan ditampilkan pegawai yang pekerjaannya adalah analyst,

    namun edlevel bukan 18.

    Gambar 7.4Output Contoh Operasi Difference

    7.3.2 Except All

    Serupa dengan except, operasi except all juga menghasilkan nilai kembalian

    berupa set yang merupakan data-data dari set pertama dikurangi data-data dari set kedua,

    namun except all akan menampilkan seluruh data walaupun hal itu menyebabkan

    duplikasi data.

    Contoh :

    SELECT * FROM EMPLOYEE

    WHERE JOB = 'DESIGNER'

    EXCEPT ALL

    SELECT * FROM EMPLOYEE

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    44/70

    44

    Gambar 7.5Output Contoh Operasi Difference Except All

    7.4 OPERASI GABUNGAN DARI UNION, INTERSECTION, DAN DIFFERENCEUntuk menyelesaikan kasus tertentu, kita dapat menggabungkan operasi union,

    intersect, maupun difference.

    Contoh :

    Gambar 7.6Output Contoh Operasi Gabungan dari Union, Intersection, dan Difference

    7.5 LATIHAN

    1.

    Dapatkan data nomor departemen, nama departemen, nomor proyek, nama proyek,

    dan tanggal dimulainya proyek, dimana deptno adalah D01 atau projno MA2111!

    2. Dapatkan departemen yang memiliki jumlah pegawai lebih dari 3 dan departemen

    yang berawalan A!

    3. Dapatkan data nama departemen, nama proyek dan nomor act yang departemennya

    berawalan A namun actno bukan 60!

    ((SELECT * FROM EMPLOYEE WHERE JOB = 'MANAGER'

    UNION

    SELECT * FROM EMPLOYEE WHERE SALARY > 70000)

    INTERSECT

    SELECT * FROM EMPLOYEE WHERE BONUS > 700)

    EXCEPT

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    45/70

    45

    4. Dapatkan nomor pegawai, nama pegawai (firstnme dan lastname), nomor departemen,

    nama departemen dan gaji yang memiliki job berawalan C dan nomor departemen

    adalah E21 namun gaji pegawai > 40000!

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    46/70

    46

    BAB VIII - SUB QUERY

    TUJUAN BELAJAR :

    Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:

    Menggambarkan tipe persoalan yang dapat dipecahkan oleh sub query

    Mendefinisikan sub query

    Memahami tipe-tipe dari subquery

    Menulis subquery baris tunggal dan baris berganda

    8.1 MENGGUNAKAN SUBQUERY UNTUK MENYELESAIKAN MASALAH

    Pengertian subquery akan dijelaskan melalui ilustrasi berikut ini :

    Misal kita ingin membuat suatu query untuk mencari gaji pegawai yang lebih besar dari

    gaji yang dimiliki oleh pegawai bernama ABEL.

    Untuk memecahkan persoalan ini, kita membutuhkan dua query, satu query untuk

    mencari gaji yang dimiliki oleh ABEL dan query lain untuk mencari pegawai yang

    memiliki gaji lebih besar daripada gaji ABEL.

    Inner query atau subquery akan menghasilkan suatu nilai yang nantinya dipakai oleh

    outer query atau main query.

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    47/70

    47

    8.2 SINTAK SUBQUERY

    Sintak (cara penulisan) sub query :

    8.3 PENEMPATAN SUBQUERY

    Berikut Beberapa contoh penempatan Sub Query dalam Sebuah Query :

    Sub Query di SELECT

    Mendapatkan Jumlah keseluruhan dari pegawai LakiLaki dan Perempuan

    Hasil Resultnya :

    Sub Query di FROM

    Mendapatkan Jumlah keseluruhan dari pegawai Laki Laki dan

    Perempuan(dengan subquery di FROM)

    SELECTselect_list

    FROM table

    WHERE expr operator

    select(selectcount(sex) as

    jumlah_emp fromemployee where

    sex='F')p,(selectcount(sex) as

    jumlah_emp fromemployee where

    sex='M')lfromsysibm.dual

    selectp.jumlah_emp asjumlah_perempuan, l.jumlah_emp as

    jumlah_laki_laki

    from(selectcount(sex) asjumlah_emp fromemployee where

    sex='F')p,

    (selectcount(sex) asjumlah_emp fromemployee wheresex='M')l

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    48/70

    48

    Hasil Resultnya :

    Sub Query di WHERE

    Mendapatkan data nomer pegawai, lastname,dan salary dari pegawai yang

    memiliki salary terendah

    Hasil Resultnya :

    8.4 PENGGUNAAN SUBQUERY

    Penggunaan Sub Query untuk menyelesaikan masalah seperti yang sudah dijelaskan

    sebelumnya :

    selectempno, firstnme EMPNO FIRSTNME

    selectempno,lastname,salary

    fromemployee

    wheresalary = (selectmin(salary) from

    employee)

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    49/70

    49

    fromemployee

    wheresalary >

    (selectsalary

    fromemployee

    wherefirstnme = upper('eva'));

    ------ ---------

    000010 CHRISTINE

    000030 SALLY

    8.5 PETUNJUK PENGGUNAAN SUBQUERY

    Berikut petunjuk dari penggunaan Sub Query :

    Letakkan subqueri di dalam tanda kurung

    Tempatkan subqueri pada sisi kanan dari kondisi pembandingan

    Klausa ORDER BY dalam subquery tidak diperlukan jika yang dibentuk adalah Top-

    N analysis.

    Gunakan operator baris tunggal dengan subquery baris tunggal dan operator baris

    ganda dengan sub query baris ganda.

    8.6 TIPE-TIPE SUBQUERY

    Tipe-tipe dari subquery :

    Single row, sub query baris tunggal

    Multiple-row, sub query baris ganda

    Multiple-column, sub query kolom ganda

    8.7 SUBQUERY BARIS TUNGGAL

    Single row subquery memberikan hasil hanya satu baris pada bagian subquery. Untuk

    single row subquery ini yang digunakan adalah operator pembandingan :

    = , > , >= , < ,

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    50/70

    50

    8.8 MENJALANKAN SUBQUERY BARIS TUNGGALBerikut ini contoh penggunaan Subquery baris tunggal :

    selectfirstnme, workdept, salary

    fromemployee

    whereworkdept =

    (selectworkdept

    fromemployee

    whereempno = 000010)

    andsalary

    (selectmin(salary)

    fromemployee

    whereworkdept = 'A00');

    WORKDEPT GAJI_MINIMAL

    -------- ------------

    B01 94250.00

    C01 68420.00

    D11 44680.00

    E01 80175.00

    8.10.1 APA YANG SALAH DENGAN STATEMENT INI ?

    Kesalahan dalam subquery yang mungkin terjadi adalah operator baris tunggal (=)

    digunakan

    pada subquery yang menghasilkan lebih dari satu baris, seperti pada contoh berikut :

    Apa yang salah dengan statement ini ?

    selectempno, lastname

    fromemployee

    wheresalary =

    (selectmin(salary)

    fromemployee

    groupbyworkdept);

    The result of a scalar fullselect, SELECT INTO

    statement, or VALUES INTO statement is more than one

    row.. SQLCODE=-811, SQLSTATE=21000,

    DRIVER=4.12.79

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    52/70

    52

    Statement tersebut salah, karena : operator baris tunggal (single-row operator) digunakan

    bersama dengan subquery baris ganda (multiple-row subquery).

    8.10.2 APAKAH STATEMENT INI MENGHASILKAN SUATU BARIS DATA ?

    selectlastname, workdept

    fromemployee

    whereworkdept =

    (selectworkdept

    fromemployee

    wherelastname = upper('harya'));

    LASTNAME WORKDEPT

    -------- --------

    8.11 SUBQUERY BARIS GANDA

    Multiple Row Subquery adalah subquery yang menghasilkan lebih dari satu baris. Untuk

    multiple row subquery ini yang digunakan adalah operator pembandingan : IN, ANY

    atau ALL.

    Ciri-ciri dari Subquery baris ganda :

    Mengembalikan lebih dari satu baris

    Digunakan dengan menggunakan Operator Baris-Ganda

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    53/70

    53

    8.11.1

    PENGGUNAAN OPERATOR ANY DALAM SUBQUERY BARIS GANDAOperator ANY identik dengan operator SOME, yang membandingkan suatu nilai dengan

    tiap nilai yang ada dalam subquery.

    Operator =ANY ekuivalen dengan IN.

    Operator ANY ekuivalen dengan MINIMUM

    selectempno, lastname, workdept, salary

    fromemployee

    wheresalary < any

    (selectsalary

    fromemployee

    whereworkdept = 'A00')

    andworkdept 'A00';

    EMPNO LASTNAME WORKDEPT

    SALARY

    ------ ---------- -------- --------

    000020 THOMPSON B01 94250.00

    000030 KWAN C01 98250.00

    000130 QUINTANA C01 73800.00

    000140 NICHOLLS C01 68420.00

    200140 NATZ C01 68420.00

    000060 STERN D11 72250.00

    .....

    Operator ALL membandingkan suatu nilai dengan semua nilai yang ada dalam subquery.

    Operator >ALL ekuivalen dengan MAKSIMUM.

    Operator

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    54/70

    54

    fromemployee

    wheresalary < all

    (selectsalary

    fromemployee

    whereworkdept = 'A00')

    andworkdept 'A00';

    ------ ---------- -------- --------

    000270 PEREZ D21 37380.00

    200240 MONTEVERDE D21 37760.00

    000280 SCHNEIDER E11 36250.00

    000290 PARKER E11 35340.00

    000300 SMITH E11 37750.00

    000310 SETRIGHT E11 35900.00

    200310 SPRINGER E11 35900.00

    200330 WONG E21 35370.00

    200340 ALONZO E21 31840.00

    8.12 LATIHAN

    1.

    Tampilkan Nama Departement, beserta jumlah pegawai laki laki dan jumlah

    pegawai perempuan tiap masingmasing department.

    2. Tampilkan semua pegawai yang memiliki gaji diatas rata rata gaji keseluruhan

    pegawai.

    3. Tampilkan nama department, nama pegawai, no pegawai, gaji dari pegawai yang

    memiliki gaji lebih besar dari gaji pegawai dengan no_pegawai 000270

    BAB IX - DATA CONCURRENCY AND LOCKING

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    55/70

    55

    BAB IX - DATA CONCURRENCY AND LOCKING

    TUJUAN BELAJAR :

    Memahami perbedaan semantik antara Cursor Stability dan Currently Committed

    Memahami perbedaan antara Repeatable Read, Read Stability, Cursor Stability, dan

    Uncommitted Read

    Mampu menentukan isolation level untuk database pada saat run time menggunakan CLP

    Sebelum membahas mengenai Data Concurrency and Locking, ada beberapa hal yang harus

    dikenali, seperti transaksi.

    Sebuah transaksi diawali dengan statement SQL kemudian diakhiri dengan COMMIT atau

    ROLLBACK dimana COMMIT berarti membuat perubahan secara permanen terhadap

    database, sedangkan ROLLBACK mengembalikan perubahan. Kedua statement tersebut akan

    melepaskan lock pada row.

    9.1 Concurrency and LockingYang dimaksud dengan Concurrency adalah keadaan dimana lebih dari satu user mengakses

    resource pada saat yang bersamaan. Sedangkan Locking merupakan mekanisme untuk

    menjamin integritas dan konsistensi data. Lock biasanya diperoleh secara otomatis

    berdasarkan tingkat isolasi yang dapat ditetapkan.

    9.2 Isolation Level

    Isolation level dapat dianggap sebagai aturan yang mengatur bagaimana DB2 bekerja dengan

    lock itu sendiri. DB2 menyediakan level proteksi yang berbeda untuk mengisolasi data antara

    lain :

    - Uncommitterd Read (UR)

    - Cursor Stability (CS)

    o Currently committed (CC)

    - Read Stability (RS)

    - Repeatable Read (RR)

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    56/70

    56

    Perbandingan Isolation Level

    9.3 Lock Wait

    - Secara default, aplikasi menunggu tanpa batas waktu untuk memperoleh lock yang

    dibutuhkan.

    -

    LOCKTIMEOUT (db cfg)

    o Menentukan jumlah detik untuk menunggu lock

    o Nilai defaultnya adalah -1 atau menunggu tanpa batas waktu (infinite wait)

    9.4 Deadlocks

    - Terjadi ketika dua atau lebih aplikasi menunggu resource tanpa batas waktu

    -

    Setiap aplikasi menahan resource yang dibutuhkan oleh aplikasi lain

    - Menunggu yang tidak pernah terselesaikan

    Pada praktikum kali ini menggunakan database sample. Jika database sample sudah ada, anda

    dapat menggunakan query dibawah ini untuk membuat ulang.

    db2 force applications all

    db2 drop db sample

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    57/70

    57

    Selanjutnya connect ke database sample

    Untuk mempermudah mengetahui perbedaan isolation level, buatlah tabel sederhana dengan

    satu kolom.

    9.5 Cursor Stability with Currently Committed (CS with CC)

    Untuk mengetahui perbedaan penggunaan CC dengan tanpa CC, kita buat keadaan tanpa CC

    terlebih dahulu dengan cara mematikan CC. Dengan perintah dibawah ini, kita telah

    mengetahui bahwa keadan CC adalah ON.

    Matikan CC dengan perintah dibawah ini

    Selanjutnya pada Terminal A, matikan auto-commit (secara default ON). Ketika auto-commit

    aktif, CLP secara otomatis melakukan COMMIT setiap selesai mengeksekusi statement SQL,

    sehingga kita harus menonaktifkannya untuk mengatur kapan suatu transaksi akan di

    COMMIT. Perintah db2 +c akan menonaktifkan auto-commit. Kemudian cek kondisi dengan

    perintah list command options

    db2sampl

    db2 connect to SAMPLE

    db2 create table TB1 (COLUMN1 integer)

    db2 insert into TB1 (select 10 from syscat.tables fetch first 9 rows

    db2 +c

    db2 get db cfg for sample

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    58/70

    58

    Connect ke database sample

    Lakukan query select seperti berikut untuk memastikan nilai dari col1. Kemudian update nilai

    dari col1.

    Buka Terminal baru (terminal B) sebagai aplikasi kedua yang mencoba mengakses tabel.

    Kemudian koneksikan ke database sample.

    Lakukan query untuk mengukur wait time.

    Query tersebut tidak mengembalikan result, karena diblok oleh query pada Terminal

    sebelumnya(terminal A).

    Lepaskan lock Pada terminal A dengan cara commit transaksi menggunakan perintah

    Secara otomatis pada terminal B akan mereturn nilai wait time. Block oleh terminal A sudah

    dilepaskan melalui proses COMMIT dan transaksi pada terminal B bisa dilanjutkan.

    list command o tions

    connect to sam le

    select * from tab1

    update tab1 set col1 = 25

    Time db2 select * from tab1

    commit

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    59/70

    59

    9.6 With Currently Committed

    Pada terminal A, aktifkan currently committed kemudian disconnect database agar nilai baru

    dapat berpengaruh.

    Reset juga koneksi pada Terminal B

    Pada terminal A, lakukan query update.

    Pada Terminal B, lakukan koneksi ke database dan coba untuk mengembalikan nilai dari tab1

    update db cfg for sample using cur commit on

    connect reset

    db2 connect reset

    connect to sample

    update tab1 set col1 = 30

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    60/70

    60

    Query berhasil mengembalikan result, karena tidak ada yang memblok akses terhadap data.

    Namun nilai yang dikembalikan bukan dari nilai yang terbaru, karena pada terminal A belum

    dilakukan query COMMIT.

    Pada Terminal A, lakukan COMMIT terhadap proses update dengan perintah berikut.

    Pada Terminal B, lakukan query berikut untuk melihat hasilnya.

    connect to

    Time db2 select * from tab1

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    61/70

    61

    Nilai yang dikembalikan adalah nilai terbaru, karena sudah dilakukan COMMIT pada

    terminal A. Akhiri koneksi pada Terminal A dan B

    9.7 Repeatable ReadKita harus mengganti isolation pada CLP di Terminal A menjadi Repeatable Read sebelum

    terkoneksi ke database.

    Selanjutnya lakukan query untuk mengamati nilai dari col1

    Pada Terminal B, lakukan proses write dengan cara insert data ke tab1 yang sedang dilock

    oleh terminal A

    chan e isolation to RR

    Select * from tab1 where col1 = 30

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    62/70

    62

    Dapat kita lihat bahwa operasi tersebut menunggu dan tidak menghasilkan result, karena

    diblok oleh query yang terdapat pada terminal A. Untuk melepaskan lock maka pada terminal

    A, harus dilakukan proses commit terlebih dahulu. Sehingga secara otomatis proses penulisan

    data pada terminal B sukses. Akhiri koneksi pada terminal B dan terminal A.

    9.8 Skenario Phantom Read : Read Stability

    Kita harus merubah isolation level pada Terminal A menjadi Read Stability sebelum

    terkoneksi ke database, menggunakan perintah dibawah ini.

    Lakukan pengamatan terhadap nilai dari col1 saat ini.

    Pada terminal B, connect ke database, kemudian lakukan proses insert data.

    Dapat kita lihat bahwa query tidak menunggu terminal A untuk commit dan proses insert data

    berhasil.

    Selanjutnya lakukan query dibawah ini pada Terminal A untuk mengetahui isi dari tab1.

    Query tersebut mereturn 11 rows dimana sebelumnya hanya 10. Satu row bertambah

    meskipun kita mengeksekusi query SQL yang sama dalam transaksi yang sama. Hal ini

    karena Read Stability tidak menghalangi kemunculan phantom rows.

    change isolation to RS

    connect to sample

    Select * from tab1 where col1 = 30

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    63/70

    63

    Pada Terminal A, commit operasi update, kemudian akhiri koneksi pada Terminal A dan B

    9.9 Uncommited Read : Cursor StabilityAplikasi A akan mengeksekusi query yang melakukan proses update dengan RR. Aplikasi B

    akan mencoba membaca baris yang sama dengan menggunakan CS dan UR.

    Pada terminal A, ganti isolation level menjadi Repeatable Read, kemudian koneksi ke

    database sample. Lakukan update pada col1.

    Pada terminal B, lakukan koneksi ke database sample, kemudian lakukan pembacaan data

    dengan query select seperti dibawah ini

    Query select tersebut akan menunggu Terminal A untuk commit sebelum membaca data.

    Untuk melepaskan lock, maka pada Terminal A harus melakukan proses Commit seperti

    dibawah ini

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    64/70

    64

    Pada terminal B kita bisa lihat bahwa query sudah dapat mengembalikan result. Block oleh

    Terminal A sudah dilepaskan dan transaksi pada Terminal B sudah bisa membaca data yang

    tercommit.

    Akhiri koneksi dengan perintah db2 connect reset pada Terminal B

    9.10 Skenario Uncommited Read : Uncommited Read

    Eksekusi query berikut pada Terminal A

    Kemudian eksekusi query pembaca pada Terminal B

    Dapat dilihat bahwa query select dibawah isolation level Uncommitted Read tidak menunggu

    Terminal A untuk COMMIT sebelum membaca data. Bahkan nilai yang dikembalikan

    berasal dari transaksi yang belum tercommit pada Terminal A.

    db2 chan e isolation to UR

    connect to sam le

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    65/70

    65

    Jika transaksi pada Terminal A mengeksekusi rollback, data yang terdapat pada Terminal B

    tidak menggambarkan data yang sebenarnya pada tab1. Fenomena ini dikenal sebagai dirty

    read. Pada terminal A, lakukan commit, kemudian akhiri koneksi pada terminal A dan B.

    BAB X - BACKUP AND RECOVERY

    TUJUAN BELAJAR :

    Mendeskripsikan prinsip utama dan metode untuk backup dan recovery

    Mendeskripsikan bagaimana pembagian data logging, termasuk circular logging dan

    archival logging

    Melakukan backup dan restore table space

    Mendiskusikan konfigurasi parameter dan recovery history file dan mengunakannya

    untuk menangani berbagai skenario backup dan recovery

    Backup adalah perkerjaan utama untuk system administrator, tanpa itu kita tidak dapat

    menjamin bahwa data kita akan tetap tersedia nantinya. System administrator bertanggung

    jawab untuk :

    Menetapkan aturan backup.

    Memaksa aturan dan memastikan bahwa aturan telah dilaksanakan dengan benar.

    Menguji recovery menggunakan hasil dari backup.

    10.1 Gambaran Backup dan Recovery

    Pada t1, dilakukan operasi backup database

    Pada t2, terjadi masalah yang merusak database

    Pada t3, semua data yang ter-commit ditemukan kembali

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    66/70

    66

    10.2 Database Logging

    Tipe Log :

    1. Tipe log berdasarkan pembagian file log

    Primary Log merupakan PRE-ALLOCATED

    Secondary Log merupakan ALLOCATED sesuai kebutuhan

    Untuk operasi keseharian, pastikan bahwa kita tetap menggunakan pembagian

    primary log

    2.

    Tipe log berdasarkan informasi yang tersimpan di dalam log

    Active logs:

    Informasi tidak dikeluarkan (tidak pada tablespace disk)

    Archive logs

    Semua Informasi dikeluarkan

    Tipe Logging

    Circular logging

    o Tipe default dari logging

    o Log ditulis kembali ketika isinya telah dikeluarkan, dan tidak perlu untuk

    melakukan crash recovery

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    67/70

    67

    jika transaksi panjang menggunakan primary dan secondary log, terjadi

    kondisi log yang penuh dan pesan error SQL0964C dikembalikan

    tidak dapat melakukan roll-forward recovery

    Archival logging

    o Diaktifkan dengan LOGARCHMETH1 parameter db cfg

    o Segera setelah enable, kita diminta untuk melakukan offline backup

    o File log tidak di delete - disimpan online atau offline

    o Memungkinkan untuk roll-forward recovery dan online backup

    10.3 Backup

    Mode Backup

    Offline Backup

    o Tidak mengizinkan aplikasi atau proses lain untuk megakses database

    o Hanya bisa dilakukan jika menggunakan circular logging

    Online Backup

    o Mengizinkan aplikasi atau proses lain untuk mengakses database ketika backup

    terjadi

    Sintaks dan Contoh

    BACKUP DATABASE

    [ONLINE] [TO ]

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    68/70

    68

    Contoh Offline Backup

    backup database sample to C:\backups

    Contoh Online Backup

    backup database sample online to C:\backups

    Ketentuan nama file

    Tipe Backup:

    0 = Full Backup

    2 = Tablespace Backup

    10.4 Incremental Backup

    Cocok untuk database yang besar

    10.5 Database Recovery

    Tipe Database Recovery

    Crash recovery

    o

    Menjaga database dari kesalahan yang tidak konsisten

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    69/70

    69

    Version Recovery

    o Menyimpan kembali database dari sebuah backup

    o database akan dikembalikan ke keadaan saat tersimpan dalam backup

    o

    beberapa perubahan yang dibuat setelah backup akan hilang

    Rollforward recovery

    o Membutuhkan archival logging untuk dapat digunakan

    o dilakukan melalui log untuk menggunakan kembali perubahan di atas backup

    o memungkinkan untuk roll forward ke akhir log atau pada waktu tertentu

    o Minimal data loss

    Sintaks dan Contoh

    RESTORE DATABASE

    [ONLINE][FROM ]

    [TAKEN AT ]

    [WITHOUT PROMPTING]

    Contoh Offline Restore

    SAMPLE.0.DB2INST.NODE0000.CATN0000.20110718131210.001

    restore database sample

    from C:\backups

    taken at 20110718131210

    10.6 Tablespace backup dan restore

    Memperbolehkan user untuk backu sebagian database

    hanya dapat digunakan jika archival logging enable

    banyak table space dapat ditetapkan

    table space dapat di restore dari tiap database backup atau table space backup

    Menggunakan kata kunci TABLESPACE untuk menetapkan table space

    Contoh : Backup online tablespace 'tblsp1'

    backup database sample

  • 7/25/2019 Modul Praktikum Sbd Ptiik 2013

    70/70

    tablespace(tblsp1)online to C:\backups

    restore database sample

    tablespace(tblsp1)online from C:\backups

    without prompting

    10.7 Latihan

    1. Lakukan Backup offline dan online pada database sample!

    2. Lakukan perubahan yang ter-commit pada database sample!

    3.

    Drop database sample!

    4. Kembalikan database sample sesuai keadaan semula ketika di backup!