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 / Operator | Makna |
WHERE | Filter pencarian data |
AND, OR, NOT | Operator pelengkap WHERE |
LIKE | Operator pelengkap WHERE |
ORDER BY | Mengurutkan data secara A-Z / Z-A |
LIMIT | Membatasi hasil pencarian |
AGGREGATION | Fungsi agregasi |
GROUP BY | Mengelompokkan nilai berdasarkan field |
Contents
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