Breaking News

Selasa, 23 Desember 2014

Type Join Table pada MySQL

Tipe / Jenis JOIN TABLE pada MySQL 5.0

Jika Anda telah memahami fungsi join pada database relasional untuk menghubungkan berbagai table, maka artikel berikut akan menjelaskan dan menunjukkan contoh penggunaan variasi join pada MySQL versi 5.0. JOIN sendiri merupakan konstruksi bahasa yang tidak bisa berdiri sendiri, biasanya berupa klausa pada bagian referensi table pada SELECT, UPDATE atau DELETE statement.

Tipe-tipe JOIN yang akan dibahas adalah :
  • INNER JOIN
  • CROSS JOIN
  • OUTER JOIN
  • STRAIGHT JOIN
Semua contoh pada artikel ini menggunakan database PHI-Minimart. JIka Anda belum melakukan hal tersebut, silahkan lakukan instalasi dengan dua pilihan, PHI-Minimart full atau PHI-Minimart master table saja.

Tiga table yang akan kita gunakan dari database tersebut adalah ms_cabangms_kota dan ms_propinsi dengan relasi terlihat seperti pada gambar berikut.

Keterangan : Relasi antar table ms_cabang, ms_kota dan ms_propinsi

INNER JOIN

INNER JOIN adalah tipe join yang akan kita bahas pertama. Tipe join ini akan mengambil semua row dari table asal dan table tujuan dengan kondisi nilai key yang terkait saja - jika ada, dan  jika tidak maka row tersebut tidak akan muncul. 

Kalau tidak terdapat kondisi key terkait antar table, maka semua row dari kedua table dikombinasikan.

Syntax dari INNER JOIN adalah sebagai berikut :

table_reference [INNER] JOIN table_factor [join_condition]

Terlihat bahwa keyword INNER boleh digunakan secara eksplisit atau tidak. Jika tidak digunakan maka konstruksi JOIN tanpa keyword lain dianggap sebagai INNER JOIN.

INNER JOIN Antar Table dengan Kondisi ("ms_cabang" dan "ms_kota" dengan key "kode_kota")

SELECT * FROM ms_cabang INNER JOIN ms_kota ON ms_cabang.kode_kota = ms_kota.kode_kota

Hasil terlihat seperti gambar berikut ini. Disini table sumber adalah ms_cabang (left) mencari referensi row lain dari table ms_kota (right) dengan kondisi nilai kode_kota diantara kedua table tersebut sama. Kondisi ini menggunakan keyword ON

Dengan panduan gambar, kita lihat bahwa tiap row dari ms_cabang akan dicari padanan row-nya di ms_kota :
  • untuk row pertama kita memiliki kode_kota dengan nilai "KOTA-003", ini akan dicari referensinya ke table ms_kota untuk nilai yang sama dan kita dapatkan row dengan nilai nama_kota "Lhokseumawe" adalah padanannya.
  • untuk row kedua kita memiliki kode_kota dengan nilai "KOTA-083", ini akan dicari referensinya ke table ms_kota untuk nilai yang sama dan kita dapatkan row dengan nilai nama_kota "Bau-bau" adalah padanannya.
  • demikian seterusnya.


Sekarang mari kita coba hapus referensi untuk "Lhokseumawe" dari table ms_kota :

DELETE FROM ms_kota WHERE nama_kota = 'Lhokseumawe';

Setelah itu coba jalankan kembali perintah JOIN di atas, Anda akan mendapatkan hasil JOIN tanpa referensi row "Lhokseumawe". Jadi INNER JOIN dengan kondisi mengharuskan row dari tiap table memiliki nilai yang sama untuk column referensinya (dalam hal ini kode_kota).

Kembalikan lagi row referensi yang kita hapus tadi dengan perintah INSERT berikut ini :

INSERT INTO `ms_kota` VALUES ('KOTA-003','Lhokseumawe','P33')

INNER JOIN Antar Table Tanpa Kondisi ("ms_cabang" dengan "ms_kota")

SELECT * FROM ms_cabang INNER JOIN ms_kota

Hasilnya adalah untuk tiap row dari ms_cabang akan dikombinasikan dengan semua row dari ms_kota - contoh hasilnya terlihat seperti pada gambar di bawah ini.



INNER JOIN antar table "ms_cabang", "ms_kota" dan "ms_propinsi"

SELECT ms_cabang.nama_cabang, 
       ms_kota.nama_kota, 
       ms_propinsi.nama_propinsi 
FROM ms_cabang 
INNER JOIN ms_kota ON ms_cabang.kode_kota = ms_kota.kode_kota
INNER JOIN ms_propinsi ON ms_kota.kode_propinsi = ms_propinsi.kode_propinsi
 
Hasil eksekusi terlihat seperti gambar berikut. Dengan penggabungan ketiga table ini sekarang kita dapatkan setiap cabang memiliki informasi nama kota dan nama propinsi dimana cabang tersebut berada.


Implisit INNER JOIN dengan Koma

INNER JOIN antar table secara implisit dapat menggunakan daftar table yang dipisah dengan tanda koma (,). Pengkondisian menggunakan klausawhere.

SELECT ms_cabang.nama_cabang,
       ms_kota.nama_kota    ,
       ms_propinsi.nama_propinsi
FROM   ms_cabang
       , ms_kota
       , ms_propinsi
       WHERE 
       ms_cabang.kode_kota = ms_kota.kode_kota
       AND 
       ms_kota.kode_propinsi = ms_propinsi.kode_propinsi

CROSS JOIN

CROSS JOIN identik dengan INNER JOIN pada MySQL 5.0. Pembahasannya sama dengan INNER JOIN sehingga tidak diulangi lagi disini.

Contoh Penggunaan :

SELECT ms_cabang.nama_cabang, 
ms_kota.nama_kota, 
ms_propinsi.nama_propinsi 
FROM
     ms_cabang 
CROSS JOIN 
     ms_kota ON ms_cabang.kode_kota = ms_kota.kode_kota
CROSS JOIN 
     ms_propinsi ON ms_kota.kode_propinsi = ms_propinsi.kode_propinsi 

OUTER JOIN

OUTER JOIN merupakan tipe join yang mencari referensi data dari suatu table sumber ke table lain dengan tidak menghilangkan data sumber apabila referensi tidak diketemukan.

Untuk menggunakan tipe OUTER JOIN maka perlu memperhatikan beberapa hal berikut :
  • perlu dibedakan antara table sumber dan table referensi, ini ditentukan dengan cara menspesifikasikan kedudukan table sumber apakah di kiri (LEFT) atau di kanan (RIGHT).
  • jika tidak ada data dari table referensi yang cocok dengan kondisi join maka hanya data dari table sumber yang ditampilkan tetapi kolom-kolom table referensi akan berisi null.

Contoh Penggunaan :
  • Hapus data master "Lhokseumawe" dari table ms_kota

    DELETE FROM ms_kota WHERE nama_kota = 'Lhokseumawe'
  • Lakukan join seperti perintah berikut ini, dan perhatikan hasilnya seperti pada gambar.

    SELECT ms_cabang.*,
           ms_kota.nama_kota
    FROM ms_cabang
    LEFT OUTER JOIN ms_kota
         ON ms_cabang.kode_kota = ms_kota.kode_kota

  • Tambahkan kembali data "Lhokseumawe" ke table ms_kota

    INSERT INTO ms_kota(kode_kota, nama_kota, kode_propinsi)
    VALUES ('KOTA-003', 'Lhokseumawe', 'P33');
  • Sekarang coba ganti syntax pada query di atas dari "LEFT" menjadi "RIGHT" dan lihat hasil eksekusinya. Tentunya dari hasil tersebut Anda sudah dapat mengambil kesimpulan perbedaan dari kedua konstruksi tersebut.

STRAIGHT_JOIN

STRAIGHT_JOIN merupakan pengganti keyword JOIN pada MySQL yang digunakan untuk "memaksa" proses join table dari kiri (LEFT) ke kanan (RIGHT).

Contoh Penggunaan :

SELECT ms_cabang.*,
       ms_kota.nama_kota
FROM ms_cabang
STRAIGHT_JOIN ms_kota
     ON ms_cabang.kode_kota = ms_kota.kode_kota

Read more ...

Cara membuat DataBase Sederhana Dengan MySQL

Membuat Database Sederhana dengan MySQL


(Membuat database dengan MySQL dasar)

Kali ini saya akan coba untuk share bagaimana cara membuat database pada komputer dengan menggunakan MySQL. Saya tidak perlu menjelasakan untuk persiapan aplikasi-aplikasi yang diperlukan, untuk aplikasi nya silahkan download disini (MySql 5.5)  terbaru, Ok langsung saja kita ke pembahasan:

1.    Masuk MySQL Client
2.    Buat database Kantor

Untuk memulai menggunakan MySQL kita harus memanggilnya terlebuh dahulu seperti pada gambar di atas dan masukan password untuk MySQLnya, selanjutnya membuat database dengan nama “KANTOR” terlihat di atas setelah kita memanggil dan berhasil masuk maka kita create database kantor tersebut dengan perintah “CREATE DATABASE KANTOR” dan jangan lupa berilah tanda “;” titik-koma setiap akhir dari perintah.

3.    Membuat table pegawai dalam database kantor
4.    Melakukan pengisian data pada table pegawai dengan INSERT
5.    Menampilkan data yang telah di masukan pada table pegawai
6.    Melakukan penambahan data pada table pegawai
mysql> use kantor //untuk menggunakan database “kantor”
Database changed
mysql> create table pegawai ( //untuk membuat tabel “pegawai”.
    -> nip char(10) primary key,
    -> nama varchar(40) not null,
    -> alamat varchar(80) not null,
    -> sex char(1),
    -> gaji int default 0);
Query OK, 0 rows affected (0.09 sec)


mysql> INSERT INTO pegawai (nip,nama,alamat,sex,gaji)
    -> VALUES
    -> ("001","Totok","Jalan Rayan 10 Yogya","P",1500000);
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO pegawai (nip,nama,alamat,sex,gaji)
    -> VALUES
    -> ("002","Andi","Tahunan UH 1/234 Yogya","P",4000000);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO pegawai (nip,nama,alamat,sex,gaji)
    -> VALUES
    -> ("003","Siti","Jalan Berbatu 5 Solo","W",750000);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO pegawai (nip,nama,alamat,sex,gaji)
    -> VALUES
    -> ("004","Rudi","Kanoman RT 2 RW 1 Yogya ","P",900000)
Query OK, 1 row affected (0.00 sec)

Pembahasan:
Kemudian jika kita ingin bekerja menggunakan database yang kita buat, semisal kita ingin menggunakan database KANTOR, maka kita ketikkan perintah USE KANTOR sehingga database kantor itu di panggil dari MySQL.
Setelah memasukki database KANTOR, di dalammnya kita bisa menciptakan tabel baru, semisal tabelPEGAWAI. Sehingga kita ketikkan CREATE TABLE PEGAWAI diikuti variabel variabel yang ada di dalam tabel tersebut. Secara lengkapnya dapat dituliskan dengan perintah :
Ø  Nip char(10) not null primary key, // menciptakan query “Nip” dengan tipe data berupa char, dengan panjang maksimal 10, mejadi primary key (kunci utama).
Ø  Nama varchar(40)not null, // menciptakan query “Nama” dengan tipe data berupa varchar, dengan panjang maksimal 40.
Ø  Alamat varchar(80) not null,  // menciptakan query “Alamat” dengan tipe data berupa varchar, dengan panjang maksimal 80.
Ø  Sex char(1), // menciptakan query “Sex” dengan tipe data berupa char, dengan panjang maksimal 1.
Ø  Gaji int default 0); // menciptakan query “Gaji” dengan tipe data berupa integer, dengan nilai awal 0.
Setelah melakukan pembuatan tabel PEGAWAI di atas maka kita dapat melihat struktur tabel yang baru saja kita buat menggunakan perintah: describe pegawai. Lalu jika kita ingin mengubah struktur tabel yang telah kita buat maka menggunakan perintah alter table, contohnya jika ingin variabel nama pada tabelPEGAWAI kita gunakan perintah : alter table pegawai modify nama varchar(35);. Atau juga dengan perintah alter table PEGAWAI change nama varchar(35);

Kemudian untuk menambah record kita bisa menggunakan perintah insert into. Misalkan kita ingin menambahkan data Agus Sugiarto dengan nip 001, alamat jogja, jenis kelamin laki-laki dan gaji 500000. Yaitu dengan mengunakan perintah:
Ø  Insert into pegawai values(001’,’ Totok,’P’,’ Jalan Rayan 10 yogya’,’1500000’);
Selanjunya jika ingin melihat tabel mahasiswa yang telah kita isikan datanya maka kita gunakan perintah :
Ø  select*from pegawai;.
mysql> select * from pegawai;
+-----+-------+-------------------------+------+---------+
| nip | nama  | alamat                  | sex  | gaji    |
+-----+-------+-------------------------+------+---------+
| 001 | Totok | Jalan Raya  10 Yogya    | P    | 1500000 |
| 002 | Andi  | Tahunan UH 1/234 Yogya  | P    | 4000000 |
| 003 | Siti  | Jalan Berbatu 5 Solo    | W    |  750000 |
| 004 | Rudi  | Kanoman RT 2 RW 1 Yogya | P    |  900000 |
+-----+-------+-------------------------+------+---------+
4 rows in set (0.01 sec)
Lalu jika ingin membuat sebuah kolom yang tidak diberi nilai atau dikehendaki untuk dapat diberi nilai bawaan, kita menggunakan kata kunci DEFAULT. Contohnya :
Create table pegawai (nip char(9) not null,nama varchar(30),kelamin enum(‘L’,’P’),alamat varcharchar(80),gaji in default 0.0,primary key(nip));
Sedangkan untuk menghapus baris pada tabel kita bisa menggunakan perintah delete, secara lengkapnya semisal ingin menghapus baris data yang menggandung nip=001 maka kita gunakan perintah :
Ø  delete from pegawai where nip=’ 001’.
1.    Menampilkan hanya field nama, alamat dari table pegawai
mysql> SELECT nama,alamat FROM pegawai;
+-------+--------------------------+
| nama  | alamat                   |
+-------+--------------------------+
| Totok | Jalan Raya 10 Yogya      |
| Andi  | Tahunan UH 1/234 Yogya   |
| Siti  | Jalan Berbatu 5 Solo     |
| Rudi  | Kanoman RT 2 RW 1 Yogya  |
+-------+--------------------------+
4 rows in set (0.00 sec)



Pembahasan:
Untuk menampilkan daftar pegawai tersebut dapat dilakukan dengan cara memanggil nama query nya yang diinginkan, seperti di atas misalkan “SELECT nama,alamat FROM pegawai;” maka data yang muncul hanya nama dan alamat pegawai saja.
2.    Menampilkan  data dengan mengurutkan field menggunakan perintah ORDER BY berdasarkan urutan nama.
Jika menginginkan tampilan data sesuai abjad seperti dari A-Z, maka perintah menggunakan ORDER BY dapat di tambahkan asceding (asc) sedangkan jika menambahkan perintah desceding (desc) pada akhir perintah pemanggilan maka abjad akan di urutkan dari Z-A (sebaliknya) contoh “SELECT*FROM pegawai ORDER BY nama desc terlihat dari hasil dibawah ini, hal ini juga dilakukan untuk reaktuk no 10 untuk menampilakan data gaji pegawai dari yang terbesar sampai yang terecil/ sebaliknya :

mysql> SELECT*FROM pegawai ORDER BY nama;
+-----+-------+--------------------------+------+---------+
| nip | nama  | alamat                   | sex  | gaji    |
+-----+-------+--------------------------+------+---------+
| 002 | Andi  | Tahunan UH 1/234 Yogya   | P    | 4000000 |
| 004 | Rudi  | Kanoman RT 2 RW 1 Yogya  | P    |  900000 |
| 003 | Siti  | Jalan Berbatu 5 Solo     | W    |  750000 |
| 001 | Totok | Jalan Raya 10 Yogya     | P    | 1500000 |
+-----+-------+--------------------------+------+---------+
4 rows in set (0.00 sec)

mysql> SELECT*FROM pegawai ORDER BY nama desc;
+-----+-------+--------------------------+------+---------+
| nip | nama  | alamat                   | sex  | gaji    |
+-----+-------+--------------------------+------+---------+
| 001 | Totok | Jalan Raya  10 Yogya     | P    | 1500000 |
| 003 | Siti  | Jalan Berbatu 5 Solo     | W    |  750000 |
| 004 | Rudi  | Kanoman RT 2 RW 1 Yogya  | P    |  900000 |
| 002 | Andi  | Tahunan UH 1/234 Yogya   | P    | 4000000 |
+-----+-------+--------------------------+------+---------+
4   rows in set (0.00 sec)

3.    Menampilkan record tertentu misalkan record yang memiliki nama=Siti
4.    Menampilakn pegawai berjenis kelamin Peria (p).
mysql> SELECT*FROM pegawai WHERE nama='siti';
+-----+------+----------------------+------+--------+
| nip | nama | alamat               | sex  | gaji   |
+-----+------+----------------------+------+--------+
| 003 | Siti | Jalan Berbatu 5 Solo | W    | 750000 |
+-----+------+----------------------+------+--------+
1 row in set (0.01 sec)

    mysql> SELECT * FROM pegawai WHERE sex='P';
    +-----+-------+--------------------------+------+---------+
    | nip | nama  | alamat                   | sex  | gaji    |
    +-----+-------+--------------------------+------+---------+
    | 001 | Totok | Jalan Raya 10 Yogyakarta | P    | 1500000 |
    | 002 | Andi  | Tahunan UH / 234 Yogya   | P    | 4000000 |
    | 004 | Rudi  | Kanoman RT 2 RW 1 Yogya  | P    |  900000 |
    +-----+-------+--------------------------+------+---------+
    3 rows in set (0.00 sec)
Tampilan diatas adalah untuk menampilkan  record tertentu contoh diatas adalah dengan memanggilnama siti semua pegawai berjenis kelamin peria, kita bisa mengganti nama sesuai kebutuhan kita dari datayang ada pada database yang buat.

v  MEMBUAT TABEL JABATAN
Untuk membuat table jabatn langkah yang di gunakan sama dengan membuat table pegawai seperti langkah- langkah  yang sudah di bahas dlam table pegaway di atas yaitu mengunakan perintah:
Mysql>create table jabatan
->kodejabat char(2) not null primary key,
->namajabat varchar(20) not null,
->tunjangan float default 0);

mysql> create table jabatan (
    -> kodejabat char(2) primary key,
    -> namajabat varchar(20) not null,
-> tunjangan float default 0);

Adalah pembuatan table jabatan dengan field kodejabat, namajabat, dan tunjangan dengan kodejabat sebagai primary key.
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO jabatan (kodejabat,namajabat,tunjangan)
    -> VALUES
    -> ("02","manajer",50000);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO jabatan (kodejabat,namajabat,tunjangan)
    -> VALUES
    -> ("03","direktur",250000);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO jabatan (kodejabat,namajabat,tunjangan)
    -> VALUES
    -> ("04","staff",0);
Query OK, 1 row affected (0.00 sec)
Perintah diatas merupakan mperintah untuk input data-data dalam jabatan. Kode dan tunjangan

mysql> SELECT*FROM jabatan \g;
+-----------+-----------+-----------+
| kodejabat | namajabat | tunjangan |
+-----------+-----------+-----------+
| 02        | manajer   |     50000 |
| 03        | direktur  |    250000 |
| 04        | staff     |         0 |
+-----------+-----------+-----------+
3 rows in set (0.00 sec)

  Dengan perintah  mysql> SELECT*FROM jabatan; adalah untuk menampilkan semua data yang telah kita inputkan dalam field yang telah kita buat.

Kesimpulan.
MySQL adalah database server yang dapat menyimpan sejumlah basis data yang dapat diakses oleh program client (MySQL Command Line Client, maupun program aplikasi). Di dalam MySQL terdapat 4 buah prompt yang akan ditemui yaitu, mysql> artinya siap menerima perintah baru, --> artinya menunggu baris berikut dari perintah banyak baris, ‘> artinya menunggu baris berikut, memasukkan string yang dimulai oleh petik tunggal, dan “> artinya menunggu baris berikut, memasukkan string yang dimulai oleh petik ganda.
Pada MySQL dalam prompt biasanya hanya ditulis satu perintah saja, akan tetapi lebih dari satu perintah bisa dituliskan bersamaan pada sebuah prompt, yaitu dengan penulisan pada akhir masing-masing perintah diberi tanda ‘;’. Selain itu juga bisa mengisi data dengan menggunakan perintah load data.
Contoh Soal:

1.      Buat database toko

mysql> create database toko;
Query OK, 1 row affected (0.00 sec)
mysql> use toko;
Database changed

2.      Buat table barang dengan field : kodebrg char(5), namabrg varchar(40), hjual float, stock int dengan kodebrg sebagai primary key.

mysql> create table barang (
    -> kodebrg char(5) primary key,
    -> namabrg varchar(40) not null,
    -> hjual float default 0,
    -> stok int default 0);
Query OK, 0 rows affected (0.03 sec)

3.      Tambahkan field hbeli float di table barang tersebut.
mysql> alter table barang add hbeli float default 0;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc barang;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| kodebrg | char(5)     | NO   | PRI | NULL    |       |
| namabrg | varchar(40) | NO   |     | NULL    |       |
| hjual   | float       | YES  |     | 0       |       |
| stok    | int(11)     | YES  |     | 0       |       |
| hbeli   | float       | YES  |     | 0       |       |
+---------+-------------+------+-----+---------+-------+
5      rows in set (0.00 sec)

4.      Isikan 4 buah data barang
mysql> insert into barang(kodebrg,namabrg,hjual,stok,hbeli)
    -> values
    -> ("01","Silica gel",12000,4,10000),
    -> ("02","lens fix 50mm f.1/8",720000,10,700000),
    -> ("03","filter uv kenko 58mm",110000,6,100000),
    -> ("04","lens hood",65000,3,55000);

mysql> select * from barang;
+---------+----------------------+--------+------+--------+
| kodebrg | namabrg              | hjual  | stok | hbeli  |
+---------+----------------------+--------+------+--------+
| 01      | Silica gel           |  12000 |    4 |  10000 |
| 02      | lens fix 50mm f.1/8  | 720000 |   10 | 700000 |
| 03      | filter uv kenko 58mm | 110000 |    6 | 100000 |
| 04      | lens hood            |  65000 |    3 |  55000 |
+---------+----------------------+--------+------+--------+
4      rows in set (0.00 sec)


5.      Tampilkan kodebrg, namabrg dan hjual dari data barang

mysql> select kodebrg,namabrg,hjual from barang;
+---------+----------------------+--------+
| kodebrg | namabrg              | hjual  |
+---------+----------------------+--------+
| 01      | Silica gel           |  12000 |
| 02      | lens fix 50mm f.1/8  | 720000 |
| 03      | filter uv kenko 58mm | 110000 |
| 04      | lens hood            |  65000 |
+---------+----------------------+--------+
4      rows in set (0.00 sec)

6.      Tampilkan semua field dari data barang yang mempunyai stock lebih dari 5 urut stok

mysql> select * from barang where stok>5 order by stok;
+---------+----------------------+--------+------+--------+
| kodebrg | namabrg              | hjual  | stok | hbeli  |
+---------+----------------------+--------+------+--------+
| 03      | filter uv kenko 58mm | 110000 |    6 | 100000 |
| 02      | lens fix 50mm f.1/8  | 720000 |   10 | 700000 |
+---------+----------------------+--------+------+--------+
2 rows in set (0.00 sec)
Read more ...
Designed By