Cheat Sheet Dasar-Dasar SQL yang dapat membantu Anda untuk membuat query pada kondisi yang berbeda. Contoh data pada panduan ini menggunakan data dari PowerDNS yang telah dimodifikasi untuk memudahkan pemahaman pada setiap skenario yang dibuat.
Aliases #
Table domains
name | type |
---|---|
srv1.de | NATIVE |
muterin.local | NATIVE |
Contoh query
select name as domain, type from domains;
Output
+---------------+--------+
| domain | type |
+---------------+--------+
| srv1.de | NATIVE |
| muterin.local | NATIVE |
+---------------+--------+
2 rows in set (0.000 sec)
Monitoring #
Untuk melihat jumlah koneksi user MySQL yang sedang terhubung.
SELECT SUBSTRING_INDEX(host, ':', 1) AS host_short, GROUP_CONCAT(DISTINCT user) AS users, COUNT(*) AS threads
FROM information_schema.processlist
WHERE db IS NOT NULL
GROUP BY host_short;
Skenario 1 #
Tabel records
content | ttl | type | domain_id | disabled | name |
---|---|---|---|---|---|
192.168.100.10 | 300 | A | 3 | 0 | ns1.topan.host |
192.168.100.31 | 300 | A | 3 | 0 | ns2.topan.host |
192.168.100.11 | 300 | A | 3 | 0 | man.topan.host |
192.168.100.12 | 300 | A | 3 | 0 | w1.topan.host |
192.168.100.13 | 300 | A | 3 | 0 | w2.topan.host |
192.168.100.40 | 300 | A | 6 | 0 | demo.topan.biz |
192.168.100.41 | 300 | A | 6 | 0 | member.topan.biz |
Tabel domains
id | name | type |
---|---|---|
3 | topan.host | NATIVE |
6 | topan.biz | NATIVE |
Buat query untuk menampilkan records
pada domain topan.host.
select content,ttl,type,domain_id,disabled,name
from records
where domain_id=(select id from domains where name='topan.host')
Output.
+----------------+------+------+-----------+----------+----------------+
| content | ttl | type | domain_id | disabled | name |
+----------------+------+------+-----------+----------+----------------+
| 192.168.100.10 | 300 | A | 3 | 0 | ns1.topan.host |
| 192.168.100.31 | 300 | A | 3 | 0 | ns2.topan.host |
| 192.168.100.11 | 300 | A | 3 | 0 | man.topan.host |
| 192.168.100.12 | 300 | A | 3 | 0 | w1.topan.host |
| 192.168.100.13 | 300 | A | 3 | 0 | w2.topan.host |
+----------------+------+------+-----------+----------+----------------+
5 rows in set (0.004 sec)
Skenario 2 #
Table user
id | username | password | name | role_id | |
---|---|---|---|---|---|
1 | admin | $2b$12$3k9SPj8B6meId | admin | [email protected] | 1 |
Buat query untuk menambah user dengan password
dan role_id
yang sama.
insert into user (username, password, name, email, role_id)
select 'manager', password, 'manager IT', '[email protected]', role_id
from user;
Output.
| id | username | password | name | email | role_id |
|----|----------|--------------------------|---------|-------------------|---------|
| 1 | admin | $2b$12$3k9SPj8B6meId | admin | [email protected] | 1 |
| 2 | manager | $2b$12$3k9SPj8B6meId | admin | [email protected] | 1 |
2 rows in set (0.006 sec)
Skenario 3 #
Tabel records
content | ttl | type | domain_id | disabled | name |
---|---|---|---|---|---|
192.168.100.11 | 300 | A | 3 | 0 | topan.host |
192.168.100.12 | 300 | A | 3 | 0 | w1.topan.host |
topan.host | 300 | CNAME | 3 | 1 | w2.topan.host |
192.168.100.40 | 300 | A | 6 | 0 | demo.topan.biz |
192.168.100.41 | 300 | A | 6 | 0 | topan.biz |
topan.biz | 300 | CNAME | 6 | 1 | member.topan.biz |
topan.biz | 300 | CNAME | 6 | 0 | shop.topan.biz |
Buat query untuk menampilkan semua record CNAME yang sedang aktif.
select content,ttl,type,domain_id,disabled,name
from records
where type='CNAME' and disabled=0;
Output
+----------------+------+--------+-----------+----------+----------------+
| content | ttl | type | domain_id | disabled | name |
+----------------+------+--------+-----------+----------+----------------+
| topan.biz | 300 | CNAME | 6 | 0 | shop.topan.biz |
+----------------+------+--------+-----------+----------+----------------+
1 rows in set (0.001 sec)
Skenario 4 #
Tabel records
content | ttl | prio | type | domain_id | disabled | name |
---|---|---|---|---|---|---|
192.168.100.40 | 300 | 0 | A | 6 | 0 | demo.topan.biz |
192.168.100.32 | 300 | 0 | A | 7 | 0 | stage.jovis.my.id |
192.168.100.32 | 300 | 0 | NULL | 7 | 0 | null.jovis.my.id |
192.168.100.32 | 300 | 0 | NULL | 7 | 0 | null1.jovis.my.id |
192.168.100.32 | 300 | 0 | NULL | 7 | 0 | null2.jovis.my.id |
Buat query untuk menghapus semua data dengan type NULL.
delete from records where type is null;
Skenario 5 #
Tabel domain
id | name | dnssec | type | serial |
---|---|---|---|---|
3 | topan.host | 0 | Native | 2023081105 |
6 | topan.biz | 0 | Native | 2023081404 |
7 | jovis.my.id | 0 | Native | 2023081502 |
Tabel domainmetadata
id | domain_id | kind | content |
---|---|---|---|
6 | 3 | SOA-EDIT-API | DEFAULT |
13 | 6 | SOA-EDIT-API | DEFAULT |
15 | 7 | SOA-EDIT-API | DEFAULT |
Buat query untuk menampilkan kind
dan content
pada tabel domainmetadata sesuai dengan name
pada table domain.
select kind,content
from domain, domainmetadata
where domainmetadata.domain_id=domain.id and name='jovis.my.id';
Output
+--------------+---------+
| kind | content |
+--------------+---------+
| SOA-EDIT-API | DEFAULT |
+--------------+---------+
1 row in set (0.003 sec)
Skenario 6 #
Table domains
id | name | type |
---|---|---|
3 | srv1.de | NATIVE |
4 | muterin.local | NATIVE |
Table records
domain_id | name | type | content | disabled |
---|---|---|---|---|
3 | man.srv1.de | A | 192.168.33.11 | 0 |
4 | muterin.local | A | 192.168.33.11 | 0 |
3 | w1.srv1.de | A | 192.168.33.12 | 0 |
3 | w2.srv1.de | A | 192.168.33.13 | 0 |
4 | demo.muterin.local | A | 192.168.33.100 | 0 |
3 | srv1.de | A | 192.168.160.22 | 0 |
Buat query untuk menampilkan semua domain yang ada di table domains utama beserta A record.
select domains.id, domains.name, records.content, domains.type
from domains
left join records on records.domain_id=domains.id and records.type='A' and records.name=domains.name
where records.disabled=0;
Output
+----+---------------+----------------+--------+
| id | name | content | type |
+----+---------------+----------------+--------+
| 3 | srv1.de | 192.168.160.22 | NATIVE |
| 4 | muterin.local | 192.168.33.11 | NATIVE |
+----+---------------+----------------+--------+
2 rows in set (0.001 sec)
Skenario 7 #
Table records
name | type | content | ttl | disabled |
---|---|---|---|---|
w2.srv1.de | A | 192.168.33.13 | 300 | 0 |
demo.muterin.local | A | 192.168.33.100 | 300 | 0 |
srv1.de | A | 192.168.160.22 | 300 | 0 |
man.srv1.de | A | 192.168.33.11 | 1800 | 0 |
w1.srv1.de | A | 192.168.33.12 | 1800 | 0 |
muterin.local | A | 192.168.33.11 | 1800 | 0 |
Buat query untuk menampilkan record dengan ttl
lebih dari 300.
select name, type, content, ttl, disabled
from records
where ttl > 300 and disabled=0;
Output
+---------------+------+---------------+------+----------+
| name | type | content | ttl | disabled |
+---------------+------+---------------+------+----------+
| man.srv1.de | A | 192.168.33.11 | 1800 | 0 |
| w1.srv1.de | A | 192.168.33.12 | 1800 | 0 |
| muterin.local | A | 192.168.33.11 | 1800 | 0 |
+---------------+------+---------------+------+----------+
3 rows in set (0.000 sec)
Skenario 8 #
Table records
name | type |
---|---|
a-demo.muterin.local | TXT |
demo.muterin.local | A |
demo.muterin.local | TXT |
man.srv1.de | A |
muterin.local | A |
muterin.local | SOA |
srv1.de | A |
srv1.de | SOA |
w1.srv1.de | A |
w2.srv1.de | A |
Buat query untuk menampilkan semua records kecuali A
record.
select name,type from records where type !='A';
Output
+----------------------+------+
| name | type |
+----------------------+------+
| a-demo.muterin.local | TXT |
| demo.muterin.local | TXT |
| muterin.local | SOA |
| srv1.de | SOA |
+----------------------+------+
4 rows in set (0.001 sec)
Skenario 9 #
Tabel domains
id | name |
---|---|
4 | muterin.local |
3 | srv1.de |
Tabel records
domain_id | name | type |
---|---|---|
3 | w2.srv1.de | A |
4 | a-demo.muterin.local | TXT |
4 | demo.muterin.local | A |
4 | demo.muterin.local | TXT |
3 | srv1.de | A |
3 | man.srv1.de | A |
3 | w1.srv1.de | A |
3 | srv1.de | SOA |
4 | muterin.local | A |
4 | muterin.local | SOA |
Buat query untuk menampilkan semua record TXT
dan SOA
yang ada pada domain di table domains.
select d.id, d.name, r.type
from domain d
join records r on r.domain_id=d.id and r.type in ('SOA','TXT');
Output
+----+---------------+------+
| id | name | type |
+----+---------------+------+
| 4 | muterin.local | TXT |
| 4 | muterin.local | TXT |
| 4 | muterin.local | SOA |
| 3 | srv1.de | SOA |
+----+---------------+------+
4 rows in set (0.001 sec)
Skenario 10 #
Tabel records
domain_id | name | type |
---|---|---|
3 | w2.srv1.de | A |
4 | a-demo.muterin.local | TXT |
4 | demo.muterin.local | A |
4 | demo.muterin.local | TXT |
3 | srv1.de | A |
3 | man.srv1.de | A |
3 | w1.srv1.de | A |
3 | srv1.de | SOA |
4 | muterin.local | A |
4 | muterin.local | SOA |
Buat query untuk menampilkan record A
dan TXT
lalu sortir berdasarkan domain_id
.
select domain_id,name,type
from records
where (type='A' OR type='TXT') order by domain_id asc;
Output
+-----------+----------------------+------+
| domain_id | name | type |
+-----------+----------------------+------+
| 3 | w2.srv1.de | A |
| 3 | srv1.de | A |
| 3 | man.srv1.de | A |
| 3 | w1.srv1.de | A |
| 4 | a-demo.muterin.local | TXT |
| 4 | demo.muterin.local | A |
| 4 | demo.muterin.local | TXT |
| 4 | muterin.local | A |
+-----------+----------------------+------+
8 rows in set (0.001 sec)