Anda di halaman 1dari 90

Pengolahan Data dengan SQL

SQL

Structured Query Language

Merupakan bahasa yang digunakan untuk mengirim perintah ke
DBMS

SQL adalah bahasa yang mudah karena hanya berisi instruksi
untuk menyimpan, mengubah, menghapus atau mengambil data
melalui DBMS

Secara garis besar, semua perintah SQL di Relational Database
itu hampir sama, namun biasanya tiap DBMS ada improvement
yang membedakan hal-hal kecil dalam perintah SQL, namun
secara garis besar perintahnya tetap sama
Kenapa harus belajar SQL?

Kunjungi menti.com ya
Kenapa harus belajar SQL?

Mudah dipelajari

Terstandardisasi

Melatih kemampuan analisis

Dapat digunakan untuk membantu
dalam pengolahan data yang besar
TIPE DATA
TIPE DATA NUMBER
Tipe Data Number

Secara garis besar, tipe data number di MySQL
ada dua jenis;

Integer, atau tipe number bilangan bulat

Floating Point, atau tipe data number pecahan
Tipe Data Integer
Tipe Data Floating Point
DECIMAL

Selain Integer dan Floating Point, di MySQL terdapat tipe
data DECIMAL

Ini tipe data number khusus yang bisa ditentukan jumlah
precision dan scale nya

DECIMAL Min Max

DECIMAL(5, 2) -999.99 999.99

DECIMAL(5, 0) -99999 99999

DECIMAL(3, 1) -99.9 999

DECIMAL(3) -999 999


TIPE DATA STRING
Tipe Data String

Selain number, biasanya kita sering menyimpan data di
dalam tabel dalam bentuk tulisan

Tipe data ini namanya tipe data String atau Text

Ada banyak tipe data String di MySQL
CHAR dan VARCHAR

Pertama, tipe data String di MySQL adalah CHAR dan VARCHAR

Kita bisa menentukan jumlah panjang maksimal karakter yang
bisa ditampung oleh CHAR dan VARCHAR dengan menggunakan
kurung buka lalu masukan jumlah maksimal karakter dan diakhiri
kurung tutup

Misal, CHAR(10) atau VARCHAR(10) artinya tipe data String
dengan maksimal jumlah karakternya adalah 10 karakter

Maksimum ukuran CHAR atau VARCHAR adalah 65535 karakter
Perbedaan CHAR dan VARCHAR
TEXT

Selain CHAR dan VARCHAR, tipe data String yang lainnya
adalah TEXT

Berbeda dengan CHAR dan VARCHAR yang kita bisa
tentukan panjang maksimum nya, TEXT tidak bisa kita
tentukan maksimum panjang nya

Terdapat 4 tipe data TEXT

TINYTEXT dengan maksimum 255 karakter (~256 bytes)

TEXT dengan maksimum 65535 karakter ( ~64 kb)

MEDIUMTEXT dengan maksimum 16777215 karakter (~16MB)

LONGTEXT dengan maksimum 4294967295 karakter (~4GB)
TIPE DATA DATE AND TIME
Tipe Data Date dan Time

Selain tipe data Number dan String, biasanya
kadang kita sering menyimpan data waktu atau
tanggal

Tipe Data Date dan Time Format Contoh

DATE YYYY-MM-DD 2020-10-10

DATETIME YYYY-MM-DD HH:MM:SS 2020-10-10 10:10:10

TIMESTAMP YYYY-MM-DD HH:MM:SS 2020-10-10 10:10:10

TIME HH:MM:SS 10:10:10

YEAR YYYY 2020


TABEL
Tabel

Data biasanya disimpan di dalam tabel di MySQL,
Suatu table tersusun dalam kolom (attribute) dan baris (row
/record)

Tiap tabel biasanya menyimpan satu jenis data

Sebelum bisa menyimpan data, tabel perlu dibentuk
terlebih dahulu

Untuk membentuk sebuah tabel, terlebih dahulu
tentukan kolom-kolom, kemudian tentukan tipe data
tiap kolom
Tabel

Contoh Tampilan sebuah tabel
NIP NAMA ALAMAT
960212100 SABENI JAKARTA
Baris
960212101 KARTOLO SURABAYA
960212102 GARENG JOGYAKARTA
960212103 BUTET MEDAN

Kolom
Tabel

Pada suatu table bisa terdapat 3 jenis key
1) Primary Key = sebuah atau beberapa kolom yang dikelompokkan
dan secara unik mengidentifikasi row di dalam table. Tidak boleh
bernilai Null
2) Unique Key = kolom yang digunakan sebagai unik di dalam table .
Unique key bisa memiliki nilai NULL.
3) Foreign Key = kolom dalam sebuah table , yang dapat dipakai
dalam membuat relasi antara satu table dengan table lainnya.
Foreign key bukanlah primary key table tersebut, namun menjadi
primary key bagi table lainnya
Tabel

Relasi Tabel
Table WP
NPWP NAMA_WP KPP_ADMINISTRASI
123456789001000 PANTANG MUNDUR 051 Foreign Key
987654321302001 MAJU SENDIRI 605
012345678051000 MILIK BANGSA 012
876543210108002 KARYA BERSAMA 302

Tabel KPP
Primary Key
KPP NAMAKPP ALAMAT
001 KPP PRATAMA JAKARTA MATRAMAN JAKARTA
003 KPP PRATAMA JAKARTA PULOGADUNG JAKARTA
302 KPP PRATAMA BATURAJA BATURAJA
051 KPP WAJIB PAJAK BESAR TIGA JAKARTA
108 KPP PRATAMA ACEH BESAR BANDA ACEH

Primary Key
Tabel

Contoh Perintah Create Tabel di MySQL :
 Template Standar Perintah

Create Tabel [Nama Tabel] (Nama Kolom Tipe Kolom)

Create table masterfile_lokakarya (

npwp varchar(15) not null,

kppadm varchar(3),

nama_wp varchar(30),

alamat_wp varchar(50),

Primary key (npwp)

);

Perintah create table juga dapat digunakan diikuti dengan perintah select dari tabel
lain, yang artinya, tabel baru yang akan dibentuk akan mengambil data dari tabel lain
yang sudah tersedia.
Tugas

Buat minimal 5 Tabel pada MySQL dengan ketentuan :
 Usahakan berlatih membuat tabel dengan menggunakan
seluruh tipe data kolom
 Berlatih untuk mendesain database yang terdiri dari banyak
tabel di manaprimary key dan foreign key tiap tabel dapat
saling terhubung menggunakan
 Format nama tabel adalah “namatabel_namapeserta”
 Pastikan Script Pembuatan tabel disimpan
 Akan diminta 2 peserta untuk menjelaskan hasil dari tugas
yang dikerjakan
Tabel, lanjutan...

Apakah kita hanya bisa meng-create tabel di
MySQL ? Bisakah kita menghapus tabel?
Bisakah kita merubah kolom?
 Alter
 Drop
 Rename
 Modify
 Drop dan Truncate
Tabel, lanjutan...

Alter

ADD – Contoh = “Alter Table masterfile_lokakarya add column
tgl_daftar timestamp;”

ADD- Setelah kolom tertentu = “Alter Table masterfile_lokakarya
add column tgl_lahir timestamp after nama_wp;”

ADD – Multiple Columns = “Alter Table masterfile_lokakarya add
column (kd_klu char(5), id_jns_wp tinyint);”

ADD – Multiple Columns (After)= “Alter Table
masterfile_lokakarya add column kd_klu_after char(5) after
kd_klu, add column id_jns_wp_after tinyint after id_jns_wp;”
Tabel, lanjutan...

Drop

Single Column Drop = Alter table masterfile_lokakarya drop
kd_klu_after;

Multiple Columns Drop = Alter table masterfile_lokakarya drop
kolom_awal_baru, drop id_jns_wp_after;

Rename

Rename column = Alter table masterfile_lokakarya change
column npwp npwp15 varchar(15) ;

Renama table = Alter table masterfile_lokakarya rename to
mf_lokakarya;
Tabel, lanjutan...

Modify :

Single Column = Alter table mf_lokakarya modify npwp15 char(15)
null;

Multiple Columns = Alter table mf_lokakarya modify npwp15
varchar(15) not null, modify kppadm varchar(3) null;
Tabel, lanjutan...

Drop :

Secara sederhana, peirnta drop digunakan untuk menghapus sebuah tabel
secara keseluruhan.

Contoh = Drop Table Pegawai ;


Truncate : / Delete

Perintah truncate digunakan untuk menghapus seluruh record/row/tupple di
dalam sebuah tabel dengan tetap mempertahankan struktur dari tabel
tersebut:

Contoh = Truncate table pegawai :

Delete from pegawai;
VIEW

Secara sederhana dapat diartikan sebagai “Stored Query”

Untuk membentuk View perintah yang digunakan adalah
“Create View”

Untuk mengakses view, digunakan perintah “Select”

View dapat membantu dalam menyederhanakan query
yang berulang dan kompleks

View juga membantu dalam menjaga konsistensi logika
bisnis
VIEW

Contoh Perintah :

create view v_mpn2017_kontribusibesar as

select * from mpn2017 WHERE
jml_setor>10000000000;
INDEX

Index membantu dalam mempercepat pencarian row dengan
nilai yang spesifik

Tanpa adanya Index, DBMS harus men-scan keseluruhan
tabel untuk mendapatkan row yang diinginkan

Contoh Perintah :

create index index_mpn2017 on

mpn2017 (npwp,

id_map_kjs,

id_ms_th_pjk_1);
Jenis-Jenis Perintah SQL

Data Data Data Transaction


Definition Manipulation Control Control
Language Language Language Language
PERINTAH SELECT
SELECT

Perintah yang digunakan untuk mengakses/memunculkan data yang
terdapat di dalam sebuah tabel di database

Perintah Select memiliki syntax dasar sebagai berikut :

Select {kolom1, kolom2, … }

From [nama_table]

Where [kondisi data yang diinginkan]

Group By [grouping untuk agregat]

Having [kondisi atas kolom-kolom yang menggunakan fungsi
agregat]

Order By
SELECT
Menampilkan 1 kolom

Dalam menampilkan kolom, user dapat memilih kolom manapun di
dalam sebuah tabel yang diinginkan. Tidak hanya kolom pertama
ataupun kolom terakhir di dalam sebuah tabel

User dapat menambahkan argumen limit untuk membatasi jumlah
row yang ditampilkan

Contoh Perintah :

Select npwp from mpn2017 limit 10 ;

Select kppadm_setor from mpn2017 limit 10;

Select kd_map from mpn2017 limit 10 ;

Select no_spm from mpn2017 limit 10;
Bandingkan waktu antara select * from mpn2017 & select * from mpn2017 limit 10
SELECT
Menampilkan lebih dari 1 kolom

Dalam menampilkan lebih dari 1 kolom, kolom yang akan ditampilkan tidak
perlu harus berurutan. Misalnya, user dapat memilih kolom pertama dan
kolom terakhir untuk ditampilkan. Urutan kolom juga dapat ditukar, misalnya
menampilkan kolom ketiga dulu, baru kolom pertama.

Untuk menampilkan seluruh kolom, user dapat menggunakan lambang “ * “.

Contoh Perintah :

Select id_sbr_data, no_spm from mpn 2017 limit 10;

Select npwp,no_spm from mpn2017 limit 4;

Select kppadm_setor, id_sbr_data from mpn2017 limit 10;

Select * from mpn2017 limit 10;
SELECT
Memberi alias

Alias dapat diberikan dalam sebuah statement select dengan menambahkan
argumen “as”

Alias dapat diberikan baik pada kolom dan juga tabel

Penamaan alias tidak dapat menggunakan spasi

Apabila tabel sudah diberikan alias, pemanggilan kolom dapat juga dilakukan
dengan cara aliastabel.namakolom

Alias pada tabel akan membantu saat melakukan join antar tabel

Contoh :

Select npwp as npwp_tetap from mpn2017 limit 10;

Select npwp from mpn2017 as data limit 10;

Select data.npwp from mpn2017 as data limit 10;
SELECT dengan Kondisi (Where)


Dalam menjalankan perintah select kita dapat juga memasukan kondisi-kondisi pada perintah kita
yang berfungsi sebagai filter

Kondisi-kondisi yang kita inginkan dapat ditambahkan pada perintah select dengan menggunakan
klausa “WHERE”

Klausa “WHERE” memiliki letak setelah “FROM”, kemudian diikuti dengan nama kolom yang akan
difilter

Di dalam klausa where kita dapat menggunakan operator perbandingan untuk mem-filter data yang
akan ditampikan
Operator Keterangan
= Sama dengan
<> atau != Tidak sama dengan
< Kurang dari
<= Kurang dari atau sama dengan
> Lebih dari
>= Lebih dari atau sama dengan
Latihan
1. Buat VIEW tugas1 dengan kondisi di mana jumlah setor lebih
dari 500.000.000 pada tabel mpn2020.
2. Buat table tugas_mpn2020 dari yang berasal dari data
keseluruhan data mpn2020. Kemudian, ubah Kolom NPWP
pada tabel menjadi NPWP15 dan kolom JML_SETOR menjadi
SETORAN.
3. Ubah lebar data pada tugas_mpn2020 menjadi lebih efisien,
tambahkan paling tidak 50% dari lebar data sesungguhnya.

Hints :
create table tugas_mpn2020 as select * from mpn2020
alter table tugas_mpn2020 change column NPWP NPWP15 varchar(15)
select max(length(ntpn)) from tugas_mpn2020
Latihan
1. Buat table tugas_keberatan1 dari table keberatan tanpa isi data tercopy.
(create table xxxx like yyy).
(truncate)
2. perbaiki struktur table tugas_keberatan1. termasuk semua nilai nominal
menjadi 38,2.
2. Insert data keberatan ke table tugas_keberatan1 atas nilai jml pokok
diatas 100.000. (insert into xxxx select * from yyy where jml_pokok> xxxx)
3. Insert data keberatan ke table tugas_keberatan1 atas nilai jml pokok
dibawah 100.000
4. Bandingkan jumlah row keberatan & tugas_keberatan1.
(select count(*) from xxx)
SELECT
Melakukan Operasi aritmatika pada Kolom

User dapat melakukan operasi aritmatika sederhana pada kolom yang akan
ditampilkan melalui perintah select

Operasi matematika umumnya dilakukan pada kolom-kolom yang memiliki
tipe data numeric

Contoh:

Select npwp, jml_setor, jml_setor*2 as duakalisetoran from mpn2017 limit
20;

Select npwp, jml_setor, jml_setor+1000 as setoran_seribu from mpn2017
limit 20;
SELECT DISTINCT


Penambahan klausa “DISTINCT” bertujuan untuk memberi perintah kepada
perintah select agar mengembalikan/memunculkan row-row yang unik pada
sebuah tabel

Klausa “DISTINCT” ditempatkan setelah perintah select diikuti dengan
nama-nama kolom

Contoh :

Select distinct id_map_kjs from mpn2017;

Select distinct kd_map,kd_setor from mpn2017;

Select distinct nama_jabatan from pegawai:
FUNGSI AGREGAT PADA PERINTAH SELECT


Fungsi agregat adalah fungsi yang digunakan dalam pengelompokan data.
Fungsi ini menghasilkan suatu row yang dikelompokkan dari beberapa row.

Query yang menggunakan fungsi aggregat biasanya menggunakan klausa
GROUP BY apabila perintah select digunakan untuk lebih dari 1 kolom

Yang termasuk dalam fungsi agregat adalah COUNT, SUM, MIN, MAX, dan
AVG.
FUNGSI AGREGAT PADA PERINTAH SELECT


Fungsi COUNT : Fungsi count yang digunakan berdiri sendiri biasanya digunakan
untuk menghitung jumlah row sebuah tabel. Apabila digunakan bersama dengan
kolom di dalam sebuah tabel, COUNT akan menghitung jumlah row atas sebuah
value di kolom tersebut.

Contoh : Select count(1) from mpn2017;

Select id_map_kjs, count(1) from mpn2017 group by id_map_kjs;


Fungsi SUM : Fungsi SUM digunakan untuk menjumlahkan nilai-nilai dari kolom
yang bertipe numeric ataupun sebuah ekspresi yang telah didefinisikan di dalam
perintah select.

Contoh : Select sum(jml_setor) as Total_Setoran from mpn2017;

Select npwp, sum(jml_setor) from mpn2017 group by npwp;
FUNGSI AGREGAT PADA PERINTAH SELECT


Fungsi MIN : Fungsi min digunakan untuk menampilkan nilai terkecil(minimum)
dari sebuah kolom. Berdasarkan dokumentasi MySQL, fungsi MIN dapat
menerima input dari kolom dengan tipe data numerik maupun string.

Contoh : Select min(jml_setor) as Total_Setoran from mpn2017;

Select npwp,min(jml_Setor) from mpn2017 group by npwp;

Fungsi MAX : Fungsi MAX digunakan untuk menampilkan nilai
terbesar(maksimum) dari sebuah kolom. Berdasarkan dokumentasi MySQL,
fungsi MIN dapat menerima input dari kolom dengan tipe data numerik maupun
string

Contoh : Select max(jml_setor) as Total_Setoran from mpn2017;

Select npwp,max(jml_setor) from mpn2017 group by npwp;
FUNGSI AGREGAT PADA PERINTAH SELECT


Fungsi AVG : Fungsi AVG digunakan untuk menampilkan nilai rata-rata dari
sebuah kolom.

Contoh : Select avg(jml_setor) as Total_Setoran from mpn2017;

Select npwp,avg(jml_setor) from mpn2017 group by npwp;
FUNGSI STRING PADA PERINTAH SELECT


Selain memiliki fungsi-fungsi agregat, MySQL memiliki fungsi string bawaan yang
dapat digunakan. Beberapa fungsi string yang sering digunakan adalah sebagai
berikut :

LENGTH (Menampilkan panjang karakter)

SUBSTR (men-slice sebuah string)

RIGHT (men-slice string dimulai dari kanan (akhir dari string)

LEFT (men-slice string dimulai dari kiri (awal dari string)

TRIM (menghilangkan spasi berlebih dari sebuah string)

UPPER/LOWER (uppercase/lowercase)

REPLACE (me-replace sebuah string dengan string lain)

CONCAT (menggabungkan teks)
FUNGSI STRING PADA PERINTAH SELECT


Contoh

LEN = Select length(npwp15) from tugas_mpn2020;

SUBSTR =Select substr(npwp15,1,9) from tugas_mpn2020;

RIGHT = Select right(npwp15,3) from tugas_mpn2020;

LEFT = Select left(npwp15,9) from tugas_mpn2020;

TRIM = Select trim(npwp15) from tugas_mpn2020;

UPPER/LOWER = Select lower(ntpn) from tugas_mpn2020;


REPLACE = Select replace(ntpn, ‘66A8F5B6E9CLBLCE’, ‘yes’) from tugas_mpn2020
where ntpn =‘66A8F5B6E9CLBLCE’

CONCAT = Select concat(kd_map,kd_Setor) from tugas_mpn2020 ;
KLAUSA ORDER BY PERINTAH SELECT


Klausa order by digunakan untuk mengurutkan row data yang ditampilkan
berdasarkan kolom tertentu

Apabila tidak ditentukan metode pengurutan, secara default, order by akan
melakukan pengurutan secara Ascending (dari kecil ke besar)

Klausa order by ada di posisi paling akhir dibanding klausa yang lain

Contoh = Select npwp,kppadm_Setor, jml_Setor from mpn2017 order by
jml_setor desc;
SELECT (Where) Operator Perbandingan


Berikut adalah contoh perintah select dengan kondisi menggunakan
operator perbandingan :

Select * from mpn2017 where npwp=’769622888101000’;

Select * from mpn2017 where npwp!=’769622888101000’;

Select * from mpn2017 where jml_setor<1000000000;

Select * from mpn2017 where jml_setor<=1000000000;

Select * from mpn2017 where jml_setor>1000000000;

Select * from mpn2017 where jml_setor>=1000000000;
SELECT (WHERE) DAN OPERATOR LOGIKA


Untuk menggabungkan 2 atau lebih kondisi pada klausa WHERE diperlukan
operator logika

Operator logika yang dapat digunakan di MySQL adalah AND, OR, dan NOT

Operator logika akan menampilkan hasil sesuai dengan evaluasi atas
operator Logika.

Operator AND, bernilai TRUE bila semua kondisi terpenuhi

Operator OR, bernilai TRUE bila salah satu kondisi terpenuhi

Operator NOT, bernilai TRUE apabila kondisi sama dengan False
SELECT (WHERE) DAN
OPERATOR LOGIKA ‘AND’

Contoh Syntax :

SELECT npwp, kppadm_setor, kd_map, jml_setor FROM mpn2017
WHERE kd_map = ‘411121’ AND jml_setor > 10000000;

SELECT npwp, kppadm_setor, kd_map, jml_setor FROM mpn2017
WHERE id_ms_th_pjk_1 mod 100 = 12 AND jml_setor > 100000000;

SELECT npwp, kppadm_setor, kd_map, mapjml_setor FROM mpn2017
WHERE month(tgl_setor)=12 AND jml_setor > 100000000;

Id_ms_th_pjk = 202107  id_ms_th_pjk/100 = 2021


Id_ms_th_pjk = 202107  id_ms_th_pjk mod 100 = 07
Latihan
1. Jumlahkan nilai pembayaran pajak dari table tugas_mpn2020 atas
kdmap kjs pembayaran wp umkm (411128 420) rentang masa pajak
202001 hingga 202006
Gunakan sum dengan memanfaatkan where kdmap kjs serta and idmsthpjk between
202001 and 202006

2. Berapakah nilai total keberatan yang masih harus dibayar masih dalam
proses jenis keputusan untuk kpp adm 305
Gunakan sum dengan where kppadm

3. Berapakah jumlah ketetapan keberatan yang telah keluar keputusan


=‘TERIMA’ untuk kppadm 302 pada table keberatan
Gunakan count dengan where jenis_keputusan =‘TERIMA’

4. Berapakah jumlah ketetapan keberatan untuk kppadm 306 pada table


keberatan yang terbit pada bulan maret 2021
Gunakan count dengan where extract(year from tgl_upaya_hukum) = 2021 and
extract(month from tgl_upaya_hukum) = 3
5. Berapakah jumlah pegawai KPP Pratama Langsa
Gunakan count pada table pegawai dengan where nama kantor
Latihan (gunakan table tugas_mpn2020)

1. Andi merupakan pegawai KPP =‘308’, kemudian mendapatkan tugas


dari Kepala Kantor untuk menyajikan data peredaran usaha pelaku
UMKM pada wilayah tersebut pada tahun pajak 2020 menggunakan
pendekatan data pembayaran pajak penghasilan PP23. Sajikan kolom
npwp dan jml_setor.

TAHUNPAJAK
KDMAP
KPPADM KD_SETOR
cast(ID_MS_TH_PJK/100 as
UMKM
int) = 2020

Jadikan table dengan nama tugasumkm_2020308


Create table tugasumkm_2020308 as select
Latihan

2. Berapa jumlah wajib pajak melakukan pembayaran UMKM.


Hints
Select count(*) from (select distinct npwp from tugasumkm_2020308) y

3. Berapa nilai total peredaran bruto populasi per wajib pajak.


Create table xxxx as Select npwp, sum(jml_setor)as setoranpajak,
sum(jml_setor* 200) as peredaranbruto from xxx group by npwp

4. Sajikan nilai pembayaran perwajib pajak yang diurutkan dari


pembayaran terbesar. Kepala Kantor meminta kolom npwp,
peredaran bruto, serta pembayaran pajak.
Hints

Gunakan fungsi order by Desc


SELECT (Where) Like


Operator Like digunakan untuk mencari pola spesifik dari sebuah nilai yang
dicari di dalam klausa WHERE

Ada dua karakter yang umum digunakan berbarengan dengan operator like,
yaitu :

Karakter persentase ( % ); dan

Karakter underscore ( _ )

Operator LIKE diapit oleh 2 tanda petik, dan dua karakter yang umum
digunakan di atas berposisi di antara 2 tanda petik.
SELECT (Where) Like


Contoh Penggunaan

Select * from pegawai where nama like ‘a%’

Select * from pegawai where nama like ‘%a’

Select * from pegawai where nama like ‘%a%’

Select * from pegawai where nama like ‘_a%’

Select * from pegawai where nama like ‘a_%’

Select * from pegawai where nama like ‘a__%’

Select * from pegawai where nama like ‘a%m’

Buat table berisi wajib pajak yang memiliki alamat di Cempaka Sari
SELECT (Where) IN


Operator IN memungkinkan kita untuk mendefinisikan lebih dari satu nilai di
dalam satu kondisi pencarian

Operator in merupakan versi ringkas dari multiple operator OR dengan
kondisi exact (bukan kombinasi OR dan like, melainkan kombinasi OR
dengan operator perbandingan “=”)

Contoh Syntax : SELECT * FROM mpn_2019 WHERE kd_map IN
('411121','411122', '411124');
SELECT (Where) BETWEEN


Operator BETWEEN akan menampilkan data yang berada di dalam range
yang telah ditentukan pada kondisi WHERE

Operator BETWEEN bersifat inklusif, di mana nilai awal dan nilai akhir
masuk ke dalam hasil akhir yang ditampilkan

Contoh Syntax :

Select * from mpn2017 where jml_setor between 1000000000 and
2000000000;
Latihan

1. Sari adalah pegawai kpp 303, kemudian mendapatkan tugas dari Kepala
Kantor KPP 303 untuk menyiapkan data masukan untuk pemberian
penghargaan kinerja AR beserta pembinaan AR.
2. Sari ditugaskan untuk menggunakan pendekatan dari pengerjaan data
pemicu yang dilakukan oleh AR untuk tahun pajak yang kemungkinan
besar akan masuk kadaluarsa penetapan (2017).
3. Siapkan data nilai pemanfaatan data pemicu oleh AR dari sisi jumlah
data yang telah digunakan (bukan nilai data) kemudian urutkan dari sisi
jumlah data. Count(*)
4. Siapkan juga dari sisi nilai data. Sum(*)
Hints
Kamus Data
1. Buat table tampungan seperti tugasmpn2020
untuk data pemicu pada KPP 303 serta th_pjk
2017 serta perhatikan kembali where condition
untuk data yang telah terpakai. Gunakan kolom
seperlunya. Nip_ar serta nilai data pemicu terpakai
1. Rahman adalah pegawai 307, mendapatkan tugas dari Kepala Seksi
Pengawasan untuk menyajikan data PBK pajak bulanan pada tahun
pembayaran pajak 2020.
2. Tugas tersebut mengharuskan Rahman untuk hanya memperhitungkan
Pbk Kirim Sekantor pada KPP 307.
3. Rahman diharuskan menyajikan data bulan terjadinya PBK, beserta
jumlah terjadinya Pbk
4. Lakukan hal yang sama untuk nilai terjadinya PBK
FUNGSI DATE PADA PERINTAH SELECT

• Beberapa fungsi terkait tipe data DATE yang sering


digunakan:
• Curdate
• Curtime
• Year
• Month
• Monthname
• Day
• Dayname
• Date_format
• Ref format 
FUNGSI DATE PADA PERINTAH SELECT

• Contoh syntax:
• Select curdate();  tgl hari ini
• Select curtime();  waktu saat ini
• Select year(tgl_Setor) from mpn2020;
• Select month(tgl_setor) from mpn2020;
• Select monthname(tgl_setor) from mpn2020;
• Select day(tgl_setor) from mpn2020;
• Select dayname(tgl_Setor) from mpn2020;
• Select date_format(tgl_setor, ‘%d-%m-%y’) from
mpn2020;
SELECT (WHERE) DAN
OPERATOR LOGIKA ‘OR’

Contoh Syntax :

SELECT npwp, kppadm_setor, kd_map, jml_setor FROM mpn2017
WHERE kd_map = ‘411121’ OR jml_setor > 10000000;

SELECT npwp, kppadm_setor, kd_map, jml_setor FROM mpn2017
WHERE id_ms_th_pjk_1 mod 100 = 12 OR jml_setor > 100000000;

SELECT npwp, kppadm_setor, kd_map, jml_setor FROM mpn2017
WHERE month(tgl_setor)=12 OR jml_setor > 100000000;
SELECT (WHERE) DAN
OPERATOR LOGIKA ‘NOT’

Contoh Syntax :

SELECT npwp, kppadm_setor, kd_map, jml_setor FROM mpn2017
WHERE kd_map not in ('411122','411124');

SELECT DISTINCT kd_map, nm_map FROM dim_map_kjs WHERE
nm_map NOT LIKE 'PPH%';
SELECT (WHERE) IS NULL


Contoh Syntax :

SELECT npwp, kppadm_setor, jml_setor, no_spm FROM mpn_2019
WHERE no_spm IS NULL;


Bagaimana bila kita harus melakukan operasi matematika dengan value yang
memiliki nilai NULL?

Ifnull

Coalesce
SELECT HAVING


Klausa HAVING digunakan untuk membatasi hasil query yang
menggunakan fungsi agregat

Hasil dari fungsi agregat tidak dapat dibatasi dengan klausa WHERE

Posisi Klausa HAVING adalah paling akhir sebelum order by dan setelah
group by

Contoh Syntax =

SELECT kd_map, SUM(jml_setor) total_setor, AVG(jml_setor)
rata2_setoran, MAX(jml_setor) setoran_terbesar, MIN(jml_setor)
setoran_terkecil FROM mpn_2019 GROUP BY kd_map HAVING
SUM(jml_setor) < 1000000;
SELECT dengan CONDITIONAL STATEMENT


MySQL memiliki fitur yang memungkinkan kita untuk menjalankan sebuah perintah kondisional

Perintah kondisional yang ada di MySQL memiliki logika yang mirip dengan fungsi IF yang ada
pada microsoft excel

Setelah Perintah Case When, perlu ditambahkan nama kolom

Contoh Syntax :

SELECT npwp, jml_setor,

CASE

WHEN jml_setor > 100000000 THEN 'Penerimaan Besar'

WHEN jml_setor > 10000000 and jml_setor<100000000 THEN 'Penerimaan Sedang'

ELSE 'Penerimaan Cukup'

END as kategori_setoran FROM mpn_2017;
QUERY MANY TABLES
- UNION
- UNION ALL
- JOIN
- SUBQUERY/NESTED TABLE :
WITH
EXISTS
UNION clause
• Digunakan untuk menggabungkan result dari query lain.
• Jumlah kolom dan tipe kolom dari kedua output query harus sama
• Mengecek duplikasi records
• Jika tidak diperlukan, baiknya dihindari
• Contoh:
Select npwp_penjual, id_ms_th_pjk, jml_dpp from faktur2022 UNION
Select npwp_penjual, id_ms_th_pjk, jml_dpp from faktur2021
Order by id_ms_Th_pjk
UNION ALL clause

• Digunakan untuk menggabungkan result dari query lain.


• Jumlah kolom dan tipe kolom dari kedua output query
harus sama
• Tidak ada cek duplikasi rows
• Contoh:
Select npwp_penjual, id_ms_th_pjk, jml_dpp from
faktur2022 UNION ALL
Select npwp_penjual, id_ms_th_pjk, jml_dpp from
faktur2021
Order by id_ms_Th_pjk
SELECT dengan Union & Union All

• SELECT npwp, kppadm_setor, tgl_setor, jml_setor FROM mpn_2019


• UNION
• SELECT npwp, kppadm_setor, tgl_setor, jml_setor FROM mpn_2018
• ORDER BY npwp;

• SELECT npwp, kppadm_setor, tgl_setor, jml_setor FROM mpn_2019


• UNION ALL
• SELECT npwp, kppadm_setor, tgl_setor, jml_setor FROM mpn_2018
• ORDER BY npwp;
JOIN Statement
INNER JOIN (JOIN)
LEFT OUTER JOIN (LEFT JOIN)
RIGHT OUTER JOIN (RIGHT JOIN)
FULL OUTER JOIN (FULL JOIN)
CROSS JOIN
SELF JOIN
Select dengan Join
SELECT dengan Inner Join

• Pada inner join data yang ditampilkan hanya data yang nilainya cocok antara table
pertama dengan table kedua.
• Sedangkan data pada table pertama yang nilainya tidak cocok dengan table kedua
maupun data pada table kedua yang nilainya tidak cocok dengan data pada table
pertama maka tidak akan ditampilkan.
• Contoh syntax :
select npwp_penjual, a.kd_jns_trx, b.nama, nama_penjual, npwp_penjual, jml_dpp
from faktur a, dbacl2_faktur2.dim_faktur_jns_trx b
where a.kd_jns_trx=b.kd_jns_trx;
SELECT dengan Left Join

Query join dari dua table/lebih


ON a.column=b.column
[WHERE ….]

• Pada left join data yang ditampilkan adalah semua data yang terdapat pada table pertama
sedangkan data dari table kedua hanya diambil data yang nilainya cocok dengan nilai data
pada table pertama saja.
• Untuk data dari table pertama yang tidak ada pasangannya pada table kedua maka data
pasangannya diisi dengan nilai NULL.
• Contoh syntax :
• SELECT npwp,
• kppadm,
• a.kd_klu,
• nm_klu
• FROM wp a
• LEFT JOIN dim_klu b ON a.KD_KLU = b.kd_klu
SELECT dengan Right Join

• Pada right join data yang ditampilkan adalah semua data yang terdapat pada table
kedua baik data tersebut ada pasangannya pada table pertama maupun tidak
• Sedangkan data dari table pertama maka yang ditampilkan hanya data yang ada
pasangannya dengan table kedua saja.
• Untuk data dari table kedua yang tidak ada pasangannya pada table pertama maka
data pasangannya diisi dengan nilai NULL.

• Contoh syntax :
• SELECT npwp,
• kppadm,
• a.kd_klu,
• nm_klu
• FROM wp a
• RIGHT JOIN dim_klu b ON a.KD_KLU = b.kd_klu
SELECT dengan Full Join

• Sedangkan pada full join semua data pada table pertama dan table kedua ditampilkan baik datanya
berpasangan maupun tidak berpasangan.
• MySQL belum mendukung perintah FULL JOIN, tapi kita bisa mengemulasinya dengan menggunakan
gabungan syntax Left join dan Right Join

• Contoh syntax :
• SELECT npwp,
• kppadm,
• a.kd_klu,
• nm_klu
• FROM wp a
• LEFT JOIN dim_klu b ON a.KD_KLU = b.kd_klu
• UNION ALL
• SELECT npwp,
• kppadm,
• a.kd_klu,
• nm_klu
• FROM wp a
• RIGHT JOIN dim_klu b ON a.KD_KLU = b.kd_klu
SUBQUERY
Subquery / Derived Table
• To avoid CREATE and DROP TABLE statements for storing retrieved information that is only
needed for one request.
• Subquery bisa berada di dalam SELECT/kolom statement, FROM statement, WHERE
statement.
• Contoh :
SELECT a.kolom, b.kolom FROM
(SELECT * FROM table1 WHERE condition) as a , tabel2 WHERE a.kolom=b.kolom;

• select id_ms_th_pjk, a.npwp_penjual, a.kd_jns_trx, b.nama nmtrx, a.nama_penjual,


a.jml_dpp
from (select
id_ms_th_pjk,npwp_penjual,nama_penjual,jml_dpp,kd_jns_trx ,npwp_pembeli from
DBDEV_TRAINING.faktur where jml_dpp > 1000000000) a, dbacl2_faktur2.
dim_faktur_jns_trx b
where a.kd_jns_trx=b.kd_jns_trx and npwp_pembeli in (select npwp_penjual from
faktur)
SELECT dengan Subquery

Query dapat dikombinasikan dengan query lainnya. Salah satu yang paling sering dilakukan adalah
subquery. Subquery berarti melakukan query dengan sumber atau kriteria yang dihasilkan dari query
lain

Supaya lebih mudah memahami, bisa dengan membuat query tersebut satu persatu, baru kemudian
digabung

Contoh Syntax :

SELECT *

FROM mpn2017

WHERE npwp IN (SELECT npwp FROM tanda_terima)

LIMIT 20;

SELECT *

FROM mpn2017

WHERE npwp IN (SELECT npwp FROM wp WHERE nip_ar = '930101866')

LIMIT 20;

Select * from (select * from dim_map_kjs) A
LATIHAN


1. Tampilkan data customer, nama digabung dalam 1 kolom/komposit, alamat, kota
dan negaranya

2. jumlah customer per negara, per kota, dan urutkan dari jumlah yang terbesar

3.Tampilkan data pembayaran yang pernah terjadi per negara

4. tampilkan data staff yang melayani pelanggan dengan performanya, yaitu
berapa payment yang berhasil diterima oleh perusahaan dari pelanggannya.

5. Tampilkan data jumlah customer yang melakukan pembayaran dan , nama
dikomposit.
SELECT dengan Exists

• Fungsi exist pada dasarnya sama dengan syntax IN


• Perbedaannya adalah penggunaan kriteria yang bisa lebih dari 1
• Secara performa exists lebih baik pada beberapa DBMS

• Contoh syntax

• SELECT npwp, kppadm_setor, tgl_setor, jml_setor FROM mpn_2019


• WHERE EXISTS (SELECT * FROM mpn_2018
• WHERE mpn_2019.npwp=mpn_2018.npwp AND jml_setor>10000000);

• SELECT npwp, kppadm_setor, tgl_setor, jml_setor FROM mpn_2019


• WHERE NOT EXISTS (SELECT * FROM mpn_2018
• WHERE mpn_2019.npwp=mpn_2018.npwp AND jml_setor>10000000);
Common Table Expression (CTE)


CTE adalah sebuah fitur SQL untuk membuat sebuah tabel sementara.

Kegunaan CTE antara lain :

Mudah dibaca

Sebagai Pengganti view

Mempercepat query

Contoh Syntax :

With [alias] as (query)

SELECT * from [alias[
Common Table Expression (CTE)


WITH mpn17 AS

(

SELECT npwp,

kd_map,

jml_setor,

tgl_setor

FROM mpn2017

WHERE kd_setor = '300'

)

select * from mpn17
Select dengan Row dan Rank


MySQL versi 8.0 memiliki fitur analitikal baru ROW_NUMBER dan DENSE_RANK

Kedua perintah tersebut pada dasarnya memiliki struktur perintah yang sama namun
menghasilkan output berbeda

ROW_NUMBER berfungsi untuk menambahkan angka sekuen unik pada setiap row hasil query

DENSE_RANK berfungsi untuk menambahkan ranking pada setiap row hasil query, nilai yang
sama akan diberikan ranking yang sama

Kedua perintah tersebut selalu diiringi Order By

Terdapat perintah opsional Partition By untuk memecah data ke dalam data set yang lebih kecil

Kegunaan antara lain

Untuk memberikan nomor urut

Menghapus duplikasi

Mengambil data N teratas
Select dengan Row dan Rank


Contoh Syntax :

SELECT kd_Map,

SUM(jml_setor) setoran,

dense_rank() OVER (ORDER BY setoran DESC) urutan1,

row_number() OVER (ORDER BY setoran DESC) urutan2

FROM mpn2017

GROUP BY 1
Thank You!

Anda mungkin juga menyukai