Anda di halaman 1dari 54

syurfah@gmail.

com

SQL (Structure Query Language)


Pertemuan 4 USING SINGLE ROW FUNCTION to CUSTOMIZE

Tujuan Pembelajaran

What we learn :

a)

PART 1

Menjelaskan berbagai jenis fungsi yang tersedia dalam SQL Dapat menggunakan karakter, jumlah, dan fungsi dalam SELECT Dapat menjelaskan fungsi konversi

SQL Function Single Row Function Practice Single Row Function Practice

b)

PART II

c)

PART 1

SQL FUNCTION

Single-row function : tiap record menghasilkan satu output Multiple-row function : Beberapa record menghasilkan satu output

Tipe dari SQL Function

Melakukan perhitungan Merubah data item Manipulasi hasil untuk sekelompok baris Memformat tampilan tanggal dan angka Merubah tipe data dari suatu kolom.

BACK

Single Row Functions

Function_name merupakan nama dari fungsi yang akan digunakan Arg1, arg2 merupakan argument yang digunakan oleh fungsi. Bagian ini dapat direpresentasikan dalam bentuk nama kolom atau ekspresi.

Isi dari argument dapat berupa : konstanta yang dideklarasikan oleh user, nilai variabel, nama kolom atau ekspresi.

Single Row Functions


Character

General

Number

Single Row Functions

Conversion

Date

Fungsi CHARACTER

Fungsi karakter menerima input berupa karakter dan mengembalikan nilai yang bisa berupa karakter maupun angka. Fungsi karakter dibagi menjadi 2 kelompok yaitu :

Case-manipulation functions

berguna untuk mengubah karakter dari huruf kecil ke huruf besar atau sebaliknya digunakan untuk memanipulasi karakter, misal menggabungkan karakter, mengambil sebagian karakter dari sebuah kalimat, serta mengetahui panjang dari sebuah kalimat.

Character-manipulation functions

Fungsi Character ~ Case-manipulation


Kelompok Fungsi LOWER (coloumn | expression) Kegunaan Mengubah ke huruf kecil

Case Manipulation Functions

UPPER (coloumn | expression)


INITCAP (coloumn | expression)

Mengubah ke huruf besar

Kerjakan, lalu amati

Select last_name, upper(last_name), lower(last_name), initcap(last_name) from employees;

BACK

Fungsi Character ~ Character manipulation

Fungsi Character ~ Character manipulation


Kelompok Fungsi Concat (column1|expressions1, column2|expressions2 SUBSTR (column|expressions, m[,n]) Character Manipulatio n Functions Kegunaan Menggabungkan kalimat atau karakter pertama dgn kalimat atau karakter kedua Mengambil karakter mulai dari posisi m sebanyak n. Jika n tidak dituliskan, maka semua karakter mulai posisi ke m sampai terakhir akan diambil. Menambahkan karakter tertentu disebelah kiri suatu kalimat, sehingga panjang kalimat menjadi n.

LPAD (column|expressions, n, string)

RPAD(column|expressions, n, string)

Menambahkan karakter tertentu disebelah kanan suatu kalimat, sehingga panjang kalimat menjadi n.

Fungsi Character ~ Character manipulation


Kelompok Fungsi Kegunaan Mengembalikan nilai banyaknya karakter di dalam ekpresi tersebut Mengembalikan posisi numerik dari sebuah string. Secara opsional dapat menggunakan posisi m untuk mulai mencari dan kehadiran n pada string. Secara default m dan n adalah 1, artinya pencarian dimulai dari posisi pertama dan laporan diberikan ketika pertama kali menemukan hasilnya.

Length (kolom/ekspresi)

Character Manipulatio n Functions INSTR (kolom/ekspresi, string, [, m] [, n])

Fungsi Character ~ Character manipulation

Kelompok

Fungsi Replace (teks, cari_string, string_pengganti)

Kegunaan
Mencari ekpresi teks dari sebuah string dan menggantinya dgn string_pengganti memungkinkan untuk melakukan trim karakter yang berada depan (leading) maupun yang di belakang (trailing). Jika trim_character atau trim_source adalah karakter literal, keduanya harus diapit dengan tanda petik tunggal.

Character Manipulatio n Functions TRIM (leading|trailing|both, trim_character FROM trim_source))

Kerjakan, lalu amati

Select first_name, last_name, concat(first_name,last_name), substr(first_name,2,3), length(last_name) ,instr(first_name, 'a') from employees;

Kerjakan, lalu amati

Select salary, lpad(salary,12,'&'), rpad(salary,12,'&') from employees;

Kerjakan, lalu amati

Select last_name, replace(last_name, 'e', 'o'), trim('a' from last_name) from employees;

Kerjakan, lalu amati

Select last_name, replace(last_name, 'e', 'o') GANTI, trim('a' from last_name) HAPUS from employees;

BACK

Fungsi NUMBER

Fungsi angka digunakan untuk memanipulasi suatu angka

Fungsi NUMBER
Kelompok Fungsi Kegunaan Membulatkan suatu nilai sampai n desimal. Jika n tidak disebutkan, berarti tidak ada nilai desimal, jika n bernilai negatif berarti dibulatkan kekiri sesuai dengan nilai n

ROUND(column|expression, n)

Number Functions TRUNC(column|expression, n)

Memotong suatu nilai sampai n desimal. Jika n tidak disebutkan, maka n bernilai 0. Jika n bernilai negatif berarti dibulatkan kekiri sesuai dengan nilai n
Mencari nilai sisa dari m dibagi n

MOD(m, n)

Kerjakan, lalu amati

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL;

SELECT TRUNC(45.923,2), TRUNC(45.923,0), TRUNC(45.923,-1) FROM DUAL;

SELECT Job_id, last_name, salary, MOD(salary, 5000) FROM employees WHERE job_id = 'SA_REP';

BACK

Fungsi DATE

Oracle database menyimpan tanggal dalam format angka yang terdiri dari: abad, tahun, bulan, tgl, jam, menit dan detik, nilai tanggal yang dapat disimpan oleh Oracle adalah antara 1 Januari 4712 SM sampai 31 Desember 9999. Sedangkan untuk tampilan defaultnya menggunakan format DD-MON-RR, yang berarti menampilkan 2 digit angka yang menunjukkan tanggal, kemudian 3 digit karakter terdepan dari nama bulan, dan 2 digit terakhir dari tahun. Meskipun saat ditampilkan tahunnya hanya terdiri dari dua digit, tetapi pada penyimpanannya tetap 4 digit, dimana 2 digit terdepan menunjukkan abad dan 2 digit berikutnya menunjukkan tahun.

Fungsi DATE

Oracle mengenali format tanggal dimana tahun yang dituliskan dua digit akan dikenali seperti berikut ini: Untuk tahun sistem yg berlaku 0 49, maka dua digit tahun pada tanggal berkisar 0-49, dimaknai tahun pada abad sama dengan abad tahun sistem berkisar 50-99, dimaknai tahun pada abad sebelum abad tahun sistem Untuk tahun sistem yg berlaku 50 99, maka jika dua digit tahun pada tanggal berkisar 0-49, dimaknai tahun pada abad setelah abad thn sistem berkisar 50-99, dimaknai tahun pada abad sama dengan abad tahun sistem

Fungsi DATE

Jika Tahun Sistem yang berlaku misalnya 1999, maka perintah yang sama dengan Contoh sebelumnya akan menghasilkan makna thn sebagai berikut

SELECT last_name, hire_date FROM employees WHERE hire_date < '01-FEB-88';

Thn sistem 1999 (50-99) abad 2000, maka Thn 88 (50-99) adalah Tahun 1988 (abad 2000)

SELECT last_name, hire_date FROM employees WHERE hire_date < '01-FEB-05';

Thn sistem 1999 (50-99) abad 1900, maka Thn 05 (049) adalah Tahun 2005 (abad 2001)

Fungsi DATE

Untuk menampilkan tanggal dan waktu dari database server digunakan fungsi SYSDATE. Fungsi SYSDATE digunakan sebagaimana nama kolom pada perintah SELECT.

SYSDATE

adalah fungsi yang mengembalikan : Date Time

Fungsi DATE ~ Aritmatika

Untuk memanipulasi data bertipe tanggal, selain menggunakan operasi aritmatik, juga bisa memanfaatkan fungsi tanggal. Semua fungsi tanggal akan menghasilkan data bertipe tanggal, kecuali fungsi MONTHS_BETWEEN yang menghasilkan angka.

Fungsi DATE ~ Aritmatika

Kerjakan, lalu amati

SELECT hire_date, hire_date+2, hire_date-2, Round((Sysdate - hire_date) / 7,2) AS WEEKS, hire_date + 90/24 FROM employees ;

BACK c

Practice makes habit!


Buat query untuk : 1) Menampilkan nilai ASCII dari karakter s, a dan i 2) Lakukan sebailknya dari nomer 1. 3) Menampilkan struktur tabel dari Departments. Kemudian tampilkan semua datanya. Apa tujuan dari perintah ini : SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, 'a') FROM employees; Bagaimana perintah untuk membatasi baris (record) di nomer 4, yang memiliki job_berawalan IT

4)

5)

Practice makes habit!


6.

Tuliskan perintah dalam SQL untuk menampilkan hire_date, menampilkan gabungan first_name dan last_name dimana first_name dalam huruf kecil, dan last_name dalam huruf kapital dari tabel Employees untuk baris (record) yang memiliki hire_date diantara 2-Feb1980 s/d 2-Feb-1990. Tuliskan perintah dalam SQL untuk menampilkan first_name, dua huruf pertama dari Job_id, panjang karakter pada Email dari tabel Employees untuk baris BACK (record) yang memiliki karakter e di tengah

7.

PART 2

Conversion Functions

Fungsi konversi digunakan untuk mengubah tipe data menjadi tipe data yang lain.

Implicit Data Type Explicit Data Type

Implicit Data Type Conversation

Tanpa menggunakan fungsi konversi, Oracle secara otomatis akan mengubah suatu tipe data menjadi tipe data yang sesuai, fasilitas ini disebut dengan Implicit Data Type Conversion.

Implicit Data Type ~ Contoh

select 'Gaji ' || First_name || ' adalah ' || salary from employees;

select first_name || ' '|| hire_date from employees;

BACK

Explicit Data Type Conversation

Meskipun secara otomatis Oracle mengubah data secara implisit, tetap dianjurkan untuk mengubah tipe data secara eksplisit, agar kinerja Oracle tetap baik. Explisit Data Type Conversation akan mengubah NUMBER menjadi CHARACTER, dan CHARACTER menjadi DATE serta sebaliknya.

Explicit Data Type Conversation


FUNGSI TO_CHAR(number|date, [ fmt], [nlsparams] ) KEGUNAAN Mengubah sebuah angka atau tanggal menjadi VARCHAR2 dengan format fmt. Number conversion: parameter nlsparams menunjukkan karakter yang dikembalikan berdasarkan format angka. Date conversion: parameter nlsparams menunjukkan bahasa yang digunakan untuk penamaan bulan dan hari serta singkatan yang digunakan.

Explicit Data Type Conversation


FUNGSI TO_NUMBER(char, [ fmt], [nlsparams] ) KEGUNAAN Mengubah karakter menjadi angka sesuai dengan format fmt. Parameter nlsparams kegunaannya sama seperti pada fungsi TO_CHAR Mengubah karakter yg mewakili sebuah tanggal menjadi format tanggal sesuai fmt. Jika fmt tidak dituliskan, maka formatnya adalah DD-MON-YY. Parameter nlsparams kegunaannya sama seperti pada fungsi TO_CHAR

TO_DATE(char, [ fmt], [nlsparams] )

Using to_char Function with Dates

Format model
harus dituliskan dengan menggunakan tanda petik tunggal, casesensitive, dapat diisi dengan format tanggal yang valid.

Antara tanggal dan format tanggal harus dipisahkan dengan tanda koma. Secara otomatis nama hari dan nama bulan ditambahkan dengan spasi, untuk menghilangkan spasi dapat digunakan mode fm.

TO_CHAR function ~ Contoh

Menampilkan tanggal hari ini dengan format dd-mmyyyy misal : 24-03-2014

Menampilkan data 0011001 yang semula bertipe String menjadi bertipe Number(numeric).

Menampilkan nama dan email pegawai yang bekerja mulai tahun 3 Januari 1990.

TO_CHAR function ~ Contoh

SELECT first_name || ' ' || TO_CHAR(hire_date, 'DD Month YYYY'), TO_CHAR(hire_date, 'DD Mon Year') AS HIREDATE1, TO_CHAR(hire_date, 'Day') AS HIREDATE2, TO_CHAR(hire_date, 'DY DD-MM-YY') AS HIREDATE3 FROM employees;

Using to_char Function with Numbers

TO_CHAR Function ~ Contoh

SELECT first_name || ' ' || TO_CHAR(salary, '$99,999.00'), TO_CHAR(salary, '$00,000.00') FROM employees;

TO_CHAR Function ~ Contoh

SELECT first_name, salary, salary+TO_NUMBER('10000'), hire_date, hire_date - TO_DATE('2-Feb-80') FROM employees;

BACK

General Functions
Fungsi

ini terdiri dari 2 macam, yaitu

Fungsi yang digunakan untuk menangani nilai NULL ( NVL, NVL2, NULLIF, COALESCE) Fungsi yang merupakan EKSPRESI KONDISI.

Fungsi Menangani NULL

NVL (expr1, expr2)

Jika Expr1 bukan Null, maka Output berupa Expr1 FUNGSI KETERANGAN Jika Expr1 bernilai Null, maka Output berupa Expr2

NVL(expr1, expr2) Mengubah nilai NULL menjadi suatu nilai tertentu NVL2 (expr1, expr2,exp3) NVL2(expr1, expr2, expr3) Jika expr1 tidak bernilai NULL, maka expr2 Jika Expr1 bukan Null, maka Output berupajika Expr2 akan ditampilkan, expr1 bernilai NULL, maka expr3 Output yang ditampilkan. Jika Expr1 bernilai Null, maka berupa Expr3 NULLIF(expr1, expr2) NULLIF (expr1, Membandingkan nilai dari expr1 dan expr2, jika nilai expr1 = expr 2, maka hasilnya adalah NULL. Jika Expr1 = Expr2, maka Output Null maka expr1 yang Jika expr1berupa <> expr2, ditampilkan. Jika Expr1 Expr2, maka Output berupa Expr1 COALESCE(expr1, expr2, ..., Menampilkan ekspresi pertama yang tidak bernilai COALESCE (expr1, expr2, , exprn ) exprn) NULL

expr2)

Jika Expr1 , Expr2, Exprn-1 semuanya Null, maka Output adl Exprn Sebaliknya, maka Output berupa salah satu Expr1, Expr2, . Exprn-1 yang tidak null (diprioritaskan Expr yang terkiri)

Fungsi Menangani NULL ~ Contoh

SELECT department_id, last_name, salary, commission_pct KOMISI, manager_id, length(first_name), length(last_name), NVL(commission_pct,0) AS KOMISI_1,NVL2(commission_pct,Commission_pct, 0) AS KOMISI_2, NVL2(commission_pct,Salary + Salary * Commission_pct, Salary) INCOME, NULLIF(LENGTH(first_name), LENGTH(last_name)) AS RESULT_1, COALESCE(manager_id, commission_pct, -1) AS RESULT_2 FROM employees where Last_Name like '%K%' or Last_Name like '%L%';

BACK

Ekspresi Kondisi

Perintah yang digunakan dalam ekspresi kondisi ini adalah

CASE DECODE

Penulisan dari ekspresi CASE :

Ekspresi CASE ~ Contoh

Ekspresi CASE

Pada ekspresi CASE, Oracle akan membandingkan apakah ada nilai yang sesuai antara expr dan comparison_expr. Apabila ada nilai yang sama maka hasilnya adalah return_expr dari pasangan WHEN ... THEN yang sesuai. Apabila tidak ada nilai yang sama, maka hasilnya adalah else_expr jika ada kalimat ELSE, jika kalimat ELSE tidak ada maka hasilnya adalah NULL. Nilai dari semua return_expr dan else_expr tidak boleh NULL, selain itu semua ekspresi pada CASE harus sama tipe datanya.

Fungsi DECODE

Fasilitas yang hampir sama fungsinya dengan CASE adalah DECODE. Fungsi DECODE dituliskan dengan format :

Sama dengan fungsi IF-THEN-ELSE pada umumnya, fungsi DECODE akan membandingkan nilai col atau expression dengan nilai dari setiap search, apabila nilainya sama maka hasilnya adalah result, tetapi jika tidak ada nilai yang sama, maka yang dikembalikan adalah nilai default, dan apabila nilai default tidak didefinisikan maka hasilnya adalah NULL.

Fungsi DECODE ~ Contoh

Practice makes habit!

1.

Tuliskan query untuk menampilkan manager_id, menampilkan hire_date dalam format seperti 17/Jun/99 lalu digabungkan dengan Email (dalam huruf kecil), menampilkan salary dalam format seperti Rp. 07,000 dari tabel employees untuk baris (record) yang memiliki manager_id bukan 100,102 , dan memiliki Email yang mengandung huruf K di awal Email.

Practice makes habit!


2.

Tuliskan perintah dalam SQL untuk menampilkan employee_id, first_name, salary, job_id, bonus dengan ketentuan sebagai berikut: Untuk dua huruf pertama dari Job_id jika bernilai IT diberi bonus = 10% x salary AD diberi bonus = 20% x salary Selain IT dan AD diberi bonus = 0 dari tabel employees untuk baris (record) yang memiliki employee_id < 110

Next :

Pengumpulan Tugas Reporting Aggregate Data Using the Group Function