Subquires in The From Clause

Subquery merupakan “query di dalam query”. atau perintah SELECT yang berada dalam perintah SELECT lainnya.

Subquery terdiri dari dua perintah SELECT. Perintah SELECT pertama disebut Outer Query atau query induk, sedangkan query yang berada pada klausa WHERE disebut Inner Query.

Inner Query akan dikerjakan lebih dahulu dan hasilnya akan digunakan sebagai pembanding pada pencarian data di klausa WHERE outer query.

Contoh Sederhana:

1. buatlah sebuah struktur table sebagai berikut:

CREATE TABLE IF NOT EXISTS `tbl_dp_customer` (
`id` int(11) NOT NULL,
`id_tto` varchar(20) NOT NULL,
`bayar_dp` int(11) NOT NULL,
`keterangan` varchar(20) NOT NULL,
`tgl_bayar_dp` date NOT NULL,
`reture` enum(‘Y’,’N’) NOT NULL DEFAULT ‘N’,
`tgl_reture` date NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

INSERT INTO `tbl_dp_customer` (`id`, `id_tto`, `bayar_dp`, `keterangan`, `tgl_bayar_dp`, `reture`, `tgl_reture`) VALUES
(1, ‘1837201512061051’, 0, ‘TUNGGU ACC DARI LISI’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(2, ‘1837201512061051’, 100000, ‘PEMBAYARAN 1’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(3, ‘1837201512060127’, 200000, ‘PEMBAYARAN 1’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(4, ‘1837201512060127’, 100000, ‘PEMBAYARAN 2’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(5, ‘1837201512060127’, 50000, ‘PEMBAYARAN 3’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(6, ‘1837201512060229’, 100000, ‘PEMBAYARAN 1’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(7, ‘1837201512061051’, 400000, ‘PEMBAYARAN 2’, ‘2015-12-06’, ‘N’, ‘0000-00-00’),
(8, ‘1837201512060229’, 100000, ‘RETURE’, ‘0000-00-00’, ‘Y’, ‘2015-12-06’),
(9, ‘1837201512060127’, 350000, ‘RETURE’, ‘0000-00-00’, ‘Y’, ‘2015-12-06’),
(10, ‘1837201512060451’, 250000, ‘PEMBAYARAN 1’, ‘2015-12-06’, ‘N’, ‘0000-00-00’);

2. kemudian run sintaks dasar perintah SQL seperti berikut:

#  SELECT * FROM `tbl_dp_customer`

table 1

3. kemudian SELECT kedua perintah SQL sebagai berikut:

# SELECT id_tto, bayar_dp, keterangan FROM tbl_dp_customer WHERE bayar_dp = 50000

table 1
4. sintaks dengan subquery:

#  SELECT * FROM `tbl_dp_customer` WHERE bayar_dp>(select bayar_dp from tbl_dp_customer WHERE bayar_dp=50000)

table 1

Data table yang ditampilkan terlihat bayar_dp=50000 tidak ada, dan ada dua perintah SELECT yang dijalankan.

 

STUDI KASUS

Pertanyaan, bagaimana jika owner/user ingin mendapatkan sebuah informasi netto dp yang diperoleh.

Jawab:

1. Tentukan terlebih dahulu jumlah dp tanpa ‘RETURE’
2. Kemudian, kurangi dari jumlah dp dengan ciri keterangan = ‘RETURE’

berikut SQL nya:

SELECT
sumnotreture_dp – sumreture_dp as nettodp
FROM
(SELECT SUM(bayar_dp) AS sumreture_dp FROM tbl_dp_customer where keterangan=‘RETURE’) AS a,
(SELECT SUM(bayar_dp) AS sumnotreture_dp FROM tbl_dp_customerwhere keterangan<>‘RETURE’ ) AS b

Result:

table 1

Sumber: Oracle Certified Professional (OCP) Exam 1z0-007 & Exam 1z0-051
Regards,

Okto Alhamda Puta

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s