Teknologi & Informasi

Teknologi & Informasi

Rabu, 01 November 2017

Dasar - Dasar ORACLE (Seri 12)


Query Join dalam Oracle.


Joins

Join adalah query yang menggabungkan baris dari dua atau lebih tabel. Oracle melakukan join setiap kali beberapa tabel muncul dalam query FROM clause. Query dapat memilih kolom dari salah satu tabel ini. Jika dua dari tabel ini memiliki nama kolom yang sama, Anda harus memenuhi syarat semua referensi ke kolom ini, sepanjang query dengan nama tabel untuk menghindari ketidakjelasan / ambigu.

Kondisi Join.

Kebanyakan join query mengandung kondisi WHERE clause yang membandingkan dua kolom, masing-masing dari tabel yang berbeda. Kondisi seperti ini disebut kondisi join. Untuk menjalankan join, Oracle menggabungkan pasangan baris, masing-masing berisi satu baris dari setiap tabel, dimana kondisi join mengevaluasi TRUE. Kolom dalam kondisi join dapat juga tidak muncul dalam daftar tampilan.


Equijoins

Equijoin adalah join dengan kondisi join yang mengandung operator kesetaraan (=). Equijoin menggabungkan baris yang memiliki nilai setara untuk kolom yang ditentukan.

Misalnya query berikut mengembalikan nama empno, nama, sal, deptno dan jurusan dan kota dari tabel departemen.

select emp.empno,emp.ename,emp.sal,emp.deptno,dept.dname,dept.city from employee,dept where employee.deptno=dept.deptno;

Query di atas juga bisa ditulis seperti, menggunakan alias, seperti di bawah ini.

select e.empno, e.ename, e.sal, e.deptno, d.dname, d.city from employee e, dept d where emp.deptno=dept.deptno;

Query di atas juga bisa ditulis seperti yang diberikan di bawah ini tanpa menggunakan tabel kualifikasi.

select empno,ename,sal,dname,city from employee,dept where employee.deptno=dept.deptno;

Dan jika Anda ingin melihat semua kolom dari kedua tabel maka query bisa ditulis seperti ini.

select * from employee,dept where emp.deptno=dept.deptno;


Non Equi Joins.

Non equi join digunakan untuk mengembalikan hasil dari dua atau lebih tabel dimana join secara langsung tidak mungkin dilakukan.


Misalnya kita memiliki tabel employee dan tabel salgrade. Tabel salgrade berisi tingkatan gaji rendah dan gaji tinggi. Misalkan anda ingin mencari nilai karyawan berdasarkan gaji mereka maka anda bisa menggunakan NON EQUI join.

select e.empno, e.ename, e.sal, s.grade from employee e, salgrade s
     where e.sal between s.lowsal and s.hisal

Self Joins.

Self Joins adalah bergabung dengan tabel untuk dirinya sendiri. Tabel ini muncul dua kali pada klausa FROM dan diikuti oleh tabel alias yang memenuhi syarat nama kolom dalam kondisi join. Untuk melakukan join sendiri, Oracle menggabungkan dan mengembalikan deretan tabel yang memenuhi kondisi join.

Misalnya query berikut mengembalikan nama karyawan dan nama manajer mereka untuk siapa mereka bekerja.

Select e.empno, e.ename, m.ename  “Manager” from employee e,
      employee m where e.mgrid=m.empno


Inner Join.

Inner Join (kadang disebut "simple join") adalah gabungan dari dua atau lebih tabel yang mengembalikan hanya baris yang memenuhi kondisi join.


Outer Joins.

Sebuah outer join mengembalikan semua baris yang memenuhi kondisi join dan juga mengembalikan beberapa atau semua baris dari satu tabel yang tidak memiliki baris dari yang lain memenuhi kondisi join.

~ Untuk menulis sebuah query yang melakukan join outer dari tabel A dan B dan mengembalikan semua baris dari A (join outer kiri), gunakan sintaks ANSI LEFT [OUTER] JOIN, atau gunakan outer join operator (+) ke semua kolom dari B dalam kondisi join. Untuk semua baris di A yang tidak memiliki baris yang cocok di B, Oracle mengembalikan null untuk setiap ekspresi daftar pilih yang berisi kolom B.

~ Untuk menulis sebuah query yang melakukan join outer dari tabel A dan B dan mengembalikan semua baris dari B (join outer kanan), gunakan sintaks ANSI RIGHT [OUTER], atau gunakan outer join operator (+) ke semua kolom A dalam kondisi join. Untuk semua baris di B yang tidak memiliki baris yang cocok di A, Oracle mengembalikan null untuk setiap ekspresi daftar pilih yang berisi kolom A.

~ Untuk menulis sebuah query yang melakukan join luar dan dan mengembalikan semua baris dari A dan B, diperpanjang dengan null jika mereka tidak memenuhi kondisi join (join outer penuh), gunakan sintaks ANSI FULL [OUTER] JOIN.

Misalnya, kueri berikut mengembalikan semua nama karyawan dan departemen dan bahkan nama departemen tempat tidak ada karyawan yang bekerja.

select e.empno,e.ename,e.sal,e.deptno,d.dname,d.city from employee e, dept d 
    where e.deptno(+)=d.deptno;

tanda (+)  itu adalah menentukan ke kolom yang nilainya kurang.


Cartesian Products.

Jika dua tabel dalam query join tidak memiliki kondisi join, Oracle mengembalikan produk Cartesian mereka. Oracle menggabungkan setiap baris dari satu meja dengan setiap baris yang lain. Produk Cartesian selalu menghasilkan banyak baris dan jarang berguna. Misalnya, produk Cartesian dari dua tabel, masing-masing dengan 100 baris, memiliki 10.000 baris. Selalu sertakan syarat bergabung kecuali Anda secara khusus memerlukan produk Cartesian.


Sumber : Disini

Semoga bermanfaat.

Note : Mau uji coba database Oracle download disini.

Oracle Win64

Best Regards









Dasar - Dasar ORACLE (Seri 11)


Format Tanggal (Date) di Oracle.


Operator dan Fungsi Tanggal (Date).
Untuk melihat tanggal dan waktu sistem gunakan fungsi berikut:

CURRENT_DATE: mengembalikan tanggal saat ini di zona waktu sesi, dalam nilai dalam kalender jenis data dari Gregorian tipe data tanggal(Date).

SYSDATE: Mengembalikan tanggal dan waktu sekarang.

SYSTIMESTAMP: Fungsi SYSTIMESTAMP mengembalikan tanggal sistem, termasuk fraksional detik dan zona waktu dari database Tipe kembaliannya adalah TIMESTAMP WITH TIME ZONE.


Contoh SYSDATE 
Untuk melihat tanggal dan waktu sistem saat ini, gunakan query  seperti berikut ini :

select sysdate from dual;

SYSDATE
-------
8-AUG-03

Format tanggal tanggal ditampilkan bergantung pada parameter NLS_DATE_FORMAT.

Misalnya atur NLS_DATE_FORMAT ke format berikut

alter session set NLS_DATE_FORMAT=’DD-MON-YYYY HH:MIpm’;

Kemudian berikan pernyataan berikut

select sysdate from dual;

SYSDATE
------------------
8-AUG-2003 03:05pm

Pengaturan standar NLS_DATE_FORMAT adalah DD-MON-YY


Contoh CURRENT_DATE
Untuk melihat tanggal dan waktu sistem saat ini dengan zona waktu gunakan fungsi CURRENT_DATE


ALTER SESSION SET TIME_ZONE = '-4:0';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE CURRENT_DATE
--------------- --------------------
-04:00          22-APR-2003 14:15:03

ALTER SESSION SET TIME_ZONE = '-7:0';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE CURRENT_DATE
--------------- --------------------
-07:00          22-APR-2003 09:15:33


Contoh SYSTIMESTAMP
Untuk melihat tanggal dan waktu sistem saat ini dengan pecahan detik dengan zona waktu gunakan query berikut :


select systimestamp from dual;

SYSTIMESTAMP
-------------------------------
22-APR-03 08.38.55.538741 AM -07:00


MODEL FORMAT DATE
Untuk menerjemahkan tanggal ke format yang berbeda, anda dapat menggunakan fungsi TO_CHAR dengan format tanggal. Misalnya untuk melihat hari ini anda bisa memberikan query berikut ini : 

Select to_char(sysdate,’DAY’)”Today” FROM DUAL;

TODAY
-------
THURSDAY

Untuk menerjemahkan nilai karakter, yang dalam format selain format tanggal default, ke nilai tanggal, Anda dapat menggunakan fungsi TO_DATE dengan format tanggal sampai saat ini.


Seperti model format "DAY" ini, ada banyak model format tanggal lainnya yang tersedia di Oracle. Berikut daftar-daftar model format tanggal (date).

FORMAT
Definisi
DHari di minggu ini
DDHari dalam sebulan
DDDHari dalam setahun
DAYHari penuh untuk  'Senin Selasa Rabu'
DYHari dalam tiga huruf contoh 'MON', 'TUE', 'FRI'
WMinggu dalam sebulan
WWMinggu dalam setahun
MMBulan dalam dua digit  (1-Jan, 2-Feb,…12-Dec)
MONBulan dalam tiga karakter seperti “Jan”, ”Feb”, ”Apr”
MONTHBulan Penuh seperti “January”, ”February”, ”April”
RMBulan dalam Karakter Romawi (I-XII, I-Jan, II-Feb,…XII-Dec)
QKuartal Bulan Ini
YYDua digit terakhir tahun ini.
YYYYSetahun penuh
YEARTahun dalam kata-kata seperti “Nineteen Ninety Nine”
HHJam dalam format 12 jam
HH12Jam dalam format 12 jam
HH24Jam dalam format 24 jam
MIMenit
SSDetik
FFPecahan Detik
SSSSSMilidetik
JHari Julian Hari ini sejak 1 Januari sampai 4712BC sampai sekarang
RRJika tahun ini kurang dari 50 Asumsikan tahun itu sebagai 21st Century. Jika tahun lebih besar dari 50 maka diasumsikan tahun di abad 20.

suffixes


THMengembalikan th, st, rd atau nd sesuai nomor terdepan seperti 1st, 2nd 3rd 4th
SPKata nomor terkemuka
AM or PMMengembalikan AM atau PM sesuai dengan waktu
SPTHMengembalikan Angka Orisinal yang Lisan. Untuk. Contoh Pertama, Keempat

Misalnya untuk melihat tanggal hari ini dalam format berikut : 

Friday, 7th March, 2014
Berikan pernyataan sebagai berikut : 

select to_char(sysdate,’Day, ddth Month, yyyy’)”Today” from dual;

TODAY
------------------------
Friday, 7th March, 2014 

Misalnya Anda ingin melihat tanggal peminjaman semua karyawan dalam format berikut : 

Friday, 8th August, 2003 

Kemudian berikan query sebagai berikut : 

select to_char(hire_date,’Day, ddth Month, yyyy’) from employee;


Contoh TO_DATE

Fungsi to_Date digunakan untuk mengubah string menjadi nilai tanggal. Misalnya Anda ingin melihat apa yang terjadi pada 15-aug-1947. Penggunaan fungsi to_date untuk pertama kali mengubah string menjadi nilai tanggal dan kemudian meneruskan nilai ini ke fungsi to_char untuk mengekstrak hari, seperti contoh dibawah ini : 

select to_char(to_date(’15-aug-1947’,’dd-mon-yyyy’),’Day’) 
                                         from dual;

TO_CHAR(
--------
Friday

Untuk melihat berapa hari telah berlalu sejak 15-aug-1947 maka berikan Query berikut :

select sysdate-to_date(’15-aug-1947’,’dd-mon-yyyy’) from dual;
Sekarang kita ingin melihat tanggal mana yang akan terjadi setelah 45 hari dari sekarang

select sysdate+45 from dual;

SYSDATE
-------
06-JUN-2003



ADD_MONTHS

Untuk melihat tanggal mana yang akan terjadi setelah 6 bulan dari sekarang, kita bisa menggunakan fungsi ADD_MONTHS, seperti contoh dibawah ini : 

Select ADD_MONTHS(SYSDATE,6) from dual;

ADD_MONTHS
----------
22-OCT-2003




MONTHS_BETWEEN

Untuk melihat berapa bulan telah berlalu sejak tanggal tertentu, gunakan fungsi MONTHS_BETWEEN.


Sebagai contoh, untuk melihat berapa bulan telah berlalu sejak 15-aug-1947, berikan query sebagai berikut : 

select months_between(sysdate,to_date(’15-aug-1947’)) 
                             from dual;

Months
------
616.553


Untuk menghilangkan nilai desimal gunakan fungsi truncate, seperti dibawah ini : 

select trunc(months_between(sysdate,to_date(’15-aug-1947’)))
                             from dual;

Months
------
616




LAST_DAY

Untuk melihat tanggal terakhir bulan dari tanggal tertentu, Gunakan fungsi LAST_DAY, seperti contoh dibawah ini : 

select LAST_DAY(sysdate) from dual;

LAST_DAY
--------
31-AUG-2003




NEXT_DAY

Untuk melihat kapan hari tertentu akan datang berikutnya, gunakan fungsi NEXT_DAY.


Sebagai contoh untuk melihat kapan hari Sabtu depan akan tiba, berikan query sebagai berikut : 

select next_day(sysdate) from dual;

NEXT_DAY
-----------
09-AUG-2003



EXTRACT

Fungsi datetime EXTRACT mengekstrak dan mengembalikan nilai bidang datetime tertentu dari ekspresi nilai datetime atau interval. Saat Anda mengekstrak TIMEZONE_REGION atau TIMEZONE_ABBR (singkatan), nilai yang dikembalikan adalah string yang berisi nama zona waktu atau singkatan yang sesuai.


Query fungsi EKSTRAK adalah sebagai berikut : 

EXTRACT ( YEAR / MONTH / WEEK / DAY / HOUR / MINUTE / TIMEZONE  FROM DATE)

Contoh Berikut ini menunjukkan penggunaan fungsi EKSTRAK untuk mengambil tahun dari tanggal sekarang. seperti query dibawah ini : 

select extract(year from sysdate) from dual;

EXTRACT
-------
2003



Sumber : Disini

Semoga bermanfaat.

Note : Mau uji coba database Oracle download disini.

Oracle Win64

Best Regards