Pengenalan perintah Query SQL dasar lengkap dengan contoh

Perintah Query SQL dasar

Mengenal SQL

Structur Query Language (SQL) merupakan bahasa yang banyak digunakan dalam berbagai produk database. SQL dibangun di laboratorium IBM oleh San Jose di Callifornia sekitar tahun 70an. Pertama kali dikembangkan sebagai bahasa di produk database DB2 yang sampai saat ini merupakan produk database andalan IBM. SQL sering di lafalkan dengan “sekuel”.

Saat ini organisasi standar America (ANSI) menetapkan standar bahasa SQL yaitu ANSI-92 standart. Masing-masing vendor database memiliki dialeknya sendiri sebagian besar spesifikasinya mengacu pada standar ANSI tersebut dengan berbagai ekstensi tambahan. SQL Server menggunakan bahasa Transact-SQL dalam produknya, sedangkan Oracle menggunakan PL/SQL.

Baca juga artikel sebelumnya : Penerapan perintah Query SQL beserta contoh Query Database

Dalam pembelajaran pada tutorial ini, penulis menggunakan database MySQL yang sudah terinstal dalam paket program aplikasi XAMPP. Bagi pembaca yang belum mengetahui MySQL, MySQL merupakan software database open source yang paling popular di dunia, dimana saat ini digunakan lebih dari 100 juta pengguna di seluruh dunia.

Dengan kehandalan, kecepatan dan kemudahan penggunaannya, MySQL menjadi pilihan utama bagi banyak pengembang software dan aplikasi baik di platform web maupun desktop. Pengguna MySQL tidak hanya sebatas pengguna perseorangan maupun perusahaan kecil, namun perusahaan besar seperti Yahoo, Alcatel, Google, Youtube, Wordpress maupun Facebook juga merupakan pengguna MySQL.

MySQL pertama kali di buat dan dikembangkan di Swedia, yaitu oleh David Axmark, Allan Larson dan Michael “Monty” Widenius. Mereka mengembagkan MySQL sejak tahun 1980-an. Saat ini versi MySQL yang sudah stabil mencapai versi 5x, dan sedang dikembangkan versi 6x. Untuk lebih lengkapnya dapat dilihat di situs resmi MySQL.

Menyiapkan Database

Untuk contoh praktek pengolahan data menggunakan query sql pada tutorial kali ini, penulis menggunakan HeidiSQL portable. Dan skema tabel-nya dapat digambarkan seperti berikut.

Relasi antar tabel

Pada gambar relasi tabel di atas, penulis ambil dari buku Membangun Aplikasi Web dengan Metode OOP. Apabila ada kekurangan penulisan pada blog ini, maka penulis sarankan untuk melihat lebih detail isi dari buku tersebut.

Query Insert Data

Untuk mengisikan data ke dalam suatu table, maka digunakan perintah INSERT yang meiliki syntax umum sebagai berikut :

INSERT table (column list)
VALUES (value list)

Misalnya untuk mengisikan data customer baru dituliskan perintah berikut :

INSERT INTO `customer` (`id_customer`, `nama_lengkap`, `tempat_lahir`,`tgl_lahir`,`alamat`,`no_telp`,`pekerjaan`,`email`,`password`) VALUES
(1, 'anton', 'jakarta','1991-02-02','bekasi utara', '08123456788', 'karyawan', 'anton@yahoo.com'`,`
$2y$10$2WS2DqZnVvj`);

Perintah berikut meng-isi-kan data di table Customer untuk sembilan kolom yaitu id_customer,  nama_lengkap, tempat_lahir, tgl_lahir, alamat, no_telp, pekerjaan, email. Sedangkan apabila ada kolom lain yang tidak diisi maka akan terisi nilai default sesuai dengan desain tabelnya.

Apabila perintah INSERT digunakan untuk mengisikan seluruh kolom yang terdapat pada suatu table maka nama kolom tidak perlu disebutkan secara eksplisit. Cukup disebutkan nilai data yang akan dimasukkan saja. Misalnya untuk mengisikan data ke table customer yang hanya terdiri dari sembilan kolom dijalankan perintah berikut :

INSERT customer VALUES
(1, 'anton', 'jakarta','1991-02-02','bekasi utara','08123456788','karyawan','anton@yahoo.com','$2y$10$2WS2DqZnVvj');

Pada table customer yang sebelumnya telah kita persiapkan terdapat 12 buah field, jadi silahkan disesuaikan saja.

Query Delete Data

Statement DELETE merupakan kebalikan dari perintah INSERT. Perintah ini digunakan untuk menghapus data yang terdapat di suatu table. Data di hapus per record atau per baris berdasarkan kriteria tertentu.
Penentuan kriteria record mana yang ingin dihapus dapat dilakukan dengan menggunakan klausa WHERE. Misalnya anda ingin menghapus data semua customer yang berada di kota Bandung.
Syntax umum statement ini adalah sebagai berikut :

DELETE FROM table_name
WHERE condition

Untuk menghapus data customer yang bertempat lahir di bandung , maka perintahnya :

DELETE from customer WHERE tempat_lahir=’bandung’

Untuk menghapus data customer berdasarkan id_customer yang merupakan primary key di table :

DELETE from customer WHERE id_customer=3

Selain menggunakan WHERE, dapat juga digabungkan dengan operator LIKE dan BETWEEN untuk membuat kriteria yang lebih fleksibel, misalnya sebagai berikut :

DELETE from customer WHERE tgl_lahir BETWEEN '1990-01-01' AND '1991-02-02'

Perintah tersebut akan menghapus data di table customer yang memiliki tgl_lahir antara tanggal 1 Januari 1990 sampai 2 Februari 1991.
Apabila anda ingin mengosongkan table dan menghapus semua data yang ada di dalamnya, maka gunakan perintah DELETE tanpa menggunakan kondisi WHERE. Contoh berikut adalah perintah untuk mengosongkan isi table customer :

DELETE customer

Perintah tersebut hanya mengosongkan isi table saja tetapi tidak menghapus tabelnya.

Query Update Data

Apabila anda ingin mengedit atau merubah suatu data tanpa menghapusnya maka gunakan perintah UPDATE. Perintah ini menggunakan kondisi tertentu dengan klausa WHERE sebagaimana perintah DELETE.
Syntax umum statement UPDATE adalah sebagai berikut :

UPDATE table_name
SET column1 = value1, column2 = value2, …
WHERE condition

Perintah ini melakukan perubahan pada kolom tertentu sebagaimana yang disebutkan dalam perintah SET. Perubahan dilakukan terhadap record yang memenuhi kriteria di klausa WHERE.
Misalnya anda ingin merubah nama lengkap customer yang memiliki id_customer = 2, maka gunakan perintah berikut :

UPDATE customer SET nama_lengkap='eka hera' WHERE id_customer=2

Selain menggunakan kriteria WHERE, perintah ini juga dapat digabungkan dengan operator LIKE maupun BETWEEN sebagaimana perintah DELETE.

UPDATE customer SET nama_lengkap='eka hera' WHERE (nama_lengkap LIKE '%eka%')

Menampilkan Data

Syntak paling dasar untuk mengambil data dari database adalah

SELECT column
FROM table

Misalnya anda ingin menampilkan beberapa isi data yang ada pada table customer, maka perintahnya adalah

SELECT nama_lengkap, no_ktp, tempat_lahir, tgl_lahir, alamat, no_telp, pekerjaan FROM customer

Untuk menampilkan semua kolom dari suatu table, digunakan tanda asterisk ( * ), daripada menyebutkan nama kolomnya satu per satu. Statement nya sebagai berikut :

SELECT * FROM customer

Maka akan ditampilkan seluruh kolom di table customer yang jumlahnya dua belas kolom.

Meskipun cara ini sangat sederhana untuk menampilkan isi seluruh kolom dari suatu table, anda tetap dianjurkan untuk hanya mengambil data dari kolom yang anda perlukan saja. Pengambilan data yang tidak perlu mengakibatkan penurunan performa aplikasi, apalagi data yang ditampilkan lumayan banyak.

Operator Aritmatika

Selain mengambil data dari database, anda juga dapat melakukan berbagai perhitungan terhadap data tersebut. Berbagai fungsi yang dapat dilakukan adalah penjumlahan, perkalian, pembagian dan pengurangan pada kolom dengan jenis data numeric. Jenis data numeric adalah INT, Smallint, Decimal, Numeric, Float, Real, Money, SmallMoney dan lainnya tergantung DBMS yang digunakan. Operator/symbol yang digunakan adalah sebagai berikut :

  1.  *  perkalian
  2.  /  pembagian
  3.  +  penjumlahan
  4.  -  pengurangan

Contoh berikut menghitung jumlah penumpang + 1 dari table transaksi

SELECT id_transaksi, id_customer, jml_penumpang+1 From transaksi

Menambah jml_penumpang

Apabila kita menggunakan beberapa table dalam penggunaan operator aritmatika dapat dilihat pada contoh  berikut untuk menghitung total pembayaran tiket yang didapat dari perkalian jml_penumpang dan harga.

SELECT nama_lengkap, jml_penumpang 'Jumlah Pemesanan', kode_booking, harga 'harga tiket', jml_penumpang * harga 'Total Bayar'
FROM kelas b, pesawat c, customer d, jadwal e, transaksi f where
b.id_kelas=e.id_kelas and c.id_pesawat=e.id_pesawat and d.id_customer=f.id_customer and
e.id_jadwal=f.id_jadwal

Maka hasilnya dapat anda lihat pada gambar berikut

Menghitung Total Bayar

Bagi pemula, query tersebut memang terlihat rumit, namun penulis akan berikan sedikit penjelasan. Tekniknya adalah kita tentukan terlebih dahulu table mana yang akan digunakan, pada query diatas untuk mendapatkan Total Bayar maka kita membutuhkan field harga (berasal dari table kelas), jml_penumpang dan kode_booking (berasal dari table transaksi), dan juga nama_lengkap (berasal dari table customer), untuk table pesawat bersifat optional apabila nama_pesawat akan ditampilkan.
Setelah kita menentukan field-field mana saja yang akan ditampilkan, maka kita inisialkan satu persatu tabelnya, misalnya table kelas berinisial b, table pesawat berinisial c, dan seterusnya. Lalu kemudian kita relasikan field dari table satu ke field table yang lain, contohnya pada query b.id_kelas = e.id_kelas yang merelasikan id_kelas pada table kelas (b) ke id_kelas pada table jadwal (e). silahkan lihat kembali skema relasi table pada gambar di atas.

Operator Where

Perintah SELECT dan FROM yang telah dibahas sebelumnya hanya menjembatani jumlah kolom yang ditampilkan saja, sedangkan jumlah baris yang dihasilkan tidak dibatasi. Anda sering memerlukan hanya baris atau data yang memenuhi kriteria tertentu saja yang ditampilkan.
Klausa WHERE digunakan untuk menentukan kriteria RECORD yang ditampilkan. Syntax umumnya adalah sebagai berikut :

SELECT columns
FROM table
WHERE conditions

Perintah SQL diatas dapat dimodifikasi agar menampilkan data untuk customer dengan tempat_lahir Jakarta saja. Kode SQL nya menjadi sebagai berikut:

SELECT *
FROM customer WHERE tempat_lahir='jakarta'

Fungsi Agregate

Selain mengambil data dengan kriteria tertentu, sering juga diperlukan berbagai perhitunngan yang bersifat ringkasan. Fungsi agregat merupakan sekumpulan fungsi yang siap dipakai untuk mendapatkan hasil penjumlahan, perhitungan frekuensi, rata-rata dan lain sebagainya. Penggunaan fungsi ini sering digabungkan dengan klausa GROUP BY yang akan dijelaskan nanti.

Fungsi SUM

Apabila anda ingin mendapatkan jumlah dari sekelompok data yang memiliki criteria tertentu maka SUM adalah pilihan yang tepat. Fungsi ini mempunyai bentuk SUM(x), digunakan untuk menghasilkan nilai penjumlahan dari suatu data bilangan, dimana X adalah nilai numeric atau nama field yang memiliki nilai numeric atau rumus yang menghasilkan nilai numerik
Misalnya anda ingin mengitung keseluruhan jumlah penumpang yang mempunyai status ‘Lunas’ dari table transaksi, maka perintahnya

SELECT SUM(jml_penumpang) FROM transaksi WHERE status='lunas'

Fungsi SUM hanya dapat digunakan untuk menjumlahkan kolom dengan type data numeric.

Fungsi COUNT

Untuk menghitung frekuensi pemunculan suatu data digunakan fungsi COUNT. Sebagaimana fungsi SUM, maka COUNT hanya dapat digunakan apabila data tersebut telah ditentukan kriterianya dengan klausa WHERE.
Misalnya anda ingin menghitung jumlah customer yang bertempat lahir di bekasi. Table yang digunakan adalah table customer, maka perintahnya adalah :

SELECT COUNT(id_customer) as Jumlah FROM customer
WHERE tempat_lahir='bekasi'

Fungsi AVG

Fungsi ini hanya dapat digunakan untuk tipe data numeric, sebagaimana fungsi SUM. AVG menghitung rata-rata sekumpulan data yang telah ditentukan kriterianya menggunakan WHERE.

SELECT AVG(jml_penumpang) as Rataan From transaksi
WHERE id_jadwal=1

Contoh di atas menghitung rata-rata transaksi penjualan tiket dengan id_jadwal=1 yang diambil dari record jml_penumpang. Apabila diinginkan menghitung rata-rata seluruh jumlah transaksi penjualan tiket maka perintahnya menjadi :

SELECT AVG(jml_penumpang) as Rataan From transaksi

Fungsi MIN dan MAX

Untuk mencari nilai maksimum dan minimum dari sekumpulan data, anda dapat menggunakan fungsi MIN dan MAX. Misalya anda ingin mencari record jumlah penumpang yang paling besar, maka dijalankan perintah berikut :

SELECT MAX(jml_penumpang) as Maksimum FROM transaksi

Menggunakan Beberapa Fungsi Sekaligus

Fungsi-fungsi agregat yang telah dijelaskan sebelumnya di atas juga dapat digunakan bersama-sama dalam satu perintah. Perhatikan perintah berikut :

SELECT MAX(jml_penumpang) as Maksimum,
MIN(jml_penumpang) as Minimum,
AVG(jml_penumpang) as Average
FROM transaksi

Klausa GROUP BY

Fungsi agregat yang telah dijelaskan sebelumnya hanya menampilkan satu baris hasil. Sering dibutuhkan untuk menampilkan rangkuman dari beberapa kelompok data dalam satu kali tampilan.
Misalnya anda ingin menampilkan nama_lengkap (dari table customer), jml_penumpang, tanggal, kode_booking dan status (dari table transaksi) dimana status nya berisi Lunas dan diurutkan berdasarkan nama_lengkap secara ascending, maka perintahnya adalah sebagai berikut :

SELECT nama_lengkap, SUM(jml_penumpang), tanggal, kode_booking, status
FROM customer INNER JOIN transaksi ON customer.id_customer=transaksi.id_customer
WHERE status='Lunas'
GROUP BY nama_lengkap ASC

Perintah tersebut akan menghitung jumlah tiket penumpang yang terjual untuk setiap id_transaksi dan mengelompokan hasilnya berdasarkan id_customerl tersebut.
Terlihat bahwa SQL telah mengelompokkan jml_penumpang berdasarkan nama_lengkap dan menghitung jumlah di kolom jml_penumpang untuk tiap nama_lengkap customer tersebut.
Hal yang perlu mendapatkan perhatian adalah pada baris terakhir kode program tersebut yakni pada bagian :

GROUP BY nama_lengkap

Bagian ini berfungsi mengelompokkan nama_lengkap berdasarkan id_customer nya. Sedangkan kolom jml_penumpang sendiri telah disebutkan di dalam daftar SELECT. Ini merupakan aturan dasar apabila anda menggunakan GROUP BY dalam perhitungan dengan fungsi agregat. Kolom dalam daftar SELECT yang tidak dihitung dengan fungsi agregat harus dimasukan ke dalam GROUP BY. Pada contoh di atas kolom nama_lengkap masuk dalam daftar SELECT tetapi tidak dihitung menggunakan fungsi SUM, sehingga harus dimasukkan dalam daftar GROUP BY.
Salah satu contoh pengembangan yang lebih kompleks dari perintah penggunaan GROUP BY ini adalah sebagai berikut :

SELECT nama_lengkap, sum(jml_penumpang), tanggal, kode_booking, status
FROM customer INNER JOIN transaksi ON customer.id_customer=transaksi.id_customer
WHERE status='Lunas'
GROUP BY nama_lengkap
ORDER BY nama_lengkap


Perhatikan baik-baik bahwa perinttah ORDER BY harus selalu diletakkan setelah GROUP BY.

Menghilangkan Penggandaan dengan DISTINCT

Penggunaan keyword DISTINCT hampir sama dengan GROUP BY yaitu untuk melakukan grouping hasil pencarian. Tetapi DISTINCT hanya berfungsi menghilangkan duplikasi hasil dan tidak dapat digunakan untuk membantu melakukan berbagai perhitunngan fungsi agregat.
Penerapan praktisnya misalnya anda ingin mencari kota mana saja yang terdapat di table customer (field tempat_lahir). Apabila anda menggunakan perintah SELECT saja maka akan muncul banyak duplikasi karena banyak terdapat customer yang bertempat lahir di kota yang sama. Dengan menggunakan DISTINCT maka duplikasi tersebut dapat dihilangkan.

SELECT DISTINCT tempat_lahir
FROM customer

Cobalah bandingkan hasilnya apabila anda menggunakan perintah berikut :

SELECT tempat_lahir
FROM customer

Membatasi GROUP BY dengan HAVING

Untuk membatasi hasil yang didapat dari suatu perintah yang menggunakan GROUP BY digunakan klausa HAVING. Fungsi klausa ini mirip dengan WHERE tetapi having hanya dapat digunakan bersamaan dengan klausa GROUP BY dan diletakkan sesudah GROUP BY.
Perintah berikut digunakan untuk mencari tiket yang jumlah pemesanannya melebihi 3 tiket di table transaksi :

SELECT id_transaksi, SUM(jml_penumpang) as Jumlah
FROM transaksi
GROUP BY id_transaksi
HAVING SUM(jml_penumpang) > 3


Terlihat jelas bahwa yang ditampilkan hanya yang memiliki jumlah di atas 3 sebagaimana criteria :
HAVING SUM (jml_penumpang) > 3

Mencari Data dengan BETWEEN

Keyword BETWEEN digunakan untuk mencari data yang memenui interval kriteria tertentu dalam suatu kolom. Biasanya digunakan untuk mencari data berdasarkan interval tanggal tertentu.
Penggunaan praktisnya misalnya anda ingin mencari transaksi yang terjadi antara tanggal 1 September 2017 sampai dengan 31 September 2017. Keyword BETWEEN digunakan bersamaan dengan interval tanggal tersebut, perintahnya adalah sebagai berikut :

SELECT *,
(SELECT a.nama_kota from kota a where a.id_kota=e.kota_asal) as kota_asal,
(SELECT a.nama_kota from kota a where a.id_kota=e.kota_tujuan)as kota_tujuan

FROM kelas b, pesawat c, customer d, jadwal e, transaksi f where
b.id_kelas=e.id_kelas and c.id_pesawat=e.id_pesawat and d.id_customer=f.id_customer and
e.id_jadwal=f.id_jadwal and f.status='Lunas' and
(f.tanggal BETWEEN '2017-09-1' and '2017-09-30')

Query tersebut mencari data di table transaksi yang memiliki tanggal transaksi antara tanggal 1 September 2017 sampai dengan 31 September 2017. Pada bagian yang tercetak tebal, penulis menyisipkan sub query sql artinya menggunakan SELECT di dalam SELECT, perintah tersebut menampilkan data kota_asal dan kota_tujuan yang datanya di dapat dari table kota.
Selain menggunakan kriteria tanggal, anda juga dapat menggunakan keyword BETWEEN tersebut untuk tipe data lain misalnya string dan numeric. Misalnya anda ingin menampilkan data customer yang di awali kata user sampai dengan user2, maka gunakan perintah berikut :

SELECT * FROM customer
WHERE nama_lengkap BETWEEN 'user' and 'user2'

Menggabungkan Tabel

Anda telah mempelajari bagaimana menampilkan data dari table serta memfilternya dengan berbagai kriteria. Pada sub bab ini penulis akan jelaskan kembali secara lebih rinci mengenai cara menampilkan data dari table table yang digabungkan.
Perintah SQL dapat digunakan untuk menampilkan data dari 2 atau lebih table. Antara table tersebut harus memiliki penghuibung yaitu Primary Key dan Foreign Key sebagaimana yang telah kita buat di awal Bab ini mengenai pembuatan database dan table. Dengan menggunakan kriteria penghubung tersebut anda dapat menampilkan data dari beberapa table secara konsisten.

Inner Join

Penggabungan table dalam perintah SQL menggunakan keyword JOIN. Jenis penggabungan table yang pertama adalah INNER JOIN. INNER JOIN hanya menampilkan data yang benar-benar terdapat di dalam table yang saling dihubungkan.
Misalnya anda menghubungkan table customer dengan transaksi, maka field penghubung yang digunakan adalah id_customer.

Relasi table customer dan transaksi

Pada gambar tersebut terlihat bahwa id_customer merupakan Primary Key di table customer dan menjadi Foreign Key di table transaksi. Hubungan kedua table tersebut adalah One to Many, dimana satu customer dapat memiliki banyak transaksi yang berulang.
Dalam bentuk INNER JOIN maka hasil yang ditampilkan bahwa record yang memiliki id_customer sama di kedua table tersebut. Apabila terdapat customer yang id_customer nya tidak ditemukan di table transaksi maka data tersebut tidak dapat ditampilkan. Berikut perintahnya :

SELECT nama_lengkap, jml_penumpang, tanggal, kode_booking, status
FROM customer INNER JOIN transaksi ON customer.id_customer=transaksi.id_customer
WHERE status='Lunas'

Perintah SQL tersebut mengambil field nama_lengkap dari table customer, sedangkan field jml_penumpang, tanggal, kode_booking dan status diambil dari table transaksi.
Kunci utama penggabungan dua table tersebut adalah keyword INNER JOIN dengan kriteria id_customer. Perhatikan bahwa nama table juga harus dituliskan sebelum nama field id_customer tersebut.

Antara nama table dengan nama field dibatasi dengan tanda titik ( . ) misalnya transaksi.id_customer. Tujuan pencantuman nama filed tersebut adalah menghindari ambiguitas yang mengakibatkan error apabila perintah tersebut dieksekusi. Karena id_customer tersebut terdapat di kedua table maka nama table harus dicantumkan agar dapat diidentifikasi secara unik field mana yang dimaksud.
Untuk memberikan gambaran lebih kompleks mengenai penerapan penggabungan table ini, anda dapat memodifikasi contoh perintah yang terdapat penggunaan GROUP BY. 

Anda dapat menggabungkan table transaksi tersebut dengan table jadwal yang menyimpan detail jadwal perjalanan. Dengan demikian dapat ditampilkan baik id_transaksi maupun detail jadwalnya.
Pada perintah di atas anda dapat dilihat bahwa semua nama field diawali dengan nama tabelnya. Hal ini menyebabkan penulisan kode perintah menjadi panjang, tetapi sisi positifnya adalah kita dapat langsung mengetahui posisi table dati atiap-tiap field yang ditampilkan. Agar penulisan kode tidak terlalu panjang, maka dapat dibuatkan inisial pada masing-masing table. Perhatikan perintah sql berikut:

SELECT nama_lengkap, jml_penumpang, tanggal, kode_booking, status
FROM customer a INNER JOIN transaksi b ON a.id_customer=b.id_customer
WHERE status='Lunas'

Selain itu jika antara table customer terdapat beberapa field yang namanya sama sehingga apabila tidak dituliskan nama tabelnya berakibat error pada perintah tersebut.

Left Join

Misalkan pada diagram Gambar 4.4 digunakan perintah LEFT JOIN maka apabila table customer disebutkan terlebih dahulu SQL akan menampilkan semua nama customer yang terdapat pada table tersebut. Semua data customer ditampilkan walaupun nama customer nya tidak terdapat di table transaksi.
Penggunaan praktis perintah ini misalnya anda ingin mengetahui frekuensi order semua customer baik yang telah memiliki status Lunas maupun yang belum. Untuk kebutuhan tersebut maka ditampilkan semua customer berikut data frekuensi transaksinya. Perhatikan contoh perintah berikut :

SELECT nama_lengkap, jml_penumpang, tanggal, kode_booking, status
FROM customer LEFT JOIN transaksi ON customer.id_customer=transaksi.id_customer

Karena menggunakan perintah LEFT JOIN maka semua data di table customer ditampilkan seluruhnya walaupun berstatus selain Lunas. Hasil perintah tersebut adalah :

Hasil penggunaan Left Join

Anda dapat melihat terdapat 2 customer yang berstatus Lunas. Di akhir tampilan hasil tersebut terlihat ada 4 baris yang ditampilkan karena ada 1 customer yang memiliki 2 transaksi. Untuk melakukan pengecekan jalankan kemballi perintah berikut :

SELECT COUNT(*) from customer

Artinya terdapat 3 customer di table customer, yaitu sama dengan jumlah baris perintah sebelumnya. Dengan demikian memang benar bahwa LEFT JOIN telah menampilkan seluruh customer yang berjumlah 3.

Right Join

Perintah RIGHT JOIN merupakan kebalikan dari LEFT JOIN, yaitu menampilkan semua isi table yang disebutkan kedua dalam perintah join. Dalam contoh sebelumnya apabila LEFT JOIN diganti RIGHT JOIN maka semua isi table transaksi akan ditampilkan semuanya. Cobalah memodifikasi perintah sebelumnya diatas menjadi sebagai berikut :

SELECT nama_lengkap, jml_penumpang, tanggal, kode_booking, status
FROM customer LEFT JOIN transaksi ON customer.id_customer=transaksi.id_customer

Setelah anda jalankan perintah tersebut lihatlah perbedaannya, dengan perintah LEFT JOIN sebelumnya. Maka terlihat hanya 3 baris, berarti terdapat 1 customer yang id_customer nya tidak terdapat di table transaksi atau yang memiliki status pembayarannya = 0 /tidak ada status.

Full Join

Jenis join terakhir adalah FULL JOIN yang menampilkan semua data dari dua table yang dihubungkan meskipun terdapat data yang tidak memiliki pasangan/relasi di table lainnya.
Misalnya kita mengambil data dari table jadwal dengan table pesawat menggunakan FULL JOIN. Data dari kedua table akan ditampilkan data semuanya.

ORDER BY

ORDER BY digunakan untuk mengurutkan hasil pencarian data. Secara default data yang ditampilkan disorting berdasarkan urutan masuknya data ke dalam table. Dengan menggunakan ORDER BY anda dapat mengurutkan berdasarkan kolom tertentu yang anda kehendaki.
Bila anda perhatikan pada contoh sebelumnya maka data yang dihasilkan telah diurutkan berdasarkan kolom id, anda dapat merubahnya dengan mengurutkan berdasarkan kolom tertentu.

SELECT nama_lengkap, jml_penumpang, tanggal, kode_booking, status
FROM customer INNER JOIN transaksi ON customer.id_customer=transaksi.id_customer
WHERE status='Lunas'
ORDER BY nama_lengkap ASC

Terlihat bahwa data telah diurutkan berdasarkan secara ascending (dari a ke z). anda dapat membalikkan urutan menjadi dari z ke a dengan merubah klausa ORDER BY menjadi seperti berikut ;
ORDER BY desc
Namun, secara default tanpa adanya fungsi asc ataupun desc maka urutan yang dipakai adalah ascending (asc)

Sumber : buku Membangun Aplikasi Web dengan Metode OOP