Perintah DQL mysql
Database

Belajar MySQL Dasar : Memahami perintah DQL

Data Query Language (DQL) adalah perintah SQL untuk query data.

Perintah DQL yaitu

SELECT -> digunakan untuk melakukan query data dari database

Cara penulisan perintah SELECT

SELECT field1, field2, field3, ...
FROM nama_table; 

Jika ingin membaca semua field table gunakan tanda *

SELECT * 
FROM nama_table;

Misal kita telah membuat database universitas dengan table mahasiswa seperti materi DDL dan mengisi nilai dengan materi DML

INSERT INTO mahasiswa 
VALUES 
(21400200,"faqih","bandung"),
(21400201,"ina","jakarta"),
(21400202,"anto","semarang"),
(21400203,"dani","padang");

Kita gunakan perintah SELECT untuk mengambil data mahasiswa dan menampilkannya di layar

> SELECT * FROM mahasiswa;
+----------+-------+----------+
| nim      | nama  | alamat   |
+----------+-------+----------+
| 21400200 | faqih | bandung  |
| 21400201 | ina   | jakarta  |
| 21400202 | anto  | semarang |
| 21400203 | dani  | padang   |
+----------+-------+----------+
4 rows in set (0.00 sec)

Jika hanya ingin menampilkan beberapa atribut dari mahasiswa maka harus ditentukan field yang ingin di- SELECT

> SELECT nama, alamat FROM mahasiswa;
+-------+----------+
| nama  | alamat   |
+-------+----------+
| faqih | bandung  |
| ina   | jakarta  |
| anto  | semarang |
| dani  | padang   |
+-------+----------+
4 rows in set (0.00 sec)

Ada beberapa klausa dan operator penting untuk melakukan filter dan aggregasi dari perintah SELECT antara lain

Klausa / OperatorMakna
WHEREFilter pencarian data
AND, OR, NOTOperator pelengkap WHERE
LIKEOperator pelengkap WHERE
ORDER BYMengurutkan data secara A-Z / Z-A
LIMITMembatasi hasil pencarian
AGGREGATIONFungsi agregasi
GROUP BYMengelompokkan nilai berdasarkan field
WHERE

WHERE digunakan sebagai pelengkap SELECT untuk filter pencarian data.

SELECT field1, field2, field3, ...
FROM nama_table
WHERE kondisi

Misal mencari data mahasiswa yang bernama anto

> SELECT * FROM mahasiswa WHERE nama="anto";
+----------+------+----------+
| nim      | nama | alamat   |
+----------+------+----------+
| 21400202 | anto | semarang |
+----------+------+----------+
1 row in set (0.00 sec)
AND, OR, NOT

Klausa WHERE dapat dikombinasikan dengan operator AND, OR dan NOT

Operator AND akan menghasilkan nilai TRUE jika kedua pernyataan bernilai benar

SELECT field1, field2, field3, ...
FROM nama_table
WHERE kondisi1 AND kondisi2

Contoh, mencari data mahasiswa yang bernama anto dan beralamat semarang

> SELECT * FROM mahasiswa WHERE nama="anto" AND alamat="semarang";
+----------+------+----------+
| nim      | nama | alamat   |
+----------+------+----------+
| 21400202 | anto | semarang |
+----------+------+----------+
1 row in set (0.00 sec)

Sekarang kita coba cari data mahasiswa yang bernama anto dan beralamat jakarta

> SELECT * FROM mahasiswa WHERE nama="anto" AND alamat="jakarta";
Empty set (0.00 sec)

Tidak mendapatkan nilai apapun karena saat pencarian terdapat 2 pernyataan yang bernilai TRUE dan FALSE (mahasiswa anto di database hanya berasal dari semarang)

Operator OR akan menghasilkan nilai TRUE jika salah satu pernyataan bernilai benar

SELECT field1, field2, field3, ...
FROM nama_table
WHERE kondisi1 OR kondisi2

Jika kita mencari data mahasiswa yang bernama anto atau mahasiswa yang beralamat jakarta

> SELECT * FROM mahasiswa WHERE nama="anto" OR alamat="jakarta";
+----------+------+----------+
| nim      | nama | alamat   |
+----------+------+----------+
| 21400201 | ina  | jakarta  |
| 21400202 | anto | semarang |
+----------+------+----------+
2 rows in set (0.00 sec)

Maka dengan operator OR akan dicari data mahasiswa yang bernama anto dan mahasiswa yang berasal dari jakarta

Operator NOT akan menghasilkan nilai TRUE jika pernyataan bernilai salah

SELECT field1, field2, field3, ...
FROM nama_table
WHERE NOT kondisi

Contoh, mencari data mahasiswa yang tidak bernama anto

> SELECT * FROM mahasiswa WHERE NOT nama="anto";
+----------+-------+---------+
| nim      | nama  | alamat  |
+----------+-------+---------+
| 21400200 | faqih | bandung |
| 21400201 | ina   | jakarta |
| 21400203 | dani  | padang  |
+----------+-------+---------+
3 rows in set (0.00 sec)
LIKE

Klausa WHERE dapat dikombinasikan dengan operator LIKE untuk mencari data yang lebih spesifik berdasarkan pola

SELECT field1, field2, field3, ...
FROM nama_table
WHERE kondisi LIKE '%pola%';

Mencari data mahasiswa yang mempunyai nama dengan pola ‘an’

> SELECT * FROM mahasiswa WHERE nama LIKE '%an%';
+----------+------+----------+
| nim      | nama | alamat   |
+----------+------+----------+
| 21400202 | anto | semarang |
| 21400203 | dani | padang   |
+----------+------+----------+
2 rows in set (0.00 sec)

Data yang dihasilkan adalah nama anto dan dani yang mempunyai komposisi huruf ‘an’

ORDER BY

ORDER BY digunakan sebagai pelengkap SELECT untuk mengurutkan data secara ascending (A-Z) atau descending (Z-A)

SELECT field1, field2, field3, ...
FROM nama_table
ORDER BY field1 | field2 | field3 ... ASC | DESC

Misal kita ingin menampilkan data mahasiswa berdasarkan nama terurut dari huruf A – Z

> SELECT * FROM mahasiswa ORDER BY nama ASC;
+----------+-------+----------+
| nim      | nama  | alamat   |
+----------+-------+----------+
| 21400202 | anto  | semarang |
| 21400203 | dani  | padang   |
| 21400200 | faqih | bandung  |
| 21400201 | ina   | jakarta  |
+----------+-------+----------+
4 rows in set (0.00 sec)

Misal ingin menampilkan data mahasiswa yang mempunyai nama dengan pola ‘an‘ dan terurut dari huruf Z – A dengan kolom nama dan alamat saja

> SELECT nama,alamat FROM mahasiswa WHERE nama LIKE '%an%' ORDER BY nama DESC;
+------+----------+
| nama | alamat   |
+------+----------+
| dani | padang   |
| anto | semarang |
+------+----------+
2 rows in set (0.00 sec)

Menggabungkan klausa WHERE dan operator LIKE dengan ORDER BY

Contoh lainnya untuk mengurutkan data berdasarkan 2 field / kolom. Misal data diurutkan berdasarkan field nama kemudian alamat

> SELECT * FROM mahasiswa ORDER BY nama,alamat ASC;
+----------+-------+----------+
| nim      | nama  | alamat   |
+----------+-------+----------+
| 21400202 | anto  | semarang |
| 21400203 | dani  | padang   |
| 21400200 | faqih | bandung  |
| 21400201 | ina   | jakarta  |
+----------+-------+----------+
4 rows in set (0.00 sec)
LIMIT

Keyword LIMIT digunakan untuk membatasi hasil pencarian

SELECT field1, field2, field3, ...
FROM nama_table
LIMIT N

Misal kita ingin mencari data mahasiswa yang terurut berdasarkan nama sebanyak 3 teratas

> SELECT * FROM mahasiswa ORDER BY nama ASC LIMIT 3;
+----------+-------+----------+
| nim      | nama  | alamat   |
+----------+-------+----------+
| 21400202 | anto  | semarang |
| 21400203 | dani  | padang   |
| 21400200 | faqih | bandung  |
+----------+-------+----------+
3 rows in set (0.00 sec)
AGGREGATION

Fungsi AGGREGATION digunakan untuk melakukan aggregasi data sehingga mendapatkan satu nilai berdasarkan hasil kalkulasi

Ada beberapa fungsi yang banyak digunakan seperti COUNT(), MIN(), MAX(), AVG(), SUM()

COUNT() -> menghitung jumlah data
MIN() -> mencari data terkecil
MAX() -> mencari data terbesar
AVG() -> mencari nilai rata-rata
SUM() -> mencari jumlah nilai

Sebelum melanjutkan ke Hands On kita akan tambah table mahasiswa dengan field UMUR dan setiap mahasiswa akan diberikan nilai UMUR

> SELECT * FROM mahasiswa;
+----------+-------+----------+
| nim      | nama  | alamat   |
+----------+-------+----------+
| 21400200 | faqih | bandung  |
| 21400201 | ina   | jakarta  |
| 21400202 | anto  | semarang |
| 21400203 | dani  | padang   |
+----------+-------+----------+
4 rows in set (0.00 sec)

> ALTER TABLE mahasiswa ADD umur INT(2);
Query OK, 0 rows affected (0.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

> UPDATE mahasiswa SET umur=17 WHERE nim=21400200;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

> UPDATE mahasiswa SET umur=18 WHERE nim=21400201;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

> UPDATE mahasiswa SET umur=19 WHERE nim=21400202;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

> UPDATE mahasiswa SET umur=20 WHERE nim=21400203;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

> SELECT * FROM mahasiswa;
+----------+-------+----------+------+
| nim      | nama  | alamat   | umur |
+----------+-------+----------+------+
| 21400200 | faqih | bandung  |   17 |
| 21400201 | ina   | jakarta  |   18 |
| 21400202 | anto  | semarang |   19 |
| 21400203 | dani  | padang   |   20 |
+----------+-------+----------+------+
4 rows in set (0.01 sec)

Oke, Kita lanjut ke query data menggunakan fungsi agregasi

Cara menggunakan fungsi agregasi

SELECT fungsi_agregasi(field)
FROM nama_table;

Contoh COUNT(), mencari jumlah data mahasiswa

> SELECT COUNT(*) FROM mahasiswa;
+----------+
| COUNT(*) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)

Contoh MIN(), mencari umur terkecil mahasiswa

> SELECT nama, MIN(umur) FROM mahasiswa;
+-------+-----------+
| nama  | MIN(umur) |
+-------+-----------+
| faqih |        17 |
+-------+-----------+
1 row in set (0.00 sec)

Contoh MAX(), mencari umur terbesar mahasiswa

> SELECT nama, MAX(umur) FROM mahasiswa;
+-------+-----------+
| nama  | MAX(umur) |
+-------+-----------+
| faqih |        20 |
+-------+-----------+
1 row in set (0.00 sec)

Contoh AVG(), mencari rata-rata umur mahasiswa

> SELECT AVG(umur) FROM mahasiswa;
+-----------+
| AVG(umur) |
+-----------+
|   18.5000 |
+-----------+
1 row in set (0.00 sec)

Contoh SUM(), mencari jumlah umur mahasiswa

> SELECT sum(umur) FROM mahasiswa;
+-----------+
| sum(umur) |
+-----------+
|        74 |
+-----------+
1 row in set (0.00 sec)
GROUP BY

GROUP BY digunakan untuk mengelompokkan nilai yang sama berdasarkan field. GROUP BY biasanya digunakan dengan fungsi agregasi

Cara penulisan GROUP BY

SELECT fungsi_agregasi(field)
FROM nama_table
GROUP BY field;

Sebelum lanjut ke Hands On kita akan tambah data mahasiswa terlebih dahulu agar dapat digunakan perintah GROUP BY

INSERT INTO mahasiswa 
VALUES 
(21400205,"jaka","bandung",17),
(21400206,"nara","bandung",17),
(21400207,"senta","semarang",19),
(21400208,"budi","semarang",19),
(21400209,"iqbal","kalimantan",19),
(21400210,"hasan","malang",18),
(21400211,"ali","malang",18);
Query OK, 7 rows affected (0.04 sec)
Records: 7  Duplicates: 0  Warnings: 0

> SELECT * FROM mahasiswa;
+----------+-------+------------+------+
| nim      | nama  | alamat     | umur |
+----------+-------+------------+------+
| 21400200 | faqih | bandung    |   17 |
| 21400201 | ina   | jakarta    |   18 |
| 21400202 | anto  | semarang   |   19 |
| 21400203 | dani  | padang     |   20 |
| 21400205 | jaka  | bandung    |   17 |
| 21400206 | nara  | bandung    |   17 |
| 21400207 | senta | semarang   |   19 |
| 21400208 | budi  | semarang   |   19 |
| 21400209 | iqbal | kalimantan |   19 |
| 21400210 | hasan | malang     |   18 |
| 21400211 | ali   | malang     |   18 |
+----------+-------+------------+------+
11 rows in set (0.00 sec)

Contoh 1, menghitung jumlah mahasiswa berdasarkan alamat

> SELECT alamat, COUNT(*) FROM mahasiswa GROUP BY alamat;
+------------+----------+
| alamat     | COUNT(*) |
+------------+----------+
| bandung    |        3 |
| jakarta    |        1 |
| kalimantan |        1 |
| malang     |        2 |
| padang     |        1 |
| semarang   |        3 |
+------------+----------+
6 rows in set (0.00 sec)

Contoh 2, Mengurutkan data hasil GROUP BY berdasarkan alamat yang paling banyak

> SELECT alamat, COUNT(*) as jumlah FROM mahasiswa GROUP BY alamat ORDER BY jumlah DESC;
+------------+--------+
| alamat     | jumlah |
+------------+--------+
| semarang   |      3 |
| bandung    |      3 |
| malang     |      2 |
| jakarta    |      1 |
| kalimantan |      1 |
| padang     |      1 |
+------------+--------+
6 rows in set (0.00 sec)

Contoh 3, Mencari rata-rata umur mahasiswa berdasarkan alamat mahasiswa dan diurutkan berdasarkan nilai paling banyak

> SELECT alamat, AVG(umur) as rata_umur FROM mahasiswa GROUP BY alamat ORDER BY rata_umur DESC;
+------------+-----------+
| alamat     | rata_umur |
+------------+-----------+
| padang     |   20.0000 |
| semarang   |   19.0000 |
| kalimantan |   19.0000 |
| jakarta    |   18.0000 |
| malang     |   18.0000 |
| bandung    |   17.0000 |
+------------+-----------+
6 rows in set (0.00 sec)

Materi MySQL dibagi menjadi beberapa artikel:

Cara Install XAMPP di Windows dan Linux
Belajar MySQL Dasar : Tutorial MySQL untuk Pemula
Belajar MySQL Dasar : Memahami perintah DDL
Belajar MySQL Dasar : Memahami perintah DML
Belajar MySQL Dasar : Memahami perintah DQL
Belajar MySQL Dasar : Memahami perintah DCL
Belajar MySQL Dasar : Memahami perintah TCL

Belajar MySQL Lanjut : Cara Menggunakan JOIN
Belajar MySQL Lanjut : Cara Membuat Stored Procedure
Belajar MySQL Lanjut : Cara Membuat VIEW
Belajar MySQL Lanjut : Cara Membuat TRIGGER
Belajar MySQL Lanjut : DDL MySQL dengan Python
Belajar MySQL Lanjut : DML MySQL dengan Python
Belajar MySQL Lanjut : DQL MySQL dengan Python

Leave a Reply

Your email address will not be published. Required fields are marked *