Wednesday, March 13, 2013

SQL Inner Join




SQL INNER JOIN >>
SQL inner join adalah salah satu syntaks SQL yang berfungsi untuk menghubungkan dua tabel / merelasikan beberapa tabel yang berbeda untuk mengambil beberapa fields yang dibutuhkan. Rumus SQL inner join adalah :
Select field1.tabel1, field2.tabel1, field1.tabel2 from tabel1 inner join tabel2 on field1.tabel1 = field1.tabel2
Untuk lebih jelasnya, anggap saja kita mempunyai 3 tabel sederhana seperti berikut :

t_siswa
nim
nama
201
Annisa Nurdilla
202
Delvi Arsalwa

t_pelajaran
kode_pelajaran
mata_pelajaran
kkm
mtk
Matematika
70
bid
Bahasa Indonesia
75

t_nilai
nim
kode_pelajaran
nilai
201
mtk
80
202
mtk
75

Dari 3 buah tabel diatas, misalkan kita ingin menampilkan laporan nilai siswa, kita dapat mengambil beberapa field dari tabel t_siswa dan t_pelajaran. Tujuannya supaya laporan nilai siswa dapat ditampilkan lebih detail dan mudah dipahami. Maka syntaks nya adalah :

select t_nilai.nim, t_siswa.nama, t_pelajaran.mata_pelajaran, t_pelajaran.kkm, t_nilai.nilai from t_nilaiinner join t_siswa on t_nilai.nim = t_siswa.nim inner join t_pelajaran on t_nilai.kode_pelajaran = t_pelajaran.kode_pelajaran
Hasilnya :

nim
nama
mata_pelajaran
kkm
nilai
201
Annisa Nurdilla
Matematika
70
80
202
Anggie Sukma Dewi
Matematika
70
75

Selamat Mencoba dan berkreasi serta kembangkan logika Anda sendiri

DML ' Data Manipulation Language '



DML >>
Data Manipulation Language (DML) digunakan dalam memanipulasi dan pengambilan data pada database.
Manipulasi data, dapat mencakup:
       1. Pemanggilan data yang tersimpan dalam database (query).
       2. Penyisipan/penambahan data baru ke database.
       3. Penghapusan data dari database.
       4. Pengubahan data pada database.
Beberapa perintah dasar yang termasuk dalam DDL antara lain.

1. SELECT
Fungsi : Command SELECT ini berfungsi untuk menampilkan sesuatu. Menampilkan disini tidak hanya menampilkan data dari sebuah table saja, tetapi juga untuk menampilkan suatu ekspresi. Seperti menampilkan hanya field yang memiliki kategori Suplement saja.
Syntax : SELECT * FROM nama_tabel;
Parameter : from, order by, where, dll
Contoh : SELECT * FROM obat;
Penjelasan : perintah diatas akan menampilkan semua isi pada tabel obat.

2. DESC
Fungsi : Command DESC ini berfungsi untuk menampilkan struktur tabel yang telah dibuat. Apa saja field yang telah dibuat, type data dari field tersebut, dan primary key akan terlihat disini.
Syntax  : DESC nama_table;
Parameter : -
Contoh : DESC obat;
Penjelasan : perintah diatas akan memperlihatkan stuktur dari tabel obat yang telah dibuat.

3. INSERT INTO
Fungsi : Command INSERT INTO ini berfungsi untuk menambahkan data/record dalam suatu tabel yang telah dibuat.
Syntax : INSERT INTO nama_tabel VALUES (‘isi_field1’ , ‘isi_field2’,……);
Parameter : values, set
Contoh : INSERT INTO obat VALUES (’CO012’,’Corsel’,’Suplement’,’13’,’183500’);
Penjelasan : perintah diatas akan membuat sebuah record baru dalam tabel obat dengan id_obat = CO012, nama_obat = Corsel, kategori = Suplement, jumlah = 13, dan harga = 183500.
4. UPDATE
Fungsi : Command UPDATE ini berfungsi untuk merubah/memperbaharui data yang telah ada di dalam tebel.
Syntax : UPDATE nama_tabel SET nama_field ’nilai_baru’ WHERE nama_field = ’kondisi’ ;
Parameter : set, where
Contoh : UPDATE obat SET id_obat = ‘CE008’ WHERE nama_obat = ‘Cetoros’;
Penjelasan : perintah diatas akan mengubah id_obat BD019 menjadi CE008 pada tabel obat yang memilikinama_obat Cetoros.

5. DELETE FROM
Fungsi  : Command DELETE FROM ini berfungsi untuk menghapus record yang ada pada sebuah tabel.
Syntax : DELETE FROM nama_tabel WHERE nama_field =’option’;
Parameter : where
Contoh : DELETE FROM obat WHERE id_obat =’CO012’;
Penjelasan : perintah diatas akan menghapus record dari tabel obat yang memiliki id_obat CO012.

6. EXPLAIN
Fungsi : Command EXPLAIN ini memiliki fungsi yang sama seperti Desc yaitu berfungsi untuk menampilkan struktur tabel yang telah dibuat, seperti nama_field, type data dari field tersebut, dan primary key.
Syntax : EXPLAIN nama_table;
Parameter : -
Contoh : EXPLAIN obat;
Penjelasan : perintah diatas akan memperlihatkan stuktur dari tabel obat yang telah dibuat.

7. SELECT DESCENDING
Fungsi : Command SELECT DESCENDING ini berfungsi menampilkan semua data dari bawah ke atas berdasarkan field yang telah ditentukan.
Syntax : SELECT field1, field2, dan seterusnya FROM nama_tabel ORDER BY field yang jadi acuan DESC;
Parameter : from, order by, desc
Contoh : SELECT id_obat, nama_obat, jumlah FROM BY obat ORDER BY id_obat DESC;
Penjelasan : Perintah diatas akan menampilkan data pada id_obat, nama_obat dan jumlah pada tabel obat dan yang menjadi acuan pengurutan data dari bawah ke atas adalah id_obat.

8. SELECT COUNT
Fungsi : Command SELECT COUNT ini berfungsi menampilkan jumlah record yang ada dalam suatu tabel.
Syntax : SELECT COUNT(*)FROM nama_tabel;
Parameter : count, from
Contoh : SELECT COUNT(*)FROM obat;
Penjelasan : Perintah diatas menampilkan jumlah record yang ada pada tabel obat.

9. SELECT MAX
Fungsi : Command SELECT MAX ini berfungsi untuk mencari nilai tertinggi pada sebuah field di tabel.
Syntax : SELECT MAX(nama_field) FROM nama_tabel;
Parameter : max, from
Contoh : SELECT MAX(jumlah) FROM obat;
Penjelasan : Perintah diatas akan menampilkan nilai tertinggi dari field jumlah pada tabel obat.

10. SELECT MIN
Fungsi : Command SELECT MIN ini berfungsi untuk mencari nilai terendah pada sebuah field di tabel.
Syntax : SELECT MIN(nama_field) FROM nama_tabel;
Parameter : min, from
Contoh : SELECT MIN(jumlah) FROM obat;
Penjelasan : Perintah diatas akan menampilkan nilai terendah dari field jumlah pada tabel obat.

DDL ' Data Definition Language '



SQL >>
SQL merupakan singkatan dari Structured Query Language. SQL adalah bahasa komputer yang standart untuk mengakses dan memanipulasi database. Seluruh aplikasi database yang beredar di pasaran, baik yang gratis maupun yang berlisensi, mengadopsi bahasa SQL untuk mengolah databasenya. Ada 2 jenis command di dalam SQL, yaitu DDL dan DML.
DDL ( Data Definition Language ) adalah sebuah perintah SQL yang berhubungan dengan pendefinisian suatu database dan tabel. Beberapa perintah dasar yang termasuk dalam DDL antara lain.

1. CREATE
Fungsi : Command CREATE ini berfungsi untuk membuat sebuah database ataupun membuat sebuah table yang berada di dalam database.
Syntax : CREATE database nama_database;
Parameter   : -
Contoh : CREATE database minimarket;
Penjelasan : perintah CREATE diatas akan membuat sebuah database dengan nama minimarket.

2. SHOW
Fungsi : Command SHOW ini berfungsi untuk menampilkan database ataupun table yang telah kita buat sebelumnya.
Syntax : SHOW databases;
Parameter : -
Contoh : SHOW databases;
Penjelasan : perintah SHOW diatas akan memperlihatkan semua database yang ada.

3. USE
Fungsi : Command  USE ini berfungsi untuk membuka/mengaktifkan/memasuki database yang telah kita buat. Setelah kita masuk kedalam database yang telah kita buat, barulah kita bisa memanipulasi data yang ada, termasuk untuk membuat table didalam database tersebut.
Syntax : USE nama_database;
Parameter : -
Contoh : USE minimarket;
Penjelasan : perintah diatas akan mengaktifkan database dengan nama minimarket sehingga kita dapat memanipulasi data yang ada.

4. ALTER
Fungsi : Command ALTER ini berfungsi untuk mengubah struktur dari suatu table. Mengubah disini tidak hanya memperbaharui struktur table yang ada, tetapi juga mengubah nama field, menambahkan primary key, mengubah tipe field, maupun menghapus field yang telah dibuat sebelumnya.
Syntax : ALTER TABLE nama_tabel parameter_option;
Parameter : add, modify, drop
Contoh : ALTER TABLE obat ADD harga int (6);
Penjelasan : perintah diatas akan menambahkan field harga kedalam tabel obat.

5. DROP
Fungsi: Command DROP ini berfungsi untuk menghapus, baik database, table, maupun field yang telah diinputkan ke dalam table.
Syntax : DROP TABLE nama_tabel;
Parameter : -
Contoh : DROP TABLE supplier;
Penjelasan : perintah diatas akan menghapus tabel supplier pada database minimarket.

Tuesday, March 12, 2013

< Tree >


TREE >>
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hierarkis antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut Root. Node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain.

Istilah Istilah dalam Tree >>
a) Prodecessor : node yang berada diatas node tertentu.
b) Successor : node yang berada di bawah node tertentu.
c) Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama.
d) Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama.
e) Parent : predecssor satu level di atas suatu node.
f) Child : successor satu level di bawah suatu node.
g) Sibling : node-node yang memiliki parent yang sama dengan suatu node.
h) Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.
i) Size : banyaknya node dalam suatu tree.
j) Height : banyaknya tingkatan/level dalam suatu tree.
k) Root : satu-satunya node khusus dalam tree yang tak punya predecssor.
l) Leaf : node-node dalam tree yang tak memiliki seccessor.
m) Degree : banyaknya child yang dimiliki suatu node.


JENIS-JENIS TREE >>

1) Binary tree
Binary tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut tiap node dalam binary tree hanya boleh memiliki paling banyak 2 child.


JENIS-JENIS BINARY TREE:

Ø FULL BINARY TREE
Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki 2 child dan tiap subtree harus mempunyai panjang path yang sama.


Ø COMPLETE BINARY TREE
Jenis ini mirip dengan full binary tree, namun tiap subtree boleh memiliki panjang path yang berbeda dan stiap node kecuali leaf hanya boleh memiliki 2 child.


Ø SKEWED BINARY TREE
Skewed binary tree adalah binary tree yang semua nodenya (kecuali leaf)  Hanya memiliki 1 child

Ø IMPLEMENTASI BINARY TREE
Binary tree dapat diimplementasikan dalam c++ dengan menggunakan double linked list.
Akar (Root nodes)
Simpul yang paling atas dalam pohon adalah akar (root node). Menjadi simpul teratas, simpul akar tidak akan memiliki orang tua. Ini merupakan simpul di mana biasanya merupakan tempat untuk memulai operasi dalam pohon (walaupun beberapa algoritma dimulai dengan daun dan berakhir pada akar). Semua simpul yang lain dapat dicapai dari akar dengan menelusuri pinggiran atau pranala. (Dalam definisi resmi, setiap jalan adalah khas). Dalam diagram, ini secara khusus di gambar paling atas. Di beberapa pohon, seperti heap, akar memiliki sifat khusus. Setiap simpul dalam sebuah pohon dapat dilihat sebagai akar dari sub pohon yang berakar pada simpul tersebut.

Daun (Leaf nodes)
Semua simpul yang berada pada tingkat terendah dari pohon dinamakan daun (leaf node). Sejak mereka terletak pada tingkat paling bawah, mereka tidak memiliki anak satupun. Seringkali, daun merupakan simpul terjauh dari akar. Dalam teori grafik, sebuah daun adalah sebuah sudut dengan tingkat 1 selain akar (kecuali jika pohonnya hanya memiliki satu sudut; maka akarnya adalah daunnya juga). Setiap pohon memiliki setidaknya satu daun.
Dalam pohon berdasarkan genetic programming sebuah daun (juga dibilang terminal) adalah bagian terluar dari sebuah program pohon. Jika dibandingkan dengan fungsinya atau simpul dalam, daun tidak memiliki argumen. Di banyak kasus dalam daun-GP input ke programnya.



BINARY SEARCH TREE


Binary tree ini memiliki sifat dimana semua left child harus lebih kecil dari pada right child dan parentnya. Semua right child juga harus lebih besar dari left child serta parentnya. Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan dalam searching/pencarian node tertentu dalam binary tree.

Implementasi Binary Search Tree

Ketentuan :
a. Semua left child harus lebih kecil dari parent
b. Semua right child harus lebih besar dari parent
Keuntungan : Pencarian node target menjadi lebih efisien dan cepat

Operasi-Operasi Standar BST :
- Mengosongkan BST
- Mencek apakah BST kosong
- Mencari Tree Minimum
- Mencari Tree Maksimum
- Memasukkan data baru ke dalam BST
- Mencari elemen tertentu dalam BST
- Menghapus data tertentu dari dalam BST
- Menampilkan semua elemen dalam BST


Tree Traversal
      Teknik menyusuri tiap node dalam sebuah tree secara sistematis, sehingga semua node dapat dan  hanya satu kali saja dikunjungi
Ada tiga cara traversal :
- preorder
- inorder
- postorder
       Untuk tree yang kosong, traversal tidak perlu dilakukan 

    1. PREORDER
          Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :

      - Cetak isi simpul yang dikunjungi.

      - Kunjungi cabang kiri.

      - Kunjungi cabang kanan.


Procedure PREORDER(Temp : Tree);

Begin

If Temp <> NIL Then

Begin

Write(Temp^.Info,’ ‘); {Cetak isi simpul}

PREORDER(Temp^.Kiri); {Kunjungi cabang kiri}

PREORDER(Temp^.Kanan); {Kunjungi cabang kanan}

End;

End;


2. INORDER
           Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :

     - Kunjungi cabang kiri.

     - Cetak isi simpul yang dikunjungi.

     - Kunjungi cabang kanan.

    Prosedur untuk melakukan traversal secara INORDER adalah sebagai berikut:


Procedure INORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
INORDER(Temp^.Kiri); {Kunjungi cabang kiri}
Write(Temp^.Info,’ ‘); {Cetak isi simpul}
INORDER(Temp^.Kanan); {Kunjungi cabang kanan}
End;
End;


 3. POSTORDER 
             Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :

         - Kunjungi cabang kiri.

        - Kunjungi cabang kanan.

        - Cetak isi simpul yang dikunjungi.


Procedure POSTORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
POSTORDER(Temp^.Kiri); {Kunjungi cabang kiri}
POSTORDER(Temp^.Kanan); {Kunjungi cabang kanan}
Write(Temp^.Info,’ ‘); {Cetak isi simpul}
End;
End;      


< Queue >




QUEUE >>
Queue dalam kehidupan sehari-hari seperti antrian pada penjualan tiket kereta api, dimana orang yang
pertama datang adalah orang yang pertama kali dilayani untuk membeli tiket. Jika ada orang baru yang
datang akan membali tiket, maka posisinya berada pada urutan paling belakang dalam antrian tersebut.
Orang yang berada pada posisi terakhir dalam antrian adalah yang terakhir kali dapat dilayani dan
memperoleh tiket kereta api (kalau kurang beruntung, maka akan kehabisan tiket). Contoh lain adalah
nasabah yang antri di teller bank, paket data yang menunggu untuk ditransmisikan lewat internet, antrian
printer dimana terdapat antrian print job yang menunggu giliran untuk menggunakan printer, dsb.

DEFINISI >>
•Bersifat FIFO (First In First Out)
•Elemen yang pertama masuk ke antrian akan keluar pertama kalinya
ENQUEUE: menambahkan data pada sebuah list
•DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian
•Antrian dapat dibuat dengan menggunakan 2 cara: Liniear Array dan Circular Array

Istilah-istilah yang digunakan dalam queue (antrian)
Memasukkan data (insert) disebut juga dengan putadd, atau enqueue. Menghapus data (remove) biasa 
disebut dengan istilah deleteget, atau dequeue. Bagian belakang queue, dimana data bisa dimasukkan 
disebut dengan backtail (ekor), atau end (akhir). Sedangkan bagian depan (frontqueue dimana data 
bisa dihapus juga biasa disebut dengan istilah kepala (head).

Circular Queue
Di dunia nyata apabila seseorang sedang mengantri (misalnya antri tiket kereta api), apabila telah dilayani dan 
memperoleh tiket, maka ia akan keluar dari antrian dan orang-orang yang berada di belakangnya akan 
bergerak maju ke dapan. Kita bisa saja menggerakkan setiap item data ke depan apabila kita menghapus 
data yang terdepan, tetapi hal ini kurang efektif. Sebaliknya kita tetap menjaga setiap item data di 
posisinya, yang kita lakukan hanyalah merubah posisi front dan rear saja.
Yang menjadi permasalahan adalah apabila posisi rear berada pada bagian akhir dari array (atau pada 
nomor indeks yang terbesar). Meskipun ada bagian yang kosong di awal-awal array – karena mungkin 
data telah dihapus, data baru tidak bisa dimasukkan lagi karena rear-nya sudah tidak bisa bergerak lagi. 
Atau mungkinkah posisi rear nya bisa berpindah? Situasi seperti itu bisa dilihat seperti gambar berikut:

Untuk menghindari permasalahan seperti itu (tidak bisa memasukkan data 
baru) – meskipun queue-nya belum penuh, maka front dan rear-nya berputar (kembali) ke bagian awal array. Kejadian seperti ini dinamakan dengan circular queue (atau kadang-kadang disebut juga dengan istilah ring buffer). Kejadian seperti ini seperti terlihat pada gambar berikut:

Perhatikan bahwa setelah rear berputar (kembali) ke bagian awal array, posisinya sekarang di bawah 
front, kebalikan dari posisi aslinya (front berada di bawah rear). Coba hapus beberapa data sehingga 
pada suatu saat front juga akan berputar (balik) ke bagian awal array, sehingga front dan rear akan ke
susunan aslinya (front di bawah rear).

Queue (Antrian)
1. Dikenali data pertama (Head) dan data terakhirnya (Tail)
2.Aturan penambahan dan penghapusan datanya didefinisikan sebagai berikut ::
     - Penambahan selalu dilakukan dari belakang
     - Penghapusan selalu dilakukan dari depan
3. Satu data dengan data lain dapat diakses melalui informasi
4. Pada queue prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out)

Data-data di dalam antrian dapat bertipe integer, real, record
Contoh aplikasi queue dalam kehidupan sehari-hari:

1. Antrian di jalan tol
2. Antrian saat mengantri di loket
3. Antrian reservasi tiket kereta api, dll
Semua itu menggunakan aturan FIFO (First In, First Out)


Operasi-operasi pada Antrian (queue):

1.Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail  = -1

2. IsEmpty()
Untuk memeriksa apakah antrian masih kosong atau sudah terisi
Dengan cara memeriksa nilai tail, jika tail = -1 maka empty
Pergerakan pada Antrian terjadi dengan penambahan data Antrian kebelakang, yaitu menggunakan nilai tail


3. IsFull()
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai tail, jika tail >= MAX-1 (karena MAX-1 adalah batas data array pada C) berarti sudah penuh

4. Enqueue
Untuk menambahkan data ke dalam antrian, penambahan data selalu ditambahkan di data paling belakang
Penambahan data selalu menggerakan variabel tail dengan cara increment counter tail

5. Dequeue()
Digunakan untuk menghapus data terdepan dari Antrian
Dengan cara mengurangi counter tail dan menggeser semua data antrian kedepan.
Penggeseran dilakukan dengan menggunakan looping

6. Clear()
Untuk menghapus semua data Antrian dengan cara membuat tail dan head = -1
Penghapusan data-data antrian sebenarnya tidak menghapus arraynya, namun hanya mengeser indeks pengaksesannya ke nilai -1 sehingga data-data Antrian tidak lagi terbaca

7. Tampil()
Untuk menampilkan nilai-nilai data Antrian menggunakan looping dari head s/d tail