Monday 1 February 2016

Fungsi-Fungsi SQL dan Penyelesainya


  Fungsi fungsi sangat mendukung fitur pada SQL
·         Melakukan perhitungan perhitungan pada data
·         Memodifikasi item item data individual
·         Memanipulasi keluaran dari kelompok baris baris
·         Format untuk tampilan tanggal dan angka angka
·         Konversi tipe data tipe data kolom

  Ada dua tipe dari fungsi fungsi
·         Single rows functions (fungsi fungsi baris tunggal)
·         Multiple row functions (fungsi fungsi banyak baris)

Fungsi fungsi ini hanya digunakan pada baris baris tunggal dan mengembalikan satu hasil per baris.
Ada tipe tipe berbeda dari singlerow functions. Single row function mencakup hal hal berikut:
·         Character (karakter)
·         Number (angka)
·         Date (tanggal)
·         Conversion (konversi)
·         General (umum)
·          
  Multiple row Functions
Fungsi fungsi dapat memanipulasi kelompok dari baris baris untuk memberi suatu hasil baris baris per kelompok. Fungsi fungsi ini dikenal juga sebagai group functions



Singlerow function digunakan untuk memanipulasi item item data. Singlerow functions menerima satu atau lebih argument argument dan mengembalikan satu nilai untuk setiap baris yang dihasilkan oleh suatu query. Suatu argumen dapat berupa berikut ini :
·         Usersupplied constant (Konstanta yang disediakan oleh user)
·         Nilai variable
·         Nama Kolom
·         Ekspresi
Fitur fitur dari singlerow functions mencakup :
·         Aksi pada setiap baris yang dikembalikan di dalam query
·         Mengembalikan satu hasil per baris
·         Memungkinkan pengembalian suatu nilai data dari suatu tipe berbeda daripada satu yang direferensikan.
·         Mungkin menerima satu atau lebih argument argumen
·         Dapat digunakan didalam klausa klausa SELECT, WHERE, dan ORDER BY;dapat disarangkan(nested)

  Dalam sintak :
function_name adalah nama dari fungsi arg1, arg2 adalah setiap argumen yang digunakan oleh fungsi. Hal ini bisa jadi diwakili oleh suatu kolom atau ekspresi. Cakupan single row function:
·         Character Functions : Menerima input karakter dan dapat mengembalikan baik nilai nilai karakter ataupun angka.
·         Number Functions : Menerima masukkan angka dan mengembalikan nilai nilai angka
·         Date Functions : Bekerja pada nilai nilai dari tipe data DATE (semua date functions mengembalikan suatu nilai dari tipe data DATE kecuali fungsi MONTHS_BETWEEN, yang mengembalikan suatu angka.)
·         Coversion Functions : Mengkonversi suatu nilai dari satu tipe data ke tipe data lainnya.
·         General Functions (fungsi fungsi umum) :
NVL
NVL
2
NULLIF
COALESCE
CASE
DECODE


Singlerow character functions menerima data karakter sebagai masukan dan dapat mengembalikan baik nilai nilai karakter maupun angka. Character functions dapat dibagi menjadi :
·         Case manipulation functions
·         Characte rmanipulation Functions
LOWER(column/expression) : Mengkonversi nilai nilai karakter huruf menjadi lowercase (huruf kecil)
UPPER(column/expression) : Mengkonversi nilai nilai karakter huruf menjadi uppercase (huruf besar)
INITCAP(column/expression) : Mengkonversi nilai nilai alpha karakter menjadi uppercase untuk huruf pertama dari tiap kata; semua huruf huruf lain lowercase
CONCAT(column1/expressio1,colum2/expression2) : Menggabungkan nilai karakter pertama ke karakter kedua : sama dengan operator penggabungan ( || )
SUBSTR (column/expression,m[,n]) : Menghasilkan karakter karakter tertentu dari nilai karakter
dimulai pada posisi karakter kem,ken panjang karakter (jika m adalah negatif, dihitung mulai dari akhir nilai karakter. Jika n dihilangkan, menghasilkan semua karakter sampai akhir dari rangkaian.)
LENGTH (column/expression) : Mengembalikan jumlah karakter dalam ekspresi
INSTR (column/expression, 'string', [,m], [n]) : Mengembalikan posisi numerik dari suatu rangkaian penamaan. Secara optional, Anda dapat menyediakan suatu posisi kem untuk memulai pencarian, dan yang terjadi din dari suatu rangkaian. m dan n defaultnya 1, artinya pencarian dimulai di awal suatu pencarian dan melaporkan kejadian yang pertama.
LPAD (column /expression, n,'string') : Mengisi nilai karakter perataan kanan (rightjustified) ke suatu lebar total n posisi karakter
RPAD (column /expression, n,'string'): Mengisi nilai karakter perataan kiri (leftjustified) ke suatu lebar total n posisi karakter
TRIM (leading/trailing/both,trim_character FROM trim_source) : Memungkinkan Anda untuk memotong karakter karakter bagian awal atau bagian akhir atau kedua duanya dari suatu rangkaian karakter. Jika trim_character atau trim_source adalah suatu karakter literal, Anda harus mengapitnya dengan tanda petik tunggal. Ini adalah fitur yang ada di Oracle8i dan versi selanjutnya.
REPLACE (text, search_string, replacement_string): Mencari suatu ekspresi teks untuk suatu rangkaian karakter dan, jika ditemukan, digantikan dengan rangkaian yang telah ditentukan.
 Contoh:
  • LOWER (‘SQL Course’)  sql course
  • UPPER (‘SQL Course’)  SQL COURSE
  • INITCAP (‘SQL Course’)  Sql Course
  • CONCAT(‘Halo’, ‘Dunia’)  HaloDunia
  • SUBSTR (‘HaloDunia’,1,4)  Halo
  • LENGTH(‘HaloDunia’)  9
  • INSTR(‘HaloDunia’, ‘D’)  5
  • LPAD (salary,10,’*’)  *****24000
  • RPAD (salary,10,’*’)  24000*****
  • REPLACE (‘JACK and JUE’, ‘J’, ‘BL’)  BLACK and BLUE
  • TRIM(‘H’ FROM ‘HaloDunia’)  aloDunia
ROUND (column | expression, n) : Membulatkan kolom, ekspresi, atau nilai posisi ken desimal atau, jika n dihilangkan, tidak  ada posisi desimal ( Jika n adalah negatif, angka angka di kiri dari desimal dibulatkan.)
TRUNC (column | expression, n) : Memotong kolom, ekspresi, atau nilai posisi ken desimal atau, jika n dihilangkan, n defaultnya nol
MOD (m, n) : Mengembalikan sisa dari m yang dibagi oleh n
Contoh:
ROUND (45.926, 2)  45.93
TRUNC (45.926, 2)  45.92
MOD (1600, 300)  100


  Format Tanggal Oracle
Database Oracle menyimpan tanggal tanggal dalam suatu format angka sendiri, yang menunjukkan abad, tahun, bulan, hari, jam, menit, dan detik. Tampilan default dan format inputan untuk setiap tanggal adalah DD-MON-RR. Tanggal Oracle berlaku antara January 1,4712 B.C. (1 Januari 4712 S.M.) dan December 31, 9999 A.D. (31 Desember 9999 M.). Contoh:
SELECT last_name, hire_date
FROM employee
WHERE hire_date < ’01-FEB-88’;

  Fungsi SYSDATE
SYSDATE adalah fungsi tanggal yang mengembalikan tanggal dan waktu server database saat ini.
Contoh
Menampilkan tanggal saat ini menggunakan tabel DUAL.
SELECT SYSDATE FROM DUAL;

  Aritmatika pada Dates
·         Menambah atau mengurangkan suatu angka ke atau dari suatu tanggal yang menghasilkan nilai date.
·         Mengurangkan dua tanggal untuk mencari angka dari hari hari antara tanggal tanggal tersebut.
·         Menambah jam ke suatu tanggal dengan membagi suatu angka dari jam dengan 24.

  Dates Functions
Date function bekerja pada tanggal –tanggal Oracle. Semua date function mengembalikan suatu nilai dengan tipe data DATE kecuali MONTHS_BETWEEN,yang mengembalikan nilai numerik.
·         MONTHS_BETWEEN (date1, date2) : Mencari jumlah bulan diantara date1 dan date2. Hasilnya bisa jadi positif atau negatif. Jika date1 lebih awal daripada date2, hasilnya adalah positif ; jika date1 lebih awal daripada date2, hasilnya adalah negatif . Sebagian dari hasil bukan bilangan bulat (noninteger) menunjukkan suatu bagian dari bulan.
·         ADD_MONTHS (date, n) : Menambahkan n jumlah suatu bulan kalender ke date. Nilai dari n harus bilangan bulat (integer) dan bisa negatif.
·         NEXT_DAY (date, ’char’) : (‘char’) setelah date menemukan suatu tanggal dari suatu hari tertentu pada suatu minggu. Nilai dari char bisa angka yang mewakili suatu hari atau suatu karakter string.
·         LAST_DAY (date) : Mencari hari terakhir dari suatu tanggal dalam suatu bulan yang berisi date.
·         ROUND (date[,’fmt’] ) : Mengembalikan pembulatan date ke suatu unit yang ditentukan oleh model format fmt. Jika model format fmt dihilangkan, date dibulatkan ke hari terdekat.
·         TRUNC (date[,’fmt’] ) : Mengembalikan date dengan bagian suatu waktu dari suatu hari yang dipotong ke unit yang ditentukan oleh model format fmt. Jika model format fmt dihilangkan , date dipotong ke hari terdekat.
  Conversion Functions
Disamping tipe data tipe data Oracle, kolom kolom dari table table di dalam Oracle dapat
didefinisikan menggunakan tipe data tipe data ANSI, DB2, dan SQL/DS. Meskipun demikian, server Oracle secara internal merubah tipe data tipe data yang sama dengan tipe data tipe data Oracle.
Dalam beberapa kasus, server Oracle menggunakan data dari suatu tipe data dimana server Oracle memperkirakan data dari suatu tipe data yang lain. Ketika ini terjadi, server Oracle dapat secara otomatis mengubah suatu data ke tipe data yang diperkirakan. Perubahan tipe data ini bisa jadi dilakukan secara implisit (implicitly) oleh server Oracle atau secara eksplisit (explicitly) oleh user.
Konversi konversi tipe data implisit bekerja menurut aturan aturan yang dijelaskan dalam slide berikutnya.
Konversi konversi tipe data eksplisit dilakukan dengan menggunakan conversion functions.
Conversion functions merubah suatu nilai dari suatu tipe data ke tipe data lain. Umumnya, bentuk dari nama nama fungsi mengikuti konvensi (kesepakatan) data type TO data type. Tipe data yang pertama adalah tipe data input;tipe data yang kedua adalah output.
Catatan : Meskipun disediakan konversi tipe data implisit, Anda diijinkan melakukan konversi tipe data eksplisit untuk memastikan kebenaran pernyataan SQL Anda.


  Konversi Tipe Data Implisit
Untuk penugasan penugasan, server Oracle dapat secara otomatis mengkonversi berikut ini :
Dari varchar2 ke number
Dari varchar2 ke date
Dari number ke varchar2
Dari date ke varchar2


PERMASALAHAN
1.      Tampilkan lastname, firstname, tanggalbirthdate, bulanbirthdate, dan tahunbirthdate untuk employee yang memiliki bulan lahir lebih dari Maret. 
2.      Tampilkan lastname, firstname, birthdate, usiatahunini, dan nextusia dari tabel employee.
3.      Tampilkan productid, productname dan unitprice, dimana unitprice adalah diantara 2 buah inputan user. (batas awal, dan batas akhir).
4.      Tampilkan productid, productname, unitprice, dan unitprice after discount. Dengan syarat sebagai berikut,

unitprice 1 - 5, maka discount 10%.
unitprice 6 - 10, maka discount 15%.
unitprice 11 - 15, maka discount 20%.
unitprice 16 - 20, maka discount 25%.
unitprice 21 - 25, maka discount 30%.
Gunakan (case).
contoh unitprice = 18, maka harga setelah diskon adalah 13 
5.      Tampilkan contactname customers, hanya nama depannya saja.
Misal : Maria Anders, menjadi : Maria. 
6.      Menampilkan firstname, lastname, bulanbirthdate dimana bulan birthdatenya adalah bulan saat ini (april).





BAB III
PENYELESAIAAN

1.         SELECT LASTNAME, FIRSNAME, TO_CHAR(BIRTHDATE,’DD’), TO_CHAR(BIRTHDATE,’MON’), TO_CHAR(BIRTHDATE,’YYYY’)
            FROM EMPLOYEES           
            WHERE TO_CHAR(BIRTHDATE,’MON’) NOT IN(‘JAN’,’PEB’,’MAR’);


2.         SELECT  LASTNAME, FIRSTNAME, BIRTHDATE, ROUND(TO_CHAR(SYSDATE-BIRTHDATE)/365,0) AS “USIA TAHUN INI”, ROUND(TO_CHAR(SYSDATE-BIRTHDATE)/365,0)+1 AS “NEX USIA”
            FROM EMPLOYEES;

3.         SELECT PRODUCTID, PRODUCTNAME, UNITPRICE
            FROM EMPLOYEES
            WHERE UNITPRICE BETWEEN &UNITPRICE1 AND &UNITPRICE2;

4.         SELECT PRODUCTID, PRODUCTNAME, UNITPRICE
            CASE WHEN UNITPRICE <=5 THEN 0.10*UNITPRICE
            WHEN UNITPRICE <=5 THEN 0.15*UNITPRICE
            WHEN UNITPRICE <=5 THEN 0.20*UNITPRICE
            WHEN UNITPRICE <=5 THEN 0.25*UNITPRICE
            WHEN UNITPRICE <=5 THEN 0.30*UNITPRICE
            ELSE UNITPRICE END “UNITPRICE AFTER DISCOUNT”
FROM PRODUCTS;


5.         SELECT SUBSTR(CONTACTNAME,1, INSTR(CONTCATNAME,’ ‘))
            FROM CUSTOMERS;
6.         SELECT FIRSTNAME, LASTNAME, TO_CHAR(BIRTHDATE,’MONTH’)
FROM EMPLOYEES
WHERE TO_CHAR(BIRTHDATE, ‘MON’) = TO_CHAR(SYSDATE,’MON’);