pada kali ini saya ingin mendokumentasikan tahapan belajar saya mengenai database relational dengan task yang digunakan adalah postgresql, dbeaver, virtualbox dan centos7.
oke, langsung saja pada implementasinya ya....
Tahapan pertama kita akan melakukan instalasi virtualbox pada ubuntu 18.04. hal ini saya lakukan agar belajar mengenal linux CentOS.
Download virtualbox di https://www.virtualbox.org/wiki/Linux_Downloads
Setelah selesai download arahkan ke path direktori tempat downloadnya, ektrak dan install
cd Download/
dpkg -i VirtualBox-5.2_5.2.8-121009~Ubuntu~bionic_amd64.deb.
apt-get -f install
kemudian buka virtualbox yang sudah terinstal
Tahapan kedua kita akan menginstall CentOS7 pada Virtualbox:
- Download ISO CentOS7 (http://isoredirect.centos.org/centos/7/isos/x86_64/)
- klik new pada virtualbox
karena kita mau install centos, maka kasih nama nya "CentOS" dan type "linux", version "Redhat" akan secara default terisi.
berikut tahapan pilihan yang di setting:
kemudian "OK" maka setelah itu mesin virtual centos7 kita siap untuk di instalasi.
setelah itu tekan start.
pilih install CentOs 7 dan berikut ini screen capture pilihan instalasi yang saya gunakan:
kemudian pilih "Begin Installations" dan setelah itu maka akan muncul permintaan untuk setting password root dan setting user akses. Berikut ini adalah settingan yang saya lakukan:
tunggu sampai proses selesai. Setelah selesai maka secara otomatis akan diminta untuk "Reboot" kemudian mesin virtual centos kita siap untuk di operasikan.
setelah itu kita masuk bisa menggunakan root atau user yang tadi kita buat.
Oke, kawan blogger semuanya sampai sini instalasi minimal requiment centos7 kita sudah siap kita gunakan.
Tahapan Ketiga adalah melakukan setting SSH agar kita bisa mengakses virtual mesin kita di tempat lain. Berikut adalah cara yang kita lakukan:
arahkan directory ke :
cd /etc/sysconf ig/network-script
sudo vi ifcfg-enp0s3
ganti ONBOOT=no jadi ONBOOT=yes
caranya:
tekan i untuk insert kemudian tuliskan yes setelah selesai tekan esc, setelah itu tekan shiff+: kemudian tulisan wq untuk save & quit.
setelah itu lakukan reboot dengan mengetik reboot. kemudian, lakukan login kembali dan pengecekan dengan mengetik ip addr
perhatikan pada 2: enp0s3
jika ada link 10.0.2.15/24 maka sudah berhasil. Sekarang kita akan lakukan konfigurasi pada network nya. Dengan cara klik kanan pada bawah gambar mirip monitor 2 bagian itu pilih network setting.
Ok, sampai sini sudah selesai untuk settingan network onboot nya. Kemudian kita test apakah sudah bisa kita gunakan.
Tahapan berikut nya adalah melakukan remote virtual mesin centos7 nya melalui ubuntu 18.04 komputer saya. Caranya adalah melalui SSH : ssh -p 2222 rudy@127.0.0.1
tekan enter dan masukan password user kita pada virtual mesin yang sudah dibuat.
ok, sampai sini kita sudah berhasil melakukan remote virtual mesin kita. Kemudian kita akan mempersiapkan komponen untuk belajar relational database.
Tahapan Ke empat adalah melakukan instalasi postgresql pada virtual mesin centos7 yang kita miliki.
sudo yum -y update
sudo yum install postgresql-server postgresql-contrib
sudo postgresql-setup initdb
lakukan konfigurasi berikut:
sudo vi /var/lib/pgsql/data/pg_hba.conf
ganti
dengan komponen berikut ini:
Setelah selesai keluar dan simpan.
Kemudian, lakukan restart dan enable postgresql.
sudo systemctl start postgresql
sudo systemctl enable postgresql
mari kita buat postgresql role dan database:
sudo -i -u postgres
kemudian kita atur ulang terlebih dahulu password untuk postgres nya.
sudo passwd postgres
sudo vi /var/lib/pgsql/data/pg_hba.conf
tambahkan di IPV4
host all all 192.168.1.0/24 md5
aktifkan listen
listen_addresses='*'
Kemudian, lakukan lagi restart dan enable postgresql.
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo -u postgres psql
buat lah password verifikasi role untuk DB postgres:
ALTER USER postgres PASSWORD 'rty123';
kemudian buka dbeaver dan buatlah koneksi ke DB postgress yang tadi sudah kita buat, berikut adalah tahapannya:
sampai pada tahapan ini kita sudah bisa melakukan koneksi remote virtual mesin dan connector database postgresql ke tools database administrator dbeaver.
Pada umumnya orang ketika menggunakan postgresql maka dia akan menggunakan Pgadmin untuk tools administrator dan develoment nya. Kenapa saya menggunakan dbeaver pada tutorial ini? saya menggunakan dbeaver, alasannya adalah karena:
1. saya lagi malas install banyak tools databases administrator
2. saya senang dengan dbeaver karena dia memiliki service untuk multiplatform administrator3. saya memiliki kebutuhan yang tidak begitu urgent untuk menggunakan pgadmin
jika teman-teman ingin mencoba pgadmin silahkan, nanti bisa sharing-sharing ya ilmunya.
oke teman-teman blogger, pagi ini kita akan masuk ke belajar query-query basic di postgresql.
Tahapan berikut adalah belajar mengenai query postgresql:
sebelumnya kita bikin satu konsep analisis sederhana sehingga kita bisa membuat data yang kita butuhkan.
Pertama, kita buat table dengan nama test_da1 dengan nama variabel : users_id, order_id, creat_time, payment, product
query untuk membuat tabel baru:
create table test_da1(
user_id varchar (8),
order_id varchar (6),
creat_time timestamp,
payment float8,
product varchar (100)
);
silahkan cek tabel data yang sudah dibuat dengan cara:
select *
from test_da1
Setelah itu kita akan memasukan nilai untuk setiap variabel yang sudah kita buat pada tabel test_da1.
insert into test_da1 (user_id, order_id, creat_time, payment, product)
values
('101', '10001', '2018-04-02 5:26:21', '48000', 'pulsa'),
('102', '10002', '2018-04-02 7:44:13', '25000', 'paket data'),
('101', '10003', '2018-04-02 8:26:21', '320000', 'listrik pln'),
('101', '10004', '2018-04-02 8:31:18', '180000', 'air pdam'),
('103', '10005', '2018-04-02 9:32:02', '21000', 'pulsa'),
('102', '10006', '2018-04-02 9:34:11', '200000', 'voucher game'),
('103', '10007', '2018-04-02 9:36:51', '11000', 'pulsa'),
('107', '10008', '2018-04-02 11:06:13', '28000', 'paket data'),
('105', '10009', '2018-04-02 11:16:06', '49000', 'listrik pln'),
('101', '10010', '2018-04-02 12:06:41', '1200000', 'kartu kredit'),
('105', '10011', '2018-04-02 12:12:58', '98000', 'listrik pln'),
('103', '10012', '2018-04-02 13:11:11', '85000', 'bpjs'),
('106', '10013', '2018-04-02 13:12:32', '240000', 'tv kabel'),
('108', '10014', '2018-04-02 13:26:45', '800000', 'multifinance'),
('106', '10015', '2018-04-02 13:46:09', '210000', 'telcom');
temukan siapa saja users dengan beberapa kali transaksi dalam hari yang sama, apa product yang mereka cari dan berapa banyak uang yang harus mereka keluarkan pada transaksi kedua?
query nya seperti berikut ini:
select T.user_id, T.payment, T.product
from test_da1 as T
where creat_time = (select min(creat_time) from test_da1 where user_id= T.user_id and creat_time > (select min(creat_time) from test_da1 where user_id=T.user_id))
order by creat_time
menemukan nilai pembelian lebih besar dari nilai rata-rata keseluruhan payment?
select *
from test_da1
where payment > (select AVG (payment) as avg_payment from test_da1)
menemukan customer yang melakukan transaksi berurutan kurang dari 10 menit ?
select c.user_id , extract(minute from c.selang_waktu)
from(
select b.user_id , b.creat_time - b.lag_creat_time as selang_waktu
from (
select
user_id ,
creat_time,
lag(creat_time, 1) over (partition by user_id order by creat_time) as lag_creat_time
from test_da1
)b
)c
where selang_waktu < '10 mins'
menemukan total payment per users dan tampilkan dalam urutan besar ke kecil?
select user_id, sum(payment)total
from test_da1
group by 1
order by 2 desc
menemukan 10 kolom pertama dengan pengurutan dari besar ke kecil bersadarkan user_id?
select *
from test_da1
order by 1 desc
limit 10
oke, kawan kita coba lanjut ke data soal no 2
berikut data yang dibuat:
create table test_da2(
customer_id varchar (8),
shop_id varchar (6),
item_price float8,
status_order varchar (45),
finish_time timestamp
)
insert into test_da2 (customer_id, shop_id, item_price, status_order, finish_time)
values
('561061', '111','230000', 'finished', '2018-05-02 05:30:00'),
('645217', '111','60650', 'finished', '2018-02-13 12:15:00'),
('507023', '111','466500', 'finished', '2018-04-17 10:00:00'),
('983190', '111','871250', 'cancelled', '2018-03-13 15:10:40'),
('678876', '112','746500', 'finished', '2018-01-09 07:10:00'),
('880741', '111','779000', 'pending', '2018-01-09 13:40:10'),
('14936', '112','499000', 'finished', '2018-05-23 09:15:00'),
('804734', '112','751000', 'finished', '2018-03-14 17:50:20'),
('599983', '112','948000', 'finished', '2018-04-18 15:20:10'),
('233141', '112','612900', 'finished', '2018-02-13 10:00:00'),
('725865', '112','840500', 'finished', '2017-12-12 19:20:10'),
('215085', '113','999000', 'finished', '2018-04-17 20:40:50'),
('61165', '123','4250000', 'finished', '2018-01-08 03:50:20'),
('332028', '123','6450000', 'finished', '2017-12-13 06:40:12'),
('472965', '123','2615000', 'finished', '2018-02-06 19:24:12'),
('265245', '123','9815500', 'finished', '2018-03-21 00:50:00'),
('837958', '123','350000', 'finished', '2018-04-18 23:30:00'),
('352073', '123','5550000', 'finished', '2018-05-16 02:30:40'),
('242847', '123','2310500', 'finished', '2018-04-11 11:30:00'),
('746083', '123','7447500', 'pending', '2018-05-16 07:04:10'),
('139441', '124','1250000', 'cancelled', '2018-11-21 22:07:00'),
('954810', '13578','45000', 'cancelled', '2018-05-14 22:05:00'),
('112788', '45098','1350250', 'pending', '2018-02-20 19:30:00');
menemukan shoping price diatas 500k finished dengan transaksi 6 bulan terakhir asumsikan bahwa hari ini adalah 1 may?
select *
from test_da2
where finish_time between '2017-10-01 23:59:59' and '2018-04-01 23:59:59'
and status_order = 'finished'
and item_price > 500000
select sum(item_price) as total_price
from test_da2
where finish_time between '2017-10-01 23:59:59' and '2018-04-01 23:59:59'
and status_order = 'finished'
and item_price > 500000
menemukan harga tertinggi berdasarkan status order finished dan diurutkan dari tinggi ke rendah?
select *
from test_da2
where status_order ='finished'
order by 3 desc
menemukan 3 top income berdasarkan finished order?
select shop_id, sum(item_price)
from test_da2
where status_order='finished'
group by 1
order by 2 desc
limit 3
select *
from test_da2
where status_order= 'finished'
order by 5 asc
limit 10
Tags:
#SQL
0 komentar