Fungsi-fungsi pada SQL
DUAL
DUAL adalah sebuah built-in tabel yang disediakan oleh Oracle untuk memproses ekspresi aritmatika, logika, tanggal dan lain sebagainya.
Contoh :
SQL > SELECT 10 * 12 – 2 FROM DUAL;
Menampilkan hasil operasi aritmatika 10 * 12 – 2
SQL > SELECT sysdate FROM DUAL;
Menampilkan tanggal hari ini
GROUP BY … HAVING ….
GROUP BY …. HAVING … digunakan untuk menyeleksi himpunan yang dihitung berdasarkan sebuah fungsi agregasi (agregate function) sesuai dengan kondisi yang didefinisikan setelah HAVING.
SELECT fungsi_agregasi, ..
FROM nama_tabel
GROUP BY nama_field
[HAVING kondisi];
Aggregate Function
AVG (Average / rata - rata)
AVG berfungsi untuk mengembalikan nilai rata – rata dari sekumpulan nilai yang terdapat pada sekumpulan nilai record pada sebuah field.
Contoh :
SQL > SELECT AVG(donasi) Donasi FROM keuangan;
Donasi : merupakan alias dari hasil fungsi AVG(donasi)
Queri diatas digunakan untuk menampilkan donasi rata – rata mahasiswa yang terdapat di dalam tabel keuangan.
MAX (Maximum)
MAX berfungsi untuk mengembalikan nilai maksimum yang terdapat pada sekumpulan nilai pada sebuah field.
Contoh :
SQL > SELECT MAX(donasi) “Donasi Terbesar”
FROM keuangan;
Donasi Terbesar : merupakan alias dari hasil fungsi MAX(donasi)
Queri diatas digunakan untuk menampilkan nilai donasi yang paling besar di dalam tabel keuangan.
MIN (Minimum)
MIN berfungsi untuk mengambil nilai minimum yang terdapat pada sekumpulan nilai pada sebuah field.
Contoh :
SQL > SELECT MIN(donasi) “Donasi Terkecil”
FROM keuangan;
Donasi Terkecil : merupakan alias dari hasil fungsi MIN(donasi)
Queri diatas digunakan untuk menampilkan nilai donasi yang paling kecil di dalam tabel keuangan.
SUM (jumlah / sigma)
SUM berfungsi untuk menghitung jumlah total nilai pada sebuah kolom tertentu.
Contoh :
SQL > SELECT SUM(donasi) “Total donasi” FROM keuangan;
Queri diatas digunakan untuk menampilkan total jumlah donasi untuk seluruh mahasiswa pada tabel keuangan.
COUNT (banyak record)
COUNT berfungsi untuk menghitung jumlah record yang memenuhi kondisi tertentu.
COUNT berfungsi untuk menghitung jumlah record yang memenuhi kondisi tertentu.
Contoh :
SQL > SELECT COUNT(*) “Donasi Manajemen Informatika”
FROM keuangan
WHERE nim like ‘3010%’;
Queri diatas digunakan untuk menampilkan jumlah mahasiswa Manajemen Informatika yang memberikan donasi.
Built-In Function Oracle
Built-In Function adalah fungsi yang disediakan oleh Oracle agar dapat digunakan di dalam SQL *Plus maupun oleh program eksternal.
Fungsi ini terdiri dari beberapa kelompok, yaitu :
Fungsi Aritmatika
Fungsi | Kegunaan | Contoh |
ABS | Mengembalikan nilai absolute | ABS(-10) = 10 |
CEIL | Mengembalikan bilangan bulat terbesar | CEIL(4.2) = 5 CEIL(-4.2) = -4 |
EXP | Mengembalikan nilai pemangkatan bilangan natural (ex) | EXP(0) = 1 EXP(1) = 2.718 |
FLOOR | Mengembalikan bilangan bulat terkecil | FLOOR(4.2) = 4 FLOOR(-4.2) = -5 |
LN | Mengembalikan nilai logaritma natural | LN(2) = 0.693147181 |
LOG | Mengembalikan nilai logaritma | LOG(10,10) =1 |
MOD | Menghasilkan sisa pembagian | MOD(4,2) = 0 MOD(7,2) = 1 |
POWER | Mengembalikan nilai pangkat | POWER(2,3) = 8 |
ROUND | Mengembalikan bilangan pembulatan | ROUND(5.56,1) = 5.6 |
SIGN | Mengembalikan nilai positif, negative, atau nol. Nilai balikan sign ada tiga yaitu 1 jika x>0 0 jika x=0 -1 jika x<0 | SIGN(-6) = -1 SIGN(3) = 1 |
SIN, COS, TAN, SINH, COSH,TANH | Fungsi trigonometri | SIN(0) = 0 COS(90) = 0 |
SQRT | Mengembalikan nilai akar | SQRT(16) = 4 |
TRUNC | Mengembalikan nilai yang telah dipotong | TRUNC(5.671,2) = 5.67 |
Fungsi Karakter / String
Fungsi | Kegunaan | Contoh |
ASCII(karakter) | Memgembalikan nilai ASCII dari karakter | ASCI(‘A’) = 65 |
CHR(nilai_ASCII) | Memgembalikan karakter dari sebuah nilai ASCII | CHR(65) = ‘A’ |
CONCAT(teks1, teks2) | Menggabungkan teks1 dan teks2 | CONCAT (“sate”, ”ayam”) = “sate ayam” |
DECODE(field, kode_decode) | Menggantikan nilai yang terdapat di dalam field dengan nilai lain. | DECODE(bulan,1, ‘Januari’, 2,’Februari’, 3,’Maret’, 4,’April’, 5,’Mei’, 6,’Juni’, ‘Bulan Lain’ ) bulan |
GREATEST(nilai1, nilai2, nilai3, …) | Mengembalikan nilai terbesar dari sederetan nilai | GREATEST (3,10,15,4) = 15 |
INITCAP(String) | Mengembalikan string yang terdiri dari huruf kapital pada setiap kata. | INITCAP(‘pOLItekNik tElkoM’) = Politeknik Telkom |
INSTR (teks1, teks2) INSTR(teks1, teks2, i) INSTR(teks1, teks2, 1, n) | Mencari posisi teks2 yang terdapat di dalam teks1. Pencarian dapat dimulai dari posisi ke-i. n menyatakan pengulangan yang ke-n kali dari teks2 yang terdapat di dalam teks1. | INSTR (’SQL n PL/SQL’, ’SQL’) = 1 INSTR (’SQL n PL/SQL’, ’SQL’, 4) = 10 INSTR (’SQL n PL/SQL’, ’SQL’,1,2) = 10 |
LEAST(nila1, nilai2, nilai3,…) | Mengembalikan nilai terkecil dari sederetan nilai | LEAST(2,2,5,1,6) = 1 |
LENGTH(String) | Mengembalikan panjang String | LENGTH(“1233”) = 4 |
LOWER(String) | Mengubah String menjadi huruf kecil semuanya | LOWER (“PoLTeK”) = poltek |
LPAD (teks1, n , teks2) | Menyisipkan karakter teks2 ke dalam teks1 untuk karakter kosong sepanjang n disebelah kiri teks1 | LPAD (‘Oracle’, 10 , ‘/’) = ////Oracle |
LTRIM (teks1, teks2) | Menghapus karakter-karakter pada bagian kiri teks1 sehingga tidak diawali dengan sembarang karakter pada teks2. Default teks2 adalah spasi | LTRIM (‘xxxOracle’,’x’) = Oracle |
REPLACE (teks1, teks2, teks3) | Menggantikan kemunculan karakter teks2 di dalam teks1 dengan teks3. Bila teks3 tidak disebutkan maka teks2 pada teks1 akan dihapus karena default teks3 null | REPLACE (‘siswa’,’a’,’i’) = siswi |
RPAD (teks1, n, teks2) | Menyisipkan karakter teks2 ke dalam teks1 untuk karakter kosong sepanjang n disebelah kanan teks1 | RPAD (‘Oracle’, 10 , ‘/’) = Oracle//// |
RTRIM (teks1, teks2) | Menghapus karakter-karakter pada bagian kanan teks1 sehingga tidak diakhiri dengan sembarang karakter pada teks2. Default teks2 adalah spasi | RTRIM ('123000', '0') = 123 |
SUBSTR(Teks,i) SUBSTR(Teks, i, n) | Mengambil karakter pada string teks dimulai dari posisi ke-i (dari kiri ke kanan) sebanyak n buah. Jika i bernilai negatif, maka posisi ke-i dimulai dari kanan ke kiri | SUBSTR(“ABCD”, 2) = “BCD” SUBSTR (“ABCD”, -3, 2 ) = “BC” |
TRANSLATE (teks1, teks2, teks3) | Menggantikan kemunculan karakter teks2 di dalam teks1 dengan teks3. perbedaannya dengan REPLACE adalah karakter yang digantikan dilakukan secara individual | |
UPER(String) | Mengubah String menjadi huruf besar semuanya | UPER(“PoLTeK”) = POLTEK |
Fungsi Tanggal
Fungsi | Kegunaan | Contoh |
ADD_MONTHS (tanggal, n) | Menambah atau mengurangi tanggal terhadap n | sysdate =06-JUL-05 ADD_MONTHS (sysdate, 2) = 08-JUL-05 ADD_MONTHS (sysdate, -2) = 04-JUL-05 |
LAST_DAY (tanggal) | Menghasilkan tanggal terakhir pada sebuah bulan | LAST_DAY (sysdate) = 31-JUL-05 |
MONTHS_BETWEEN (tanggal 2, tanggal1) | Mengahsilkan selisih tanggal2 dan tanggal1 dalam satuan bulan | MONTHS_BETWEEN (‘01-JUL-05’, ‘14-MAR-05’) = 3.58064516129032 |
NEXT_DAY() | Mengembalikan tanggal berikutnya | NEXT_DAY() = 07-JUL-05 |
TO_CHAR (tanggal, format) | Mengubah tanggal menjadi bentuk karakter sesuai dengan format. Sehingga dapat ditampilkan sebagai string | TO_CHAR (sysdate, ‘DD-MM-YYYY’) = 06-07-2006 |
Join Tabel
JOIN adalah menggabungkan beberapa tabel dangan cara mengakses setiap tabel secara individu berdasarkan kondisi yang diberikan, kemudian hasilnya digabungkan.
Syarat penggunaan JOIN adalah harus terdapat hubungan / keterkaitan diantara tabel – tabel yang dijadikan sumber dari kolom – kolom yang hendak di join dan ditampilkan. Keterkaitan diatara tabel – tabel berupa kolom – kolom yang memiliki nilai dan tipe data yang sama.
Join dimungkinkan dikarenakan oleh model relasional, begitu juga sebaliknya, join dibutuhkan dikarenakan model relational. Join sebetulnya secara umum terbagi dalam 3 jenis: cartesian product, join condition dan outer join.
Cartessian Product
Cartessian product merupakan himpunan dari hasil kombinasi yang memungkinkan dari baris-baris data dari 2 tabel atau lebih. Cartessian product merupakan join tanpa menggunakan join condition. Dengan demikian, sebuah baris pada tabel yang satu akan digabungkan dengan semua baris pada tabel yang lain, seterusnya sehingga jumlah baris hasil query menjadi ( n1* n2 *...*nn ) dengan ni adalah jumlah baris pada tabel ke-i. Jumlah baris hasil query yang merupakan hasil perkalian dari jumlah baris dari tabel-tabel inilah yang disebut dengan produk kartesian (cartesian product).
Contoh : Misalkan ilustrasi sebagai berikut
Tabel A Tabel B
A1 | A2 |
1 | 10 |
2 | 100 |
B1 | B2 |
2 | 4 |
3 | 9 |
Jika kita melakukan operasi seperti ini:
SELECT * FROM A, B;
maka akan dihasilkan Cartesian Product.
Tabel Produk Cartesian
A1 | A2 | B1 | B2 |
1 | 10 | 2 | 4 |
1 | 10 | 3 | 9 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
Untuk menghindari hal seperti ini, paling tidak terdapat sebuah join condition pada query yang melakukan join terhadap kedua tabel tersebut dengan catatan join condition tersebut valid.
Join Condition
Join condition menspesifikasikan kondisi join dari beberapa tabel. Seperti telah disinggung sebelumnya, join biasanya selalu melibatkan kolom-kolom yang terdapat pada tabel yang terlibat join yang memiliki kesamaan dan keserupaan maksud representasi dari kolom tersebut.
Equjoin/simple join/inner join adalah join yang menggunakan operator sama dengan (=) pada join condition-nya.
Contoh : Misalnya jika kita melakukan operasi
SELECT * FROM A, B WHERE A.A1 = B.B1
Maka akan dihasilkan sbb:
A1 | A2 | B1 | B2 |
2 | 100 | 2 | 4 |
Dari hasil operasi join tersebut dapat terlihat bahwa hanya nilai-nilai dari field A1 pada tabel A dan nilai-nilai field B1 pada tabel B yang bersesuaian yang ditampilkan. Dalam skenario ini adalah A1=B1=2.
Non-Equjoin adalah sebuah join yang menggunakan join condition yang berisi operator selain sama dengan (=) misalnya operator BETWEEN...AND
Self Join adalah query yang menggabungkan sebuah tabel dengan dirinya sendiri. Tabel tersebut muncul dua kali pada klausa from dan masing-masing harus diikuti dengan nama aliasnya. Penggunaan tabel alias ini wajib dilakukan untuk menghindari ambiguous karena semua nama kolom pada tabel pertama ada juga pada tabel kedua.
Contoh:
Misalkan terdapat tabel C sebagai berikut
Tabel C
C1 | C2 | C3 | C4 |
1 | 10 | 2 | 4 |
1 | 10 | 3 | 9 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
Jika dilakukan perintah:
SELECT a.C1,a.C2,a.C3,a.C4 FROM C a, C b WHERE a.C1=b.C3
Dari skenario ini dapat dibayangkan kita memiliki dua buah tabel yang identik yaitu tabel alias a dan tabel alias b. Dimana operasi yang dilakukan dapat digambarkan sebagai berikut:
Tabel C
C1 | C2 | C3 | C4 |
1 | 10 | 2 | 4 |
1 | 10 | 3 | 9 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
|
|
C1 | C2 | C3 | C4 |
1 | 10 | 2 | 4 |
1 | 10 | 3 | 9 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
C1 | C2 | C3 | C4 |
1 | 10 | 2 | 4 |
1 | 10 | 3 | 9 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
Maka akan dihasilkan seperti ini
C1 | C2 | C3 | C4 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
2 | 100 | 2 | 4 |
2 | 100 | 3 | 9 |
Outer Join
Outer join biasanya digunakan ketika kita ingin baris data dari tabel yang pertama, atau dari tabel yang kedua atau dari keduanya tetap ditampilkan meskipun tidak terdapat pasangan baris data tersebut dari tabel lain pada kondisi join-nya. Misalkan tabel A di-join dengan tabel B. Semua baris data pada tabel A ingin ditampilkan walaupun tidak memenuhi join condition. Untuk itu, operator outer join (+) pada join condition harus disertakan setelah kolom-kolom tabel B. Penulisan operator join dapat ditulis sebagai berikut.
A.col_name = B.col_name(+)
Dalam hal ini, tabel B akan memberikan nilai NULL untuk setiap baris pada tabel A jika join condition tidak terpenuhi.
Contoh :
Misalnya jika kita melakukan operasi SELECT * FROM A, B WHERE A.A1 = B.B1(+) maka akan dihasilkan
A1 | A2 | B1 | B2 |
1 | 10 | NULL | NULL |
2 | 100 | 2 | 4 |
Pada outer join ada beberapa aturan yang perlu diperhatikan :
· Operator “+” hanya boleh ada pada klausa WHERE dan hanya dapat dikenakan pada kolom dari tabel atau view.
· Jika terdapat lebih dari satu join condition, operator “+” harus dikenakan pada semua join condition tersebut. Jika tidak, hasilnya dengan inner join.
· Jika ada kondisi yang mengandung kolom tabel B dan kolom tersebut dibandingkan dengan sebuah nilai konstan, operator “+” harus dikenakan pada kolom tersebut. Misalkan:
SELECT * FROM A, B WHERE A.A1 = B.B1(+) and B.B1(+) > 0;
· Kondisi yang mengandung operator “+” tidak boleh dikombinasikan dengan logika OR dan IN.
· Kolom dengan operator “+” tidak boleh dibandingkan dengan hasil subquery. Misalkan:
SELECT * FROM A, B WHERE A.A1 = B.B1(+) and B.B1(+) > (SELECT C4 FROM C WHERE C4=2);
· Untuk query yang menggunakan outer join dan melibatkan lebih dari dua tabel, misalnya tabel A, B, dan C, maka tabel yang satu hanya dapat men-generate tabel NULL untuk satu tabel. Dengan demikian, operator “+” tidak dapat dikenakan pada kolom tabel B untuk dua buah join condition: A join B dan C join B. Misalkan:
SELECT * FROM A, B WHERE A.A1 = B.B1(+) and C.C1=B.B1(+) ;
Kesimpulan: Operasi join digunakan untuk menampilkan data dari beberapa tabel. Ada beberapa macam operasi join, antara lain :
Operator Join | Deskripsi | Contoh |
Cartesian Product | Menampilkan data dari beberapa tabel tanpa kondisi tertentu. | SELECT NAMA_PEGAWAI, NAMA_DEPARTEMEN FROM PEGAWAI P, DEPARTEMEN D |
Join Condition | Menampilkan data dari beberapa tabel dengan kondisi tertentu | SELECT NAMA_PEGAWAI, NAMA_DEPARTEMEN FROM PEGAWAI P, DEPARTEMEN D WHERE P.NO_DEP= D.NO_DEPARTEMEN; |
Outer Join | Menampilkan data dari beberapa tabel dimana kolom yang diacu tidak memiliki anggota | SELECT P. NAMA_PEGAWAI, M. NAMA_PEGAWAI AS MANAJER FROM PEGAWAI P, PEGAWAI M WHERE P.NO_MANAJER = M.NO_PEGAWAI(+); |
Query Bersarang
Pada kondisi tertentu, terkadang beberapa query membutuhkan nilai yang dihasilkannya dan digunakan sebagai kondisi pembandingan (dalam klausa WHERE sebagai contoh). Query tersebut dapat diformulasikan menggunakan nested query (query bersarang). Query bersarang akan melibatkan query dan subquery.
Subquery merupakan statement SELECT yang bersarang didalam klausa WHERE dari statement SELECT yang lain. Meskipun jarang, tetapi subquery juga bisa terdapat pada statement DML yang lain seperti INSERT, UPDATE ataupun DELETE.
Secara umum, sintaks dari NESTED QUERY adalah:
SELECT [DISTINCT] select_list FROM table1, table_2 [,table_3 …] WHERE {expression {[NOT] IN | comparison operator} | [NOT] EXIST } ( SELECT [DISTINCT] subquery_select_list FROM table_list WHERE search_conditions ) |
Yang dilakukan oleh subquery adalah menetapkan kondisi pencarian pada klausa WHERE dalam beberapa cara:
Menghasilkan list untuk klausa IN
Mengembalikan sebuah nilai yang dapat digunakan oleh operator
Mengembalikan nilai boolean (true atau false)
Didalam sebuah SELECT statement, subquery boleh berada pada klausa-klausa berikut ini:
· Klausa WHERE
· Klausa HAVING
· Klausa FROM
· Klausa START WITH (pada query hirarki)
Sebagai catatan, subquery pada klausa WHERE sering disebut sebagai nested subquery. Sedangkan subquery pada klausa FROM sering disebut dengan istilah inline view.
Banyak permasalahan yang dapat dipecahkan dengan menggunakan subquery. Daftar berikut ini menunjukkan beberapa kegunaan subquery:
· Memberikan nilai sebagai kondisi di dalam klausa WHERE, HAVING, dan START WITH (subquery pada SELECT, UPDATE, dan INSERT statement).
· Menentukan sekumpulan baris data untuk kebutuhan membuat view (subquery pada CREATE VIEW statement).
· Mendefinisikan sebuah tabel (inline view) yang digunakan oleh query utama (subquery pada klausa FROM dari sebuah SELECT statement).
· Menentukan sekumpulan baris data yang dimasukkan ke dalam tabel tujuan, baik ke dalam tabel yang sudah ada (subquery pada INSERT statement) maupun pada saat yang bersamaan dengan pembuatan tabel (subquery pada CREATE TABLE statement).
· Mendapatkan satu nilai atau lebhih yang digunakan untuk mengubah data yang sudah ada (subquery pada UPDATE statement).
Klausa IN
Subquery yang dilakukan menggunakan klausa IN akan dilakukan pengecekan apakah suatu nilai ada atau tidak dalam hasil dari subquery.
Contoh :
SELECT A1 FROM A WHERE A1 IN (SELECT C3 FROM C)
Hasilnya sbb:
A1 | A2 |
2 | 100 |
Klausa ALL
Membandingkan nilai dengan setiap nilai yang dikembalikan oleh query tersarang. Kondisi perbandingan akan bernilai benar jika semua nilai yang dikembalikan oleh subquery memenuhi kondisi tersebut.
Contoh :
SELECT * FROM A WHERE A1 < ALL(SELECT C3 FROM C)
Hasilnya sbb:
A1 | A2 |
1 | 10 |
Klausa ANY/SOME
Membandingkan nilai dengan salah satu nilai yang dikembalikan oleh query tersarang. Kondisi perbandingan akan bernilai benar jika salah satu nilai yang dikembalikan oleh subquery memenuhi kondisi tersebut dan akan bernilai salah atau tidak terpenuhi jika subquery tidak mengembalikan nilai apapun (tabel kosong).
Contoh :
SELECT * FROM A WHERE A1 < ANY(SELECT C3 FROM C)
Hasilnya sbb:
A1 | A2 |
1 | 10 |
2 | 100 |
Klausa [NOT] EXISTS
Klausa EXISTS digunakan untuk melakukan pengecekan apakah hasil dari nested query yang berkorelasi menghasilkan baris data atau tidak. Operator exists akan menghasilkan nilai “TRUE” jika subquery yang mengikutinya menghasilkan paling tidak satu baris data.
Contoh :
SELECT * FROM A WHERE EXISTS (SELECT C3 FROM C)
Hasilnya sbb:
A1 | A2 |
1 | 10 |
2 | 100 |
sangat membantu
BalasHapus