Nested Select atau Subquery di MySQL

Halo semua, kali ini penulis akan membahas mengenai nested query select di MySQL. Apa itu Nested Select? ayoo siapa yang tau?? :D
Nested Select adalah query select yang didalam nya ada query select lagi.. Wah seperti apa ya? Mari kita bahas, pertama kita masuk ke mysql nya dulu yaa... ^_^

Karena penulis belum ada database kosong, maka akan dibuat dahulu databasenya..

ariefsetya@ARIEF-PCX:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database latihanquery;
Query OK, 1 row affected (0,04 sec)

mysql> use latihanquery
Database changed

 

​selanjutnya kita buat nih table nya untuk sekedar latihan saja.. :D

mysql> create table negara(
    -> id int(11) not null primary key auto_increment,
    -> nama varchar(50) not null,
    -> populasi int(10) not null,
    -> luaswilayah int(10) not null,
    -> warna enum('merah','hijau','biru') not null);
Query OK, 0 rows affected (0,21 sec)

sekarang kita insert data nya ke table negara

mysql> insert into negara (`nama`,`populasi`,`luaswilayah`,`warna`) values ('Indonesia',1423742293,239482938,'hijau');
Query OK, 1 row affected (0,05 sec)

mysql> insert into negara (`nama`,`populasi`,`luaswilayah`,`warna`) values ('Italia',37478348,9584848,'biru');
Query OK, 1 row affected (0,06 sec)

mysql> insert into negara (`nama`,`populasi`,`luaswilayah`,`warna`) values ('Argentina',1928329,9858494,'merah');
Query OK, 1 row affected (0,04 sec)

mysql> insert into negara (`nama`,`populasi`,`luaswilayah`,`warna`) values ('Singapura',3734,934893,'merah');
Query OK, 1 row affected (0,08 sec)

mysql> insert into negara (`nama`,`populasi`,`luaswilayah`,`warna`) values ('Inggris',2273949,99182773,'hijau');
Query OK, 1 row affected (0,03 sec)

mysql> insert into negara (`nama`,`populasi`,`luaswilayah`,`warna`) values ('Amerika Serikat',8847573,3772739,'merah');
Query OK, 1 row affected (0,05 sec)
mysql> select*from negara;
+----+-----------------+------------+-------------+-------+
| id | nama            | populasi   | luaswilayah | warna |
+----+-----------------+------------+-------------+-------+
|  1 | Indonesia       | 1423742293 |   239482938 | hijau |
|  2 | Italia          |   37478348 |     9584848 | biru  |
|  3 | Argentina       |    1928329 |     9858494 | merah |
|  4 | Singapura       |       3734 |      934893 | merah |
|  5 | Inggris         |    2273949 |    99182773 | hijau |
|  6 | Amerika Serikat |    8847573 |     3772739 | merah |
+----+-----------------+------------+-------------+-------+
6 rows in set (0,00 sec)

OK sekarang kita bisa mulai dengan contoh pertama, kita akan melakukan query untuk mencari negara mana yang populasinya lebih besar dari Argentina, berikut ini script SQL nya

mysql> select nama, populasi from negara where populasi > (select populasi from negara where nama='Argentina');
+-----------------+------------+
| nama            | populasi   |
+-----------------+------------+
| Indonesia       | 1423742293 |
| Italia          |   37478348 |
| Inggris         |    2273949 |
| Amerika Serikat |    8847573 |
+-----------------+------------+
4 rows in set (0,00 sec)

cukup mudah bukan?

Selanjutnya kita akan mencari negara yang warna negara nya sama dengan negara Indonesia, cekidot...

mysql> select nama from negara where warna = (select warna from negara where nama='Indonesia');
+-----------+
| nama      |
+-----------+
| Indonesia |
| Inggris   |
+-----------+
2 rows in set (0,00 sec)

masih mudah? OK kita lanjutkan, sekarang kita akan mencari nama negara yang warna negara nya berbeda dari Indonesia dan luas wilayah nya lebih dari luas wilayah nya Amerika Serikat, yuk kita coba

mysql> select nama,warna,luaswilayah from negara where warna <> (select warna from negara where nama='Indonesia') and luaswilayah > (select luaswilayah from negara where nama='Amerika Serikat');
+-----------+-------+-------------+
| nama      | warna | luaswilayah |
+-----------+-------+-------------+
| Italia    | biru  |     9584848 |
| Argentina | merah |     9858494 |
+-----------+-------+-------------+
2 rows in set (0,01 sec)

masih cukup mudah kan? sekarang kita akan kombinasikan subquery dan query utama nya, yaitu kita akan mencari warna negara yang sama dengan Singapura dan mencari jumlah warna yang ada seperti warna negara Singapura tersebut

mysql> select nama, warna as color, (select count(id) from negara where warna=color) as jumlah from negara where warna = (select warna from negara where nama='Singapura');
+-----------------+-------+--------+
| nama            | color | jumlah |
+-----------------+-------+--------+
| Argentina       | merah |      3 |
| Singapura       | merah |      3 |
| Amerika Serikat | merah |      3 |
+-----------------+-------+--------+
3 rows in set (0,00 sec)

dan seperti itulah yang di namakan nested select atau sub query secara sederhana, pasti nya ada lagi yang lebih rumit dari ini, jangan mudah menyerah terus semangat!! wink




Thursday, 17 Sep 2015 12:29 PM Arief Setya
Sign In
Sign In to Your Account :)
Sign In or Sign Up
 
Follow Us on Twitter
Find Us on Facebook