Praktikum 02 - Pengenalan SQL dengan SQLite
Persiapan
Dalam melakukan Praktikum 02 Matakuliah STA581-Sains Data ini, Anda perlu melakukan persiapan sebagai berikut :
Buat Folder dengan nama
sqlite
pada DriveC:
Anda, Sehingga bisa diakses denganC:\sqlite
Buat Folder dengan nama
db
padaC:\sqlite
, sehingga bisa diakses denganC:\sqlite\db
Download
sqlite3.exe
dari URL berikut :ipb.link/sqlite3
, simpan diC:\sqlite
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 diC:\sqlite\db
Mempersiapkan cmd
/ Windows Command Processor
Windows Command Processor
bisa Anda buka, dengan menekan TombolWindows
+R
pada keyboard Anda, sehingga muncul Jendela di bawah ini.
|
- Ketikkan
cmd
, lalu tekan TombolEnter
pada Keyboard Anda.
<
|
Ketikkan
cd\
kemudian tekan TombolEnter
pada KeyBoard Anda.Ketikkan
cd sqlite
kemudian tekan TombolEnter
pada KeyBoard Anda. Langkah 3 dan 4 ini, digunakan untuk membuatC:\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
..
Data terkait media digital dibuat menggunakan data nyata dari library Apple iTunes.
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.)
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.
:\sqlite\db\chinook.db sqlite3 c
|
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;
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);
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
* FROM table_name; SELECT
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;
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;
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|DESC; ORDER BY column1, column2, ... ASC
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;
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;
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;
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;
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;
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;
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_nameIN (value1, value2, ...); WHERE column_name
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;
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_nameNULL; WHERE column_name IS
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;
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;
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.
aggregate_function (column_3),...
SELECT column1, column2,
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;
AlbumId | COUNT(trackid) |
---|---|
1 | 10 |
TUGAS
Tugas untuk Praktikum 02 ini adalah :
- Cari Database selain
chinook.db
&Northwind
- 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.
- Pada Poin 2, Anda bisa menggunakan fungsi-fungsi tersebut, baik secara sendiri maupun bersama-sama fungsi yang lain.
- File yang dikumpulkan di
newlms
berupa file.txt
atau.doc
, yang berisi :NAMA
,NIM
,URL Youtube
,Link Download ke Database yang Anda Pakai
sertaDaftar Syntax
yang Anda gunakan.
URL Youtube
berisi Link Youtube dimana Anda Upload Video proses Anda menjalankan Syntax.
- Untuk mempersingkat Video yang Anda buat, siapkan Syntax yang akan Anda jalankan di file lain, sehingga Anda tinggal
Copy
danPaste
.
- 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.
Badan Informasi Geospasial, abdul.aziz@big.go.id↩︎