Minggu, 09 Januari 2011

PENGANTAR DASAR DATABASE 2

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.
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
Tabel Alias b
 
Tabel Alias a
 
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

1 komentar: