Praktikum 02 - Pengenalan SQL dengan SQLite

Persiapan

Dalam melakukan Praktikum 02 Matakuliah STA581-Sains Data ini, Anda perlu melakukan persiapan sebagai berikut :

  1. Buat Folder dengan nama sqlite pada Drive C: Anda, Sehingga bisa diakses dengan C:\sqlite

  2. Buat Folder dengan nama db pada C:\sqlite, sehingga bisa diakses dengan C:\sqlite\db

  3. Download sqlite3.exe dari URL berikut : ipb.link/sqlite3, simpan di C:\sqlite

  4. Download chinook.db dari URL berikut : https://cdn.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip, karena file tersebut berbentuk .zip, silahkan extrak dan simpan di C:\sqlite\db

Mempersiapkan cmd / Windows Command Processor

  1. Windows Command Processor bisa Anda buka, dengan menekan Tombol Windows + R pada keyboard Anda, sehingga muncul Jendela di bawah ini.
  1. Ketikkan cmd, lalu tekan Tombol Enter pada Keyboard Anda.
<
  1. Ketikkan cd\ kemudian tekan Tombol Enter pada KeyBoard Anda.

  2. Ketikkan cd sqlite kemudian tekan Tombol Enter pada KeyBoard Anda. Langkah 3 dan 4 ini, digunakan untuk membuat C:\sqlite menjadi Working Directory Anda.

IMPORT Database db ke sqlite3

Model data Chinook menampilkan suatu toko media digital, di dalamnya terdapat tabel untuk artists, albums, media tracks, invoices and customers..

  1. Data terkait media digital dibuat menggunakan data nyata dari library Apple iTunes.

  2. Informasi pelanggan dan karyawan dibuat menggunakan nama dan alamat fiktif yang dapat ditemukan di peta Google, dan data lain yang diformat dengan baik (telepon, faks, email, dll.)

  3. Informasi penjualan dibuat secara otomatis menggunakan data acak selama periode empat tahun.

Contoh database Chinook meliputi:

  • 11 tabel
  • Berbagai indeks, primary key
  • Lebih dari 15.000 baris data

Untuk membuka Database yang bernama chinook.db, bisa digunakan syntax di bawah ini.

sqlite3 c:\sqlite\db\chinook.db 

Mengeluarkan Tabel

Berikut adalah syntax untuk, memeriksa tabel apa saja yang berada dalam chinook.db

SELECT name FROM sqlite_schema
WHERE type='table'
ORDER BY name;
13 records
name
albums
artists
customers
employees
genres
invoice_items
invoices
media_types
playlist_track
playlists
sqlite_sequence
sqlite_stat1
tracks

Disini muncul dua table tambahan, yaitu sqlite_sequence dan sqlite_stat1

SQLite keeps track of the largest ROWID using an internal table named “sqlite_sequence”. The sqlite_sequence table is created and initialized automatically whenever a normal table that contains an AUTOINCREMENT column is created. The content of the sqlite_sequence table can be modified using ordinary UPDATE, INSERT, and DELETE statements. But making modifications to this table will likely perturb the AUTOINCREMENT key generation algorithm. Make sure you know what you are doing before you undertake such changes. The sqlite_sequence table does not track ROWID changes associated with UPDATE statement, only INSERT statements.

The sqlite_stat1 is an internal table created by the ANALYZE command and used to hold supplemental information about tables and indexes that the query planner can use to help it find better ways of performing queries. Applications can update, delete from, insert into or drop the sqlite_stat1 table, but may not create or alter the sqlite_stat1 table

Mengeluarkan Column Name dari suatu Tabel.

Untuk mengeluarkan Column Name dari suatu Tabel, anda bisa menggunakan fungsi PRAGMA

PRAGMA table_info(tracks);
9 records
cid name type notnull dflt_value pk
0 TrackId INTEGER 1 NA 1
1 Name NVARCHAR(200) 1 NA 0
2 AlbumId INTEGER 0 NA 0
3 MediaTypeId INTEGER 1 NA 0
4 GenreId INTEGER 0 NA 0
5 Composer NVARCHAR(220) 0 NA 0
6 Milliseconds INTEGER 1 NA 0
7 Bytes INTEGER 0 NA 0
8 UnitPrice NUMERIC(10,2) 1 NA 0

Anda bisa juga menggunakan syntax berikut

.schema tracks

Struktur Database chinook.db

Berikut adalah struktur chinook.db

SELECTING Data

Perintah SELECT digunakan untuk memilih data/tabel dari database. Secara umum perintah SELECT adalah sebagai berikut

SELECT column1, column2, ...
FROM table_name; 

column1, column2,…. merupakan field name atau nama kolom yang ingin dipilih dari data/tabel. Jika ingin memilih semua kolom/field dari data/tabel bisa menggunakan sintaks dibawah ini

SELECT * FROM table_name; 

Contoh

Misalnya kita ingin memilih kolom trackid, name, composer, dan unitprice dari data/tabel tracks yang ada di dalam database chinook.db.

SELECT trackid, name, composer, unitprice FROM tracks; 
Tampilan dibatasi baris 1-15 saja.
TrackId Name Composer UnitPrice
1 For Those About To Rock (We Salute You) Angus Young, Malcolm Young, Brian Johnson 0.99
2 Balls to the Wall NA 0.99
3 Fast As a Shark F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman 0.99
4 Restless and Wild F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman 0.99
5 Princess of the Dawn Deaffy & R.A. Smith-Diesel 0.99
6 Put The Finger On You Angus Young, Malcolm Young, Brian Johnson 0.99
7 Let’s Get It Up Angus Young, Malcolm Young, Brian Johnson 0.99
8 Inject The Venom Angus Young, Malcolm Young, Brian Johnson 0.99
9 Snowballed Angus Young, Malcolm Young, Brian Johnson 0.99
10 Evil Walks Angus Young, Malcolm Young, Brian Johnson 0.99
11 C.O.D. Angus Young, Malcolm Young, Brian Johnson 0.99
12 Breaking The Rules Angus Young, Malcolm Young, Brian Johnson 0.99
13 Night Of The Long Knives Angus Young, Malcolm Young, Brian Johnson 0.99
14 Spellbound Angus Young, Malcolm Young, Brian Johnson 0.99
15 Go Down AC/DC 0.99

atau jika ingin memilih semua kolom/field dari data/tabel tracks bisa menggunakan

SELECT * FROM tracks; 
Tampilan dibatasi baris 1-15 saja.
TrackId Name AlbumId MediaTypeId GenreId Composer Milliseconds Bytes UnitPrice
1 For Those About To Rock (We Salute You) 1 1 1 Angus Young, Malcolm Young, Brian Johnson 343719 11170334 0.99
2 Balls to the Wall 2 2 1 NA 342562 5510424 0.99
3 Fast As a Shark 3 2 1 F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman 230619 3990994 0.99
4 Restless and Wild 3 2 1 F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman 252051 4331779 0.99
5 Princess of the Dawn 3 2 1 Deaffy & R.A. Smith-Diesel 375418 6290521 0.99
6 Put The Finger On You 1 1 1 Angus Young, Malcolm Young, Brian Johnson 205662 6713451 0.99
7 Let’s Get It Up 1 1 1 Angus Young, Malcolm Young, Brian Johnson 233926 7636561 0.99
8 Inject The Venom 1 1 1 Angus Young, Malcolm Young, Brian Johnson 210834 6852860 0.99
9 Snowballed 1 1 1 Angus Young, Malcolm Young, Brian Johnson 203102 6599424 0.99
10 Evil Walks 1 1 1 Angus Young, Malcolm Young, Brian Johnson 263497 8611245 0.99
11 C.O.D. 1 1 1 Angus Young, Malcolm Young, Brian Johnson 199836 6566314 0.99
12 Breaking The Rules 1 1 1 Angus Young, Malcolm Young, Brian Johnson 263288 8596840 0.99
13 Night Of The Long Knives 1 1 1 Angus Young, Malcolm Young, Brian Johnson 205688 6706347 0.99
14 Spellbound 1 1 1 Angus Young, Malcolm Young, Brian Johnson 270863 8817038 0.99
15 Go Down 4 1 1 AC/DC 331180 10847611 0.99

SORTING Data

Sorting data bisa dilakukan dengan menggunakan perintah ORDER BY yang secara umum bisa dituliskan

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC; 

Nama-nama kolom yang dituliskan setelah perintah ORDER BY akan digunakan oleh program untuk mengurutkan data. Keyword ASC dan DESC berarti kita mengurutkan data secara ascending (dari kecil ke besar) dan descending (dari besar ke kecil). Secara default sqlite akan mengurutkan secara ascending.

Contoh

Misalkan kita hendak mengurutkan Column name, millisecond dan albumid, dan diurutkan berdasarkan column albumid.

SELECT name, milliseconds, albumid
FROM tracks ORDER BY albumid; 
Tampilan dibatasi baris 1-15 saja.
Name Milliseconds AlbumId
For Those About To Rock (We Salute You) 343719 1
Put The Finger On You 205662 1
Let’s Get It Up 233926 1
Inject The Venom 210834 1
Snowballed 203102 1
Evil Walks 263497 1
C.O.D. 199836 1
Breaking The Rules 263288 1
Night Of The Long Knives 205688 1
Spellbound 270863 1
Balls to the Wall 342562 2
Fast As a Shark 230619 3
Restless and Wild 252051 3
Princess of the Dawn 375418 3
Go Down 331180 4

Contoh lainnya jika kita ingin mengurutkan berdasarkan Milliseconds (descending) dan albumid (ascending)

SELECT name, milliseconds, albumid
FROM tracks
ORDER BY albumid ASC, milliseconds DESC; 
Tampilan dibatasi baris 1-15 saja.
Name Milliseconds AlbumId
For Those About To Rock (We Salute You) 343719 1
Spellbound 270863 1
Evil Walks 263497 1
Breaking The Rules 263288 1
Let’s Get It Up 233926 1
Inject The Venom 210834 1
Night Of The Long Knives 205688 1
Put The Finger On You 205662 1
Snowballed 203102 1
C.O.D. 199836 1
Balls to the Wall 342562 2
Princess of the Dawn 375418 3
Restless and Wild 252051 3
Fast As a Shark 230619 3
Overdose 369319 4

FILTERING Data

DISTINCT

DISTINCT digunakan untuk melihat baris-baris yang unik pada data/table.

Secara Umum bisa ditulis sebagai berikut :

SELECT DISTINCT column1, column2, ...
FROM table_name; 

Contoh

Misalnya saja dengan menggunakan data customers yang ada dalam database chinook.db, kita ingin mengetahui lokasi dari pelanggan tersebut.

SELECT DISTINCT city
FROM customers
ORDER BY city;
Tampilan dibatasi baris 1-15 saja.
City
Amsterdam
Bangalore
Berlin
Bordeaux
Boston
Brasília
Brussels
Budapest
Buenos Aires
Chicago
Copenhagen
Cupertino
Delhi
Dijon
Dublin

WHERE

WHERE melakukan filtering baris dengan beberapa kondisi (pernyataan logika)

Secara Umum bisa ditulis sebagai berikut :

SELECT column1, column2, ...
FROM table_name
WHERE condition; 

Contoh

Misalnya saja dengan menggunakan data tracks yang ada dalam database chinook.db, kita ingin mengetahui album 1 yang memiliki durasi lebih dari 25000.

SELECT name, milliseconds, bytes, albumid
FROM tracks
WHERE albumid = 1 AND milliseconds > 250000; 
Tampilan dibatasi baris 1-15 saja.
Name Milliseconds Bytes AlbumId
For Those About To Rock (We Salute You) 343719 11170334 1
Evil Walks 263497 8611245 1
Breaking The Rules 263288 8596840 1
Spellbound 270863 8817038 1

LIMIT

LIMIT digunakan untuk membatasi banyaknya baris yang ditampilkan

Secara umum bisa ditulis sebagai berikut:

SELECT column1, column2, ...
FROM table_name
LIMIT row_count; 

Contoh

Misalnya saja dengan menggunakan data tracks yang ada dalam database chinook.db. Kita ingin menampilkan 10 baris pertama dari kolom trackid dan name

SELECT trackId, name
FROM tracks
LIMIT 10;  
10 records
TrackId Name
1 For Those About To Rock (We Salute You)
2 Balls to the Wall
3 Fast As a Shark
4 Restless and Wild
5 Princess of the Dawn
6 Put The Finger On You
7 Let’s Get It Up
8 Inject The Venom
9 Snowballed
10 Evil Walks

BETWEEN

BETWEEN digunakan untuk melihat suatu nilai berada dalam jangkauan nilai tertentu

Secara umum bisa ditulis sebagai berikut

SELECT column1, column2, ...
FROM table_name
WHERE column_name BETWEEN value1 AND value2; 

Contoh

Misalnya saja dengan menggunakan data invoices yang ada dalam database chinook.db. Kita ingin menggunakan informasi InvoiceId, BillingAddress dan Total untuk mengetahui Total invoice yang berada di range 14.96 and 18.86

SELECT InvoiceId, BillingAddress, Total
FROM invoices
WHERE Total BETWEEN 14.91 and 18.86
ORDER BY Total;  
Tampilan dibatasi baris 1-15 saja.
InvoiceId BillingAddress Total
193 Berger Straße 10 14.91
103 162 E Superior Street 15.86
208 Ullevålsveien 14 15.86
306 Klanova 9/506 16.86
313 68, Rue Jouvence 16.86
88 Calle Lira, 198 17.91
89 Rotenturmstraße 4, 1010 Innere Stadt 18.86
201 319 N. Frances Street 18.86

IN

IN digunakan melihat/menguji jika suatu nilai sesuai dengan nilai yang ada dalam list (paling tidak ada satu yang sama)

Secara umum bisa ditulis sebagai berikut

SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, ...); 

Contoh

Misalnya saja dengan menggunakan data tracks yang ada dalam database chinook.db. Kita ingin melakukan filtering untuk tipe media 1 dan 2.

SELECT TrackId, Name, Mediatypeid
FROM Tracks
WHERE MediaTypeId IN (1, 2)
ORDER BY Name ASC; 
Tampilan dibatasi baris 1-15 saja.
TrackId Name MediaTypeId
3027 “40” 1
3412 “Eine Kleine Nachtmusik” Serenade In G, K. 525: I. Allegro 2
109 #1 Zero 1
3254 #9 Dream 2
602 ’Round Midnight 1
1833 (Anesthesia) Pulling Teeth 1
570 (Da Le) Yaleo 1
3045 (I Can’t Help) Falling In Love With You 1
3057 (Oh) Pretty Woman 1
3471 (There Is) No Greater Love (Teo Licks) 2
1947 (We Are) The Road Crew 1
2595 (White Man) In Hammersmith Palais 1
709 (Wish I Could) Hideaway 1
1894 …And Justice For All 1
1268 01 - Prowler 1

IS NULL

IS NULL digunakan untuk melihat/menguji suatu nilai null atau tidak

Secara umum bisa ditulis sebagai berikut

SELECT column1, column2, ...
FROM table_name
WHERE column_name IS NULL; 

Contoh

Misalnya saja dengan menggunakan data tracks yang ada dalam database chinook.db. Kita ingin melakukan filtering untuk column Composer yang null.

SELECT TrackId, Name, Composer
FROM Tracks
WHERE Composer IS NULL
ORDER BY Name ASC; 
Tampilan dibatasi baris 1-15 saja.
TrackId Name Composer
2918 “?” NA
3254 #9 Dream NA
3045 (I Can’t Help) Falling In Love With You NA
2869 …And Found NA
2906 …In Translation NA
3166 .07% NA
2242 100% HardCore NA
132 13 Years Of Grief NA
1070 16 Toneladas NA
723 1° De Julho NA
236 A Banda NA
3118 A Bencao E Outros NA
3209 A Benihana Christmas, Pts. 1 & 2 NA
1731 A Cura NA
2833 A Day In the Life NA

GROUPING Data

GROUP BY

Perintah GROUP BY digunakan untuk mengelompokan nilai yang sama menjadi suatu summary. Perintah ini biasanya digunakan dengan fungsi aggregate (COUNT, MAX, MIN, SUM, AVG) untuk masing-masing kelompok.

Secara umum perintah GROUP BY bisa ditulis

SELECT column1, column2, ... 
FROM table_name 
WHERE condition 
GROUP BY column1, column2, ... 

Contoh

Misalnya saja dengan menggunakan data tracks yang ada dalam database chinook.db. Kita ingin menghitung banyaknya track pada setiap album. Hal ini bisa dilakukan dengan menggunakan kolom albumid dan trackid. Kemudian untuk menghitung banyaknya track kita bisa menggunakan perintah COUNT pada kolom trackid.

SELECT albumid, COUNT(trackid)
FROM tracks
GROUP BY albumid;
Tampilan dibatasi baris 1-15 saja.
AlbumId COUNT(trackid)
1 10
2 1
3 3
4 8
5 15
6 13
7 12
8 14
9 8
10 14
11 12
12 12
13 8
14 13
15 5

HAVING

Pernyataan HAVING adalah mirip seperti pernyataan WHERE. WHERE digunakan filter data sebelum Grouping dengan GROUP BY sementara HAVING digunakan untuk exclude data setelah Grouping.

Secara umum perintah HAVING bisa ditulis.

SELECT column1, column2, aggregate_function (column_3),...
FROM table_name
GROUP BY column1, column2,
HAVING search_condition; 

Contoh

Misalkan saja dari contoh penggunaan GROUP BY kita ingin melihat banyaknya albumID ke 1 memiliki berapa banyak track.

SELECT albumid, COUNT(trackid)
FROM tracks
GROUP BY albumid
HAVING albumid=1; 
Tampilan dibatasi baris 1-15 saja.
AlbumId COUNT(trackid)
1 10

TUGAS

Tugas untuk Praktikum 02 ini adalah :

  1. Cari Database selain chinook.db & Northwind
  2. Pada Database yang Anda pilih, praktikkan penggunaan SELECT, ORDER BY, DISTINCT, WHERE, LIMIT, BETWEEN, IN, IS NULL, GROUP BY, HAVING, masing-masing minimal 1 kali.
  3. Pada Poin 2, Anda bisa menggunakan fungsi-fungsi tersebut, baik secara sendiri maupun bersama-sama fungsi yang lain.
  4. File yang dikumpulkan di newlms berupa file .txt atau .doc, yang berisi : NAMA, NIM, URL Youtube, Link Download ke Database yang Anda Pakai serta Daftar Syntax yang Anda gunakan.
  5. URL Youtube berisi Link Youtube dimana Anda Upload Video proses Anda menjalankan Syntax.
  6. Untuk mempersingkat Video yang Anda buat, siapkan Syntax yang akan Anda jalankan di file lain, sehingga Anda tinggal Copy dan Paste.
  7. Penilaian TIDAK berdasarkan bagus atau tidak nya Video yang Anda Upload. Silahkan gunakan Kamera Hp, ScreenRecorder ataupun lainnya yang memudahkan Anda. Sekali lagi, tugas ini tidak berfokus pada bagus atau tidaknya video yang Anda buat.

  1. Badan Informasi Geospasial, ↩︎