132 modul pbd sql1

27

Upload: muhaimin-hasanudin

Post on 14-Jul-2016

25 views

Category:

Documents


1 download

DESCRIPTION

ok

TRANSCRIPT

Page 1: 132 Modul Pbd Sql1
Page 2: 132 Modul Pbd Sql1

BABI

SQL (sekuel)

Sub-Materi: Select

Join Subquery

DML

Page 3: 132 Modul Pbd Sql1
Page 4: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.1

BabI

SQL (sekuel)

Sub-Materi: Select

Join Subquery

DML

Perkenalan

Matakuliah Praktikum Pemrograman Basis Data (PBD) merupakan MK praktek dari matakuliah PBD.Matakuliah ini mengintegrasikan pemrograman di sisi database server dan pemrograman di sisi client. Karena itulah matakuliah ini mempunyai 2 matakuliah prasyarat, yaitu (1) matakuliah Sistem Basis Data (SBD) dan (2) matakuliah Bahasa Pemrograman (BPro).

Dalam matakuliah SBD, materi yang dibahas meliputi desain dan pembuatan database mengikuti normalisasi, penyimpanan data, dan data retrieval (temu kembali data). Penyimpanan data dalam database menggunakan sintak-sintak data manipulation language (DML), sedangkan untuk data retrieval menggunakan perintah SELECT. Keduanya dalam dunia programming disebut sebagai CRUD (Create-Read-Update-Delete). Semua materi tersebut merupakan bagian dari pembelajaran dasar structured query language (SQL – baca sekuel), yaitu bahasa native bagi database. Native ibarat bahasa inggris bagi orang Amerika, dan bahasa indonesia bagi orang Indonesia.

Pemrograman disisi database server lebih umum disebut dengan SQL Programming, yaitu

Page 5: 132 Modul Pbd Sql1

SQL (sekuel)

pg.2 Praktikum Pemrograman Basis Data

bahasa pemrograman yang memakai SQL sebagai dasar pemrogramannya. Karena menggunakan SQL, maka dari itu, pembahasan pada pertemuan 1 ini difokuskan pada penyegaran kembali (refresh) materi-materi SQL.

Sedangkan dalam matakuliah BPro, materi yang dibahas meliputi variable, control-flow statement, serta procedureandfunction. SQL Programming, sesuai dengan namanya, juga menggunakan semua materi dalam matakuliah BPro. Jadi pembelajaran pada matakuliah Praktikum PBD seutuhnya merupakan pemakaian kembali dan kelanjutan dari matakuliah SBD dan BPro.

Selain SQL Programming, juga ada pemrograman di sisi client. Fokus utamanya adalah bagaimana melakukan komunikasi dengan database server serta menerapkan SQL dan SQL Programming dalam aplikasi client.

SQL Server

Database Management System (DBMS) yang dipakai dalam matakuliah Praktikum PBD adalah SQL Server 2005 Express Edition. Selain ringan dan bebas dipakai,

versi ini juga memiliki beberapa fitur penting seperti keamanan. Namun SQL Server Management Studio, sebuah kakas bantuuntuk mengelola lingkungan SQL Server, tidak ada dalam paket instalasi SQL Server 2005 Express Edition.Tool ini harus didownload sendiri di situs resminya. Di laboratorium komputer, telah di-install SQL Server 2005 Express Edition beserta Management Studio-nya.

Langkah pertama yang dilakukan adalah membuat database yang akan dipakai selama 8x minggu praktikum. Untuk script pembuatan database dapat diunduh di http://192.168.100.3/latihan/132/BDS/create table.sql. Setelah diunduh, ikuti langkah-langkah berikut:

1. Buka SQL Server Management Studio Express Edition (SSMSEE) melalui Start Menu

Page 6: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.3

2. Login:

Isi “Server name:” dengan “.\SQLEXPRESS” – pilih mode “Windows Authentication” – klik tombol Connect.

3. Menu File – Open – File atau Ctrl+O. Buka script yang telah

diunduh. Lalu jalankan script melalui tombol 4. Setelah dieksekusi, ada 3 proses yang terjadi:

- Pembuatan database beserta file-nya - Pembuatan tabel-tabel beserta constraint-nya - Pengisian data-data kedalam tabel

Struktur database

Database dibangun oleh database schema. Dalam database schema inilah obyek-obyek database dibangun. Setiap schema diberikan ke satu atau lebih user (atau login). Dalam matakuliah Praktikum PDB, hanya dibahas obyek-obyek antara lain Table, Function, Stored Procedure dan Trigger. Pertemuan pertama difokuskan pada Table serta bagaimana DML dan SELECT pada Table.

Database schemayang dipakai untuk TUGAS PRAKTIKUM selama 8x pertemuan dapat dilihat padaGambar 1.1, yaitu Putra Jaya. Sedangkan untuk LATIHAN PRAKTIKUM dapat dilihat pada Gambar 1.2, yaitu PBD . Setiap tabel saling berelasi, karena itulah dinamakan Relational Database. Tabel yang dihubungkan dengan tanda kunci merupakan tabel yang ber-PK, atau Parent Table

Page 7: 132 Modul Pbd Sql1

SQL (sekuel)

pg.4 Praktikum Pemrograman Basis Data

(tabel induk). Sedangkan tabel yang tidak ada tanda kunci merupakan tabel yang ber-FK, atau Child Table (tabel anak).

Gambar 1.1Database schema Putra Jaya

Tabel terdiri dari Row (baris) dan Column (kolom). Setiap baris merepresentasikan data, sedangkan kolom merepresentasikan struktur data yang disimpan. Struktur ini dibagi menjadi 2 bagian yaitu tipe-nya dan panjang-nya. Sebagai contoh, kolom “namakonsumen” pada tabel “konsumen” mempunyai tipe “varchar” untuk menyimpan karakter dengan panjang semaksimalnya 100 karakter. Dengan perbedaan tipe dan panjang, otomatis akan berpengaruh pada cara kita dalam melakukan DML dan SELECT.

Page 8: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.5

Gambar 1.2 Database schema PBD

SELECT

SELECT merupakan salah satu pondasi dalam SQL Programming. SELECT digunakan untuk menampilkan data, terlebih untuk mencari informasi dalam kumpulan data.

Sintak

SELECT dibagi kedalam 6 komponen, antara lain:

1. SELECT. Diikuti oleh <select_list>, dapat berupa literal_value atau column_list atau asterisk (*).

2. FROM. Diikuti oleh <table_name> sesuai dengan column_list. Jadi jika ada data yang diambil dari kolom tertentu, harus diketahui kolom tersebut diambil dari tabel mana. Tabel pada FROM dapat diikuti dengan alias untuk mempermudah penulisan khususnya ketika join dan subquery.

3. WHERE. Diikuti oleh kondisi secara umum. 4. GROUP BY. Diikuti oleh <select_list>. Bagian ini muncul

ketika ada fungsi-fungsi agregasi. 5. HAVING. Diikuti oleh kondisi hanya untuk fungsi-fungsi

agregasi. 6. ORDER BY. Diikuti oleh <select_list>.

Page 9: 132 Modul Pbd Sql1

SQL (sekuel)

pg.6 Praktikum Pemrograman Basis Data

Kode 1.1

SELECT <select_list>

[FROM <table_name>]

[WHERE <kondisi1> [AND/OR <kondisi2>]]

[GROUP BY <select_list>]

[HAVING <kondisi1> [AND/OR <kondisi2>]]

[ORDER BY <select_list>]

Select_list

Merupakan daftar select. Dapat berupa literal value atau column_list. Perhatikan contoh berikut:

Kode 1.2

SELECT 1,'STIKOM Surabaya';

Contoh pada Kode 1.2mengembalikan 1 baris data dengan 2 kolom. <select_list> dalam contoh tersebut tidak menggunakan data yang tersimpan dalam tabel, dan inilah yang disebut sebagai literal_value. Penggunaan konkrit literal_value umumnya digunakan bersama dengan column_list untuk menghasilkan sebuah expression.

Mengambil data dari tabel (data retrieval)

Fungsi utama dari SELECT adalah untuk pengambilan data (data retrieval) yang tersimpan dalam (beberapa) tabel. Perhatikan contoh berikut:

Kode 1.3

SELECT 1'1','STIKOM Surabaya'STIKOM,

nim,nim+'@stikom.edu'EMAIL

FROM mahasiswa;

Hasil:

1 STIKOM nim EMAIL

1 STIKOM Surabaya 05390102208 [email protected]

1 STIKOM Surabaya 05410104001 [email protected]

.. … … …

1 STIKOM Surabaya 07410104800 [email protected]

Page 10: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.7

Contoh pada Kode 1.3menampilkan seluruh data di tabel Mahasiswa. Tanpa kata kunci FROM, query tersebut menghasilkan error.

Muncul pertanyaan, bagaimana jika ada data yang sama, tetapi ingin ditampilkan satu kali? Misal, kebutuhan untuk mengetahui siapa saja konsumen yang telah melakukan pembelian. Perhatikan contoh berikut:

Kode 1.4

SELECT nim

FROM nilai;

Hasil dari querypada Kode 1.4tersebut adalah banyak NIMyang sama. Untuk mengeliminasi data-data yang sama, dibutuhkan DISTINCT. Dengan mengimplementasikan DISTINCT, querypada Kode 1.4menjadi seperti ini:

Kode 1.5 SELECT DISTINCTnim

FROM nilai;

Menyaring data

Tidak semua data yang ada pada tabel, ingin ditampilkan. Terlebih ketika tabel terbagi kedalam banyak kolom dengan jumlah data yang sangat besar. Padahal data yang diambil hanyalah sebuah data, contohnya data karyawan milik Tegar Heru Susilo. Untuk efektifitas query, perlu ditambahkan kata kunci WHERE.Perhatikan contoh berikut:

Kode 1.6

SELECT *

FROM mahasiswa

WHERE nama='Alif';

Hasil:

nim nama alamat kota jns_kel.. sts_nikah

05410104001 Alif Jl. Jagir 20 Surabaya P B

Page 11: 132 Modul Pbd Sql1

SQL (sekuel)

pg.8 Praktikum Pemrograman Basis Data

Penyaringan data membutuhkan kondisi. Ada 3 bagian dalam penulisan kondisi, antara lain (1) expression, (2) operator pembanding, dan (3) value.

Sedangkan nilai yang dihasilkan dari kondisi ini ada 3 macam, yaitu TRUE, FALSE, dan UNKNOWN. TRUE berarti kondisi menghasilkan nilai benar, FALSE berarti kondisi menghasilkan nilai salah, sedangkan UNKNOWN berkaitan dengan nilai NULL (secara default bernilai FALSE, kecuali menggunakan operator IS).

Dari 3 bagian kondisi, yang perlu diperhatikan adalah operator pembanding. Operator pembanding menentukan nilai akhir kondisi (TRUE, FALSE, atau UNKNOWN). Dalam kode 1.6, operator pembanding yang digunakan adalah ‘sama dengan’ (=). Selain ‘sama dengan’, beberapa operator pembanding lainnya dapat dilihat padaTabel 1.1.

Tabel 1.1 Operator Pembanding

Operator Keterangan

= Sama dengan

> Lebih besar dari

>= Lebih besar sama dengan

< Kurang dari

<= Kurang dari sama dengan

<> atau != Tidak sama dengan

BETWEEN .. AND .. Diantara 2 nilai

IN (set) Cocok dengan salah satu diantara daftar nilai

LIKE Cocok dengan pola karakter

IS NULL Sama dengan NULL

Beberapa contoh penggunaan operator pembanding dapat dilihat pada query berikut:

Kode 1.7

SELECT *

FROM mahasiswa

WHERE nim BETWEEN'05390102208'AND

'05410104190';

Page 12: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.9

SELECT *FROMmahasiswa

WHERE nim IN('05390102208','05410104190');

SELECT *FROMmahasiswa

WHERE naam LIKE'%amb%';

SELECT *FROMmahasiswa

WHERE alamat ISNULL;

Penggunaan operator BETWEEN dan IN pada Kode 1.7menghasilkan data yang sama. Sedangkan untuk LIKE akan menghasilkan seluruh mahasiswa yang namanya mempunyai kata “amb” di tengah-tengahnya. Sedikit berbeda dengan penggunaan operator lain yang membutuhkan data yang presisi, LIKE menggunakan wildcards untuk mencari data yang mirip dengan data yang dicari. Wildcards ini dibagi menjadi 2 yaitu (1) % untuk merepresentasikan banyak karakter, dan (2) _ untuk merepresentasikan satu karakter. Contoh penggunaan _ bisa dilihat pada contoh berikut:

Kode 1.8

SELECT *

FROM mahasiswa

WHERE nama LIKE'_e%';

Pada Kode 1.8, query akan menghasilkan seluruh data mahasiswa yang karakter kedua namanya memiliki huruf e.

Bagaimana jika kondisi yang dibutuhkan berjumlah lebih dari satu? Jawabannya adalah dengan menggunakan operator logika untuk memisahkan kondisi-kondisi tersebut. Operator logika memakai tabel kebenaran sebagai acuan dalam pembentukan nilai akhir seluruh kondisi. Perhatikan contoh berikut:

Kode 1.9

SELECT nim, nama, kota

FROM mahasiswa

WHERE kota='Surabaya'and nim='05390102208';

Hasil:

nim nama kota

05390102208 Cinta Surabaya

Page 13: 132 Modul Pbd Sql1

SQL (sekuel)

pg.10 Praktikum Pemrograman Basis Data

Ada 3 macam operator logika yaitu AND, OR dan NOT. Untuk AND, nilai TRUE muncul jika semua kondisi TRUE. Sedangkan untuk OR, nilai FALSE muncul jika semua kondisi FALSE. Sedangkan untuk NOT, merupakan kebalikan dari nilai akhir kondisi.

Ada prioritas dalam penggunaan kondisi seperti yang terlihat padaTabel 1. 2, namun prioritas ini dapat diabaikan dengan menggunakan parentheses (tanda kurung).

Tabel 1. 2 Prioritas Penggunaan Operator Pembanding

Prioritas Keterangan

1 NOT

2 AND

3 OR

Pengurutan data

Dalam visualisasi informasi, hasil pemrosesan data dapat lebih mudah dibaca ketika data tersebut dapat diurutkan berdasarkan nilai tertentu. Sebagai contoh ketika dalam tabel “Nilai”, seorang dosen ingin melihat 10 nilai UAS terbesar. Perhatikan contoh berikut:

Kode 1.10

SELECT nim, uas

FROM nilai

WHERE nid='010103';

Cara seperti ini akan menampilkan data produk dengan urutan yang sama seperti urutan data di-insert-kan. Untuk dapat melihat urutan rangking harga produk, cukup dengan menambahkan kata kunci ORDER BY. Pengurutan ini bisa dibentuk dari kecil ke besar (ASCending) atau sebaliknya (DESCending). Sehingga query pada Kode 1.10berubah menjadi:

Kode 1.11

SELECT nim, kode_mk, uas

FROM nilai

WHERE nid='010103'

ORDERBY uas DESC;

Page 14: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.11

Hasil:

nim kode_mk uas

05390102208 MK-001 80

06390102666 MK-001 40

07390102802 MK-001 20

Operator Aritmatika

Dalam menampilkan data, ada kalanya data yang ditampilkan merupakan hasil perhitungan missal mencari nilai total penjualan setelah PPn 10%. Untuk mendukung perhitungan ini, diperlukan operator aritmatika. Ada 4 macam operator aritmatika, yang dapat dilihat padaTabel 1.3.

Tabel 1.3 Operator Aritmatika

Operator Aritmatika Keterangan

+ Untuk operasi penambahan. Jika + ini dipakai untuk tipe data karakter, menjadi operasi penggabungan karakter.

- Untuk operasi pengurangan.

* Untuk operasi perkalian.

/ Untuk operasi pembagian.

Contoh penggunaan operator aritmatika dapat dilihat pada query berikut:

Kode 1.12

SELECT 1 + 1;

SELECT 'Tegar'+' '+'Heru';

SELECT 5 – 1;

SELECT uas * 0.3

FROM nilai;

SELECT tugas / 4

FROM nilai;

Page 15: 132 Modul Pbd Sql1

SQL (sekuel)

pg.12 Praktikum Pemrograman Basis Data

Agregasi dan Pengelompokan Data

Dalam pemrosesan data mentah menjadi data statistik, diperlukan fungsi-fungsi yang dapat meng-agregasi data-data tersebut. Fungsi-fungsi ini meliputi SUM, MIN, MAX, COUNT, dan AVG. SUM untuk menghitung jumlah nilai data, MIN untuk menentukan data paling kecil, MAX untuk menentukan data paling besar, COUNT untuk menghitung jumlah data, dan AVG untuk menghitung rata-rata nilai data.

Dengan melihat pola data yang ada untuk kemudian dilakukan agregasi dan pengelompokan, visualisasi informasi dapat dilakukan dengan mudah. Sebagai contoh, untuk menampilkan rata-rata nilai UAS, nilai UAS terrendah, dan nilai UAS tertinggidapat dilihat pada query berikut:

Kode 1.13

SELECT AVG(uas) rata_nilai,

MAX(uas) nilai_tertinggi,

MIN(uas) nilai_terendah

FROM nilai;

Hasil:

rata_nilai nilai_tertinggi nilai terendah

49.41 90 0

Penggunaan GROUP BY mampu memilah data yang demikian besar kedalam kelompok-kelompok data untuk mendapatkan informasi-informasi yang lebih spesifik. Sebagai contoh, untuk menampilkan rata-rata nilai UAS, nilai UAS terrendah, dan nilai UAS tertinggi dari seluruh mata kuliah dapat dilihat pada query berikut:

Kode 1.14

SELECT kode_mk,AVG(uas) rata_nilai,

MAX(uas) nilai_tertinggi,

MIN(uas) nilai_terendah

FROM nilai

GROUPBY kode_mk;

Page 16: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.13

Hasil:

kode_mk rata_nilai nilai_tertinggi nilai terendah

MK-001 46.66 80 20

MK-002 43.33 70 0

MK-003 54.00 90 0

MK-102 65.00 80 50

MK-103 42.00 80 20

Untuk dapat menggunakan kata kunci GROUP BY dengan baik, ada beberapa aturan dalam pemakaian GROUP BY yang harus diperhatikan. Aturan-aturan tersebut antara lain:

1. Jika ada agregasi (SUM, MIN, MAX, COUNT, AVG) dalam <select_list>, kolom tanpa agregasi harus terdaftar dalam GROUP BY.

2. Dengan menggunakan WHERE, kita bisa mengabaikan baris-baris tertentu sebelum dilakukan agregasi dan pengelompokan.

3. Isi dari GROUP BY adalah kolom, bukan alias.

Dari data hasilKode 1.14, kita bisa melakukan filter misal hanya untuk mata kuliah yang rata-rata nilai UAS-nya dibawah 50. Hasil perubahan query pada Kode 1.14untuk proses filter, dapat dilihat pada query berikut:

Kode 1.15

SELECT kode_mk,AVG(uas) rata_nilai,

MAX(uas) nilai_tertinggi,

MIN(uas) nilai_terendah

FROM nilai

GROUPBY kode_mk

HAVING AVG(uas)>50;

Hasil:

kode_mk rata_nilai nilai_tertinggi nilai terendah

MK-003 54 90 0

MK-102 65 80 50

Page 17: 132 Modul Pbd Sql1

SQL (sekuel)

pg.14 Praktikum Pemrograman Basis Data

Untuk kondisi dalam fungsi agregasi, dibutuhkan kata kunci HAVING. HAVING mempunyai cara kerja yang sama dengan WHERE. Namun memiliki fungsi yang berbeda. Sehingga jika pada Kode 1.15 diberi kondisi hanya untuk MK-003, maka query menjadi seperti berikut ini:

Kode 1.16

SELECT kode_mk,AVG(uas) rata_nilai,

MAX(uas) nilai_tertinggi,

MIN(uas) nilai_terendah

FROM nilai

WHERE kode_mk ='MK-003'

GROUPBY kode_mk

HAVING AVG(uas)>50;

Hasil:

kode_mk rata_nilai nilai_tertinggi nilai terendah

MK-003 54 90 0

Multiple-table Query

Data-data yang tersimpan dalam database, tersebar kedalam beberapa tabel. Tabel-tabel ini dihubungkan dengan yang namanya referential constraint, yaitu hubungan antara constraintFOREIGN KEY dan constraintPRIMARY KEY.

Karena itulah, untuk mendapatkan informasi yang tersebar, dibutuhkan metode untuk menggabungkan property tabel-tabel tersebut. Metode yang digunakan ada 2 macam, yaitu JOIN danSUBQUERY.

Perbedaannya sederhana, JOIN menggunakan satu SELECT, sedangkan SUBQUERY menggunakan dua atau lebih SELECT (umumnya dikatakan sebagai SELECT within a SELECT).

Join

Bentuk joinpertama kali adalah menggunakan kata kunci WHERE untuk melakukan penggabungan tabel. Jadi tabel-tabel yang ingin digabungkan ditulis dalam kata kunci FROM, sedangkan

Page 18: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.15

penggabungannya ditulis dalam WHERE. Sintak untuk joinmenggunakan WHERE adalah sebagai berikut:

Kode 1.17 SELECT <select_list>

FROM <table1>, <table2> [, ...]

WHERE <table1.PK = table2.FK> [AND ...]

Contoh:

Kode 1.18

SELECT m.nama, n.kode_mk, n.uas

FROM mahasiswa m, nilai n

WHERE m.nim=n.nim;

Hasil:

nama kode_mk uas

Cinta MK-001 80

Cinta MK-002 0

Alif MK-002 70

… … …

Gala MK-103 40

Querypada Kode 1.18menghasilkan sejumlah baris yang merupakan kombinasi jumlah data antara mahasiswa dan nilai. Dari operator pembanding yang digunakan, sudah jelas bahwa query ini menghasilkan baris yang mempunyai data yang sama diantara duatable (produk dan kategori). Join jenis ini dapat juga disebut dengan equijoin.

Perkembangan SQL ANSI sejak tahun 1990-an, menambahkan model baru dalam join, yaitu menggunakan hanya kata kunci FROM sebagai referensi utama baik untuk tabel maupun untuk penggabungannya. Sintak untuk join tipe ini adalah sebagai berikut:

Kode 1.19

SELECT <select_list>

FROM <table1> JOIN <table2>

ON < table1.PK = table2.FK> [[AND ...]

JOIN ...];

Page 19: 132 Modul Pbd Sql1

SQL (sekuel)

pg.16 Praktikum Pemrograman Basis Data

Contoh:

Kode 1.20

SELECT m.nama, n.kode_mk, n.uas

FROM mahasiswa m JOIN nilai n

ON m.nim = n.nim;

Antara model lama dengan model baru, tidak ada perbedaan signifikan pada performa dan execution plan untuk data-data sederhana, namun berbeda halnya dengan data-data komplek dengan ruang lingkup yang besar.

Ada 2 tipe join, yaitu INNER JOIN yang lebih menekankan pada data yang sama, dan OUTER JOIN (yang merupakan kebalikan dari INNER JOIN).

Inner Join

Tujuan utama dari inner joinadalah menyamakan nilai baris pada sebuah tabel dengan tabel lain menggunakan kolom yang sama (tipe dan panjang [jika ada]). Jika salah satu kolom tidak memiliki kesamaan nilai atau tidak mempunyai nilai sama sekali, maka baris ini tidak akan ditampilkan dalam hasil query. Jadi, masih sama dengan equijoin.

Outer Join

Dalam contoh equijoin, data dengan nama mahasiswa Indah, tidak ada. Hal ini dikarenakan Indah memang tidak mempunyai nilai. Cara yang dapat dipakai untuk menampilkan data Indah tersebut tanpa nilainya adalah dengan menggunakan outer join. Pengubahan sintak joinmenjadi outer join dapat dilihat pada Kode 1.21:

Kode 1.21

SELECT <select_list>

FROM <tabel1 sebagai kiri>

<LEFT/RIGHT> [OUTER] JOIN

<tabel2 sebagai kanan>

ON <table1.PK = table2.FK> [AND ...];

Dalam sintak tersebut, ada LEFT/RIGHT. Penggunaan LEFT akan memproses seluruh data yang ada pada tabel sebelah kiri

Page 20: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.17

kemudian dilanjutkan dengan data yang sama pada tabel sebelah kanan. Artinya, seluruh data pada tabel kiri ditampilkan semua, baru setelah itu data yang sama di tabel sebelah kanan, ditampilkan. Untuk data yang tidak ada di tabel sebelah kanan, ditampilkan kata NULL. Sedangkan RIGHT bekerja sebaliknya.

Dengan demikian, outer join fokus pada nilai yang tidak sama antara kolom-kolom yang sama (tipe dan panjang [jika ada]) pada tabel yang di-join-kan. Nilai yang tidak sama, direpresentasikan oleh NULL. Sehingga dari contoh inner join, solusinya adalah mengubah query menjadi seperti berikut:

Kode 1.22 SELECT m.nama, n.kode_mk, n.uas

FROM mahasiswa m LEFTJOIN nilai n

ON m.nim = n.nim;

Hasil:

nama kode_mk uas

Cinta MK-001 80

Cinta MK-002 0

… … …

Indah NULL NULL

Gala MK-003 0

Gala MK-103 40

Non-Equijoin

Berbeda dengan equijoin yang selalu memakai operator ‘sama dengan’, non-equijoin memakai operator selain ‘sama dengan’. Contoh permasalahan misalnya kita ingin mencari mahasiswa dengan angkatan lebih muda dari Entin. Perhatikan query berikut:

Kode 1.23

SELECT entin.nim, m.nim, m.nama

FROM mahasiswa m, mahasiswa entin

WHERE LEFT(m.nim,2)>LEFT(entin.nim,2)

AND entin.nama='Entin';

Page 21: 132 Modul Pbd Sql1

SQL (sekuel)

pg.18 Praktikum Pemrograman Basis Data

Hasil:

Namaproduk hargapersatuan

Kemeja Lengan Panjang 25000.00

Jepit Rambut 10000.00

Subquery

Subquery Merupakan querydidalam query. Umumnya, subquery ini dipakai untuk mencari data yang belum diketahui. Penggunaan query didalam query ini umumnya menjadi bagian dari kondisi. Sintak subquery adalah sebagai berikut:

Kode 1.24

SELECT <select_list>

FROM <tabel>

WHERE <column> =

(SELECT <single_column>

FROM <tabel>

WHERE <kondisi>);

Namun, tidak menutup kemungkinan penggunaan subquery sebagai bagian dari data. Dalam artian query didalam kata kunci SELECT ataupun didalam kata kunci FROM. Queryjenis ini biasa disebut sebagai INLINE VIEW. Sebagai contoh penggunaan subquery, perhatikan contoh berikut:

Kode 1.25

SELECT nim, nama

FROM mahasiswa

WHERE LEFT(nim,2)=

(SELECT LEFT(nim,2)

FROM mahasiswa

WHERE nama='Entin');

Kode 1.25merupakan versi subquery dariKode 1.23. Menghasilkan data yang sama namun dengan solusi yang berbeda. Solusi subquery pada Kode 1.25mencari terlebih dahuluangkatan si Entin. Hasil dari pencarian ini digunakan sebagai acuan untuk main query.

Page 22: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.19

SQL Function

Fungsi-fungsi dalam SQL (bukan User Defined Function) lebih dikhususkan pada masing-masing penyedia layanan database. Secara umum, fungsi-fungsi dalam SQL Server dapat dibagi menjadi:

1. Aggregation Mengembalikan nilai tunggalyang merepresentasikan sebuah agregasi dari sejumlah nilai. Macam: AVG(), MAX(), COUNT(), MIN(), SUM()

2. Conversion Mengubah nilai dari satu tipe data ke tipe data lain. Selain itu konversi digunakan juga untuk mengaplikasikan karakteristik pada format date, time, dan numeric. Macam: CAST(), CONVERT()

3. String Manipulation Digunakan untuk mengubah, mengganti, dan memanipulasi karakter. Macam: LEN(), SUBSTRING(), UPPER(), LOWER(), LEFT(), RIGHT(), REPLACE()

4. Mathematical Digunakan untuk operasi matematis, mulai dari algebra, trigonometri, statistik, peramalan, dan bahkan operasi finansial. Macam: CEILING(), FLOOR(), ROUND(), POWER(), SQRT()

5. Date and Time Mengubah porsi date dan time, komparasi dan manipulasi nilai-nilai date/time. Macam: GETDATE(), DATEPART(), DATEADD(), DATEDIFF()

Beberapa contoh penggunaan SQL Function dapat dilihat pada Kode 1.26. CONVERT digunakan untuk mengubah nilai 1000 dari bentuk numeric ke bentuk varchar agar bisa digabungkan dengan kata Rupiah. CEILING, FLOOR, dan ROUND digunakan masing-masing untuk pembulatan keatas, pembulatan kebawah, pembulatan berdasarkan nilai dibelakang koma (sesuai dengan tingkat presisi yg dipakai). GETDATE digunakan untuk mengambil tanggal sistem. DATEPART digunakan untuk

Page 23: 132 Modul Pbd Sql1

SQL (sekuel)

pg.20 Praktikum Pemrograman Basis Data

mengambil nilai bagian tertentu dalam tanggal seperti tahun, bulan, hari, jam, menit. DATEADD digunakan untuk menambahkan nilai tertentu pada bagian tertentu dalam tanggal. Sesuai contoh, DATEADD menambahkan nilai 2 pada tahun sekarang, sehingga nilai yang dihasilkan adalah 2016.

Kode 1.26

SELECT CONVERT(VARCHAR, 1000)+' Rupiah.';

SELECT LEN(nama),

SUBSTRING(nama, 5, 2),

UPPER(nama),

LOWER(nama),

LEFT(nama, 5),

RIGHT(nama, 5)

FROM mahasiswa;

SELECT CEILING(5.25),FLOOR(5.25),

ROUND(5.25, 0),POWER(5,2),SQRT(25);

SELECT GETDATE(),

DATEPART('yyyy',GETDATE()),

DATEADD('yyyy', 2,GETDATE());

Satu lagi fungsi yang bisa dipakai untuk melakukan conditional expression (untuk menggantikan peran IF … ELSE dalam programming), yaitu CASE. Sintak CASE dapat dilihat pada kode berikut:

Kode 1.27

CASE

WHEN <kondisi> THEN <statement>

[WHEN <kondisi> THEN <statement>]

[WHEN <kondisi> THEN <statement>]

...

ELSE <statement>

END

Pada Kode 1.27, kondisi dituliskan dalam kata kunci WHEN dan apa yang dilakukan (jika kondisi bernilai TRUE) dituliskan dalam kata kunci THEN. Jika ada kondisi lain, dituliskan dalam kata kunci ELSE.

Masih banyak fungsi-fungsi lain yang diberikan oleh SQL Server untuk membantu dalam pengolahan data.

Page 24: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.21

Transaction

Mungkin lebih umum jika disebut sebagai DML atau Data Manipulation Language. Lebih umum lagi jika disebut dalam bentuk Insert, Update, Delete. Bersama dengan SELECT, transaction secara ilmiah dikenal sebagai CRUD (Create – Read – Update – Delete).

Sederhananya, transaksi adalah sebuah mekanisme untuk memastikan bahwa data masuk sesuai dengan tempatnya. Tentunya dengan beberapa aturan. Aturan-aturan ini didefinisikan secara khusus melalui constraint, relationship, dan tipe data. Dari aturan ini, sistem yang menentukan apakah transaksi sukses atau tidak (dengan mengembalikan nilai kesalahan).

Penambahan data

Sebelum melakukan penambahan data, perlu diperhatikan hal-hal sebagai berikut: Kolom mana yang membutuhkan nilai. Kolom mana yang mempunyai constraint. Kolom mana yang diatur oleh database melalui fungsi. Kolom mana yang mempunyai nilai default atau yang

memperbolehkan nilai NULL. Apa tipe data kolom tujuan.

Untuk menambahkan data, diperlukan INSERT. Sintak INSERT dapat dilihat pada.

Kode 1.28

INSERT INTO <tabel>[(<column_list>)]

VALUES (<value_list>);

Perhatikan contoh berikut:

Kode 1.29

INSERT INTO mahasiswa

VALUES ('08410104003','Jenny',

'Jl. Krembangan 50','Surabaya',

'W','B');

Page 25: 132 Modul Pbd Sql1

SQL (sekuel)

pg.22 Praktikum Pemrograman Basis Data

PadaKode 1.29, <column_list> tidak diberikan dengan asumsi bahwa data dimasukkan kedalam seluruh kolom. Untuk menambahkan data dengan mengabaikan beberapa kolom tabel tujuan, bisa mengikuti contoh berikut:

Kode 1.30 INSERT INTO mahasiswa

(nim, nama)

VALUES ('08410104003','Jenny');

Bagaimana jika data yang dimasukkan adalah data dari tabel lain? Untuk menjawab pertanyaan ini, SQL Server menggunakan perintah INSERT INTO … SELECT.

Modifikasi data

Modifikasi data diperlukan ketika terjadi perubahan pada data orisinilnya. Untuk memodifikasi data, dibutuhkan perintah UPDATE. Perintah ini dapat memodifikasi satu, banyak, atau semua baris data dalam sebuah tabel. Jumlah data yang dimodifikasi bergantung pada kondisi (kriteria) yang diberikan dalam query UPDATE. Sintak UPDATE dapat dilihat pada kode berikut:

Kode 1.31 UPDATE <tabel>

SET <kolom1> = <nilai1>

[,<kolom2> = <nilai2>]

WHERE <kondisi1>;

Perhatikan contoh berikut:

Kode 1.32

UPDATE mahasiswa

SET sts_nikah ='M'

WHERE nim ='08410104003';

Kode 1.32mencoba memodifikasi data mahasiswa. Modifikasi dilakukan untuk mengubah status nikahmahasiswa, dengan nim 08410104003, dari yang awalnya B menjadi M. Jadi bisa dilihat bahwa nilai yang diberikan pada kata kunci SET merupakan nilai baru.

Page 26: 132 Modul Pbd Sql1

SQL (sekuel)

Praktikum Pemrograman Basis Data pg.23

Penghapusan data

Ada kalanya data yang sudah ada tidak diperlukan lagi, sehingga data tersebut harus dihapus dari tabel. Untuk menghapus data, digunakan perintah DELETE. Perintah ini mempunyai perlakuan yang sama seperti UPDATE. Yang perlu diperhatikan disini adalah adanya referential constraint (hubungan antara PK dan FK). Dalam arti kata lain, data tidak dapat dihapus ketika data tersebut dipakai sebagai data acuan dalam tabel lain(melalui fitur foreign key). Sintak DELETE dapat dilihat pada kode berikut:

Kode 1.33

DELETE <tabel>

WHERE <kondisi1>;

Contoh sederhananya adalah sebagai berikut:

Kode 1.34

DELETE mahasiswa

WHERE nim ='08410104003';

Kode 1.34mencoba untuk menghapus data mahasiswa dengan nim 08410104003. Penghapusan bisa sukses jika data mahasiswa tersebut tidak dipakai di tabel Nilai.

Page 27: 132 Modul Pbd Sql1

SQL (sekuel)

pg.24 Praktikum Pemrograman Basis Data

Latihan

1. Tampilkan seluruh data mahasiswa. 2. Tampilkan data mahasiswa yang tinggal di kota Surabaya. 3. Tampilkan nama mahasiswa yang mempunyai huruf a atau

huruf A. 4. Tampilkan nama mahasiswa yang huruf kedua terakhir dari

namanya mempunyai huruf n. 5. Tampilkan nim, namadan nilai tugas mahasiswa. 6. Tampilkan 3 karakter terakhir dari nama mahasiswa. 7. Buat email berdasarkan nama mahasiswa dan gabungkan

dengan @gmail.com. 8. Hitung jumlah mahasiswa masing-masing dosen. Ambil

datanya dari tabel nilai. 9. Tampilkan nama mahasiswa dan nama dosen untuk dosen

dengan nid 010306. 10. Tampilkan mahasiswa yang mempunyai dosen yang sama

dengan Entin. 11. Tampilkan mahasiswa yang tidak memiliki nilai. 12. Masukkan data mahasiswa berikut ini:

NIM: nim Anda Nama: nama lengkap Anda Alamat: alamat rumah/kos Anda Kota: sesuai alamat Jns_kelamin: jenis kelamin Anda Sts_nikah: M

13. Ubah status nikah Anda dari M menjadi B. 14. Hapus data Anda.