Syntax Relasi Dalam SQL

13 December 2012 22:42:15 Dibaca : 1060 Kategori : 921411026 tugas 5

1. “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.

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 klausa where.

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

INNER JOIN

Syntax:

SELECT column_list

FROM table_reference

[INNER] JOIN table_reference ON predicate

[[INNER] JOIN table_reference ON predicate...]

Fungsinya sama dengan operator Equi-Join hanya saja kolom untuk setiap tabel dibandingkan dalam klausa ON untuk nilai-nilai yang sama. Contoh pernyataan pertama dan kedua dalam operator Equi-Join, jika dideklarasikan dengan operator INNER JOIN menjadi :

SELECT *

FROM Customer C

INNER JOIN Orders O ON (C.CustNo = O.CustNo)

SELECT *

FROM Source S

INNER JOIN Joining J ON (S.ID = J.ID1 || J.ID2)

Untuk database Ms Access, pernyataan INNER JOIN harus menyertakan tanda kurung jika menggabungkan lebih dari dua tabel, seperti berikut ini

SELECT *

FROM (Customer C

INNER JOIN Orders O ON (C.CustNo = O.CustNo))

INNER JOIN AddCusPrice A ON (C.CustNo = A.CustNo)

 

2. “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

 

3. “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.

OUTER JOIN

Syntax:

SELECT column_list

FROM table_reference

LEFT | RIGHT | FULL [OUTER] JOIN table_reference ON predicate

[LEFT | RIGHT | FULL [OUTER] JOIN table_reference ON predicate...]

Fungsinya sama dengan operator Equi-Join dan INNER JOIN yaitu menggabungkan dua macam tabel. Perbedaannya, pada operator OUTER JOIN, record dari tabel sumber yang tidak cocok dengan tabel anggota akan dimunculkan dalam hasil. Kolom tabel anggota untuk record dalam tabel sumber yang tidak cocok mempunyai nilai kosong (bukan nol). Pernyataan berikut ini menggabungkan tabel Customer dan Orders berdasarkan nilai-nilai dalam kolom CustNo. Untuk record tabel Customer yang tidak mempunyai kecocokan nilai di antara Customer.CustNo dan Orders.CustNo, kolom dari tabel Orders berisi nilai kosong (bukan nol).

SELECT *

FROM Customer C

LEFT OUTER JOIN Orders O ON (C.CustNo = O.CustNo)

Peubah LEFT menyebabkan semua record tabel pada sisi kiri operator OUTER JOIN dimasukkan dalam hasil, dengan atau tanpa kecocokan dalam tabel sebelah kanan. Jika tidak ada kecocokan record dari tabel sebelah kanan, maka kolom tersebut berisi nilai kosong. Gunakan peubah RIGHT jika menginginkan kondisi sebaliknya. Dan peubah FULL menyebabkan semua record dari seluruh tabel yang ditetapkan dalam klausa FROM dimasukkan dalam hasil, dengan atau tanpa kecocokan nilai. Tabel juga dapat digabung dengan mengunakan ekpresi yang menghasilkan suatu nilai tunggal sebagai predikat perbandingan. Di sini, kolom ID1 dan ID2 dari tabel Joining dibandingan secara terpisah dengan dua nilai yang dihasilkan oleh fungsi SUBSTRING dengan menggunakan kolom tunggal ID tabel Source.

SELECT *

FROM Source S

RIGHT OUTER JOIN Joining J ON (SUBSTRING(S.ID FROM 1 FOR 2) = J.ID1)

AND (SUBSTRING(S.ID FROM 3 FOR 1) = J.ID2)

 

4. “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

 

5. “EQUI-JOIN”

Syntax:

SELECT column_list

FROM table_reference, table_reference [, table_reference...]

WHERE predicate [AND predicate...]

Operator Equi-Join digunakan untuk menggabungkan dua tabel, suatu tabel sumber dan anggota, yang mempunyai nilai dari satu kolom atau lebih. Untuk record tabel sumber yang sesuai dengan tabel anggota, akan dimasukkan dalam hasil. Jika tidak ada kecocokan, data tersebut tidak dimunculkan dalam hasil. Contoh pernyataan berikut ini menggabungkan tabel Customer dan Orders berdasarkan nilai-nilai dalam kolom CustNo, dimana keduanya mempunyai kolom tersebut.

SELECT *

FROM Customer C, Orders O

WHERE (C.CustNo = O.CustNo)

Tabel juga dapat digabungkan dengan menggunakan hasil penggabungan beberapa nilai kolom. Di sini, kolom ID1 dan ID2 dari tabel Joining digabungkan dan dibandingkan dengan nilai-nilai kolom tunggal ID tabel Source.

SELECT *

FROM Source S, Joining J

WHERE (S.ID = J.ID1 || J.ID2)

 

6. “ CARTESIAN”

Syntax:

SELECT *

FROM table_reference, table_reference [,table_reference...]

Menggabungkan kolom dua buah tabel dalam satu hasil, tetapi tidak ada korelasi di antara record tabel. Operator Cartesian Join mencocokkan setiap record tabel sumber dengan setiap record tabel anggota. Jika tabel sumber mempunyai 10 record dan tabel anggota juga mempunyai 10 record maka hasilnya berisi 100 record.

SELECT *

FROM "Employee.dbf", "Items.db"

 

7. “UNION”

Syntax:

SELECT col_1 [, col_2, ... col_n]

FROM table_reference

UNION [ALL]

SELECT col_1 [, col_2, ... col_n]

FROM table_reference

Menyusun record satu tabel pada akhir tabel yang lain. Pernyataan SELECT untuk tabel sumber dan anggota harus berisi kolom dengan jumlah yang sama.

SELECT

CustNo,

Company

FROM Customers

UNION

SELECT

CustNo,

Company

FROM Old_Customers

Jika ada perbedaan tipe data kolom tertentu di antara dua tabel, suatu pesan kesalahan akan terjadi jika kolom yang sama dari tabel kedua (atau selanjutnya) kehilangan data. Sebagai contoh, kolom tabel pertama bertipe Date dan kolom tabel kedua bertipe TimeStamp, sebagian nilai bertipe TimeStamp akan hilang jika memasukkan kolom bertipe Date. Pesan kesalahan akan dibangkitkan untuk situasi ini. Gunakan fungsi CAST untuk mengubah tipe kolom tersebut.

SELECT

S.ID,

CAST(S.Date_Field AS TIMESTAMP)

FROM Source S

UNION ALL

SELECT

J.ID,

J.Timestamp_Field

FROM Joiner J

Secara default, operator UNION akan mengumpulkan record non-distinct dalam record tunggal. Gunakan ALL untuk mempertahankan record non-distinct. Untuk menggabungkan dua buah tabel dimana satu tabel tidak mempunyai suatu kolom tabel lain, gunakan suatu ekpresi atau literal yang sesuai. Sebagai contoh, tabel Joining tidak mempunyai kolom yang sesuai dengan kolom Name dari tabel Source, buat ekpresi untuk menampung nilai kolom bayangan Joining.Name. Kolom Source.Name diasumsikan bertipe CHAR(10).

SELECT

S.ID,

S.Name

FROM Source S

UNION ALL

SELECT

J.ID,

CAST("" AS CHAR(10))

FROM Joiner J

 

8. “HETEROGENEOUS”

Syntax:

SELECT column_list

FROM ":database_reference:table_reference", ":database_reference:table_reference"

[,":database_reference:table_reference"...]

WHERE predicate [AND predicate...]

Menggabungkan dua buah tabel dari database yang berbeda. Tabel yang digabung dapat bertipe dBASE ke Paradox atau Paradox ke InterBase, selama dapat diakses oleh BDE (local, ODBC, or SQL Links).

SELECT *

FROM ":DBDEMOS:Customer.db" C, ":BCDEMOS:Orders.db" O

WHERE (C.CustNo = O.CustNo)

 

Sumber :

http://mysql.phi-integration.com/sql/tipe-tipe-join-pada-mysql-5

http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html