Anda di halaman 1dari 20

Panduan SQL Tingkat Menengah

Ketika Anda merasa telah menguasai SQL, Anda akan dapat mengerjakan kueri yang lebih sulit.
Panduan ini akan memperkenalkan beberapa fungsi SQL yang telah Anda
pelajari dengan lebih rinci, dan menambahkan beberapa alat baru untuk Anda gunakan. Pastikan untuk
menyimpan panduan ini, sehingga Anda dengan mudah merujuk ke kiat-kiat bermanfaat ini di masa
datang.

Struktur SQL untuk Kueri yang Lebih Kompleks


Anda akan mempelajari klausa dan ekspresi ini di bawah ini, tetapi pertama-tama mari kita lihat
bagaimana Anda menyusun kueri SQL yang lebih rumit:

SELECT Kolom yang ingin Anda lihat


FROM Tabel tempat data berada
WHERE Kondisi tertentu pada data itu
GROUP BY Kolom yang ingin Anda kelompokkan
HAVING Kondisi tertentu pada agregasi

ORDER BY Kolom yang ingin Anda susun dengan dan dalam urutan menaik atau menurun,
ASCending atau DESCending
LIMIT Jumlah maksimum baris yang diinginkan
untuk memuat hasil Anda

Berbagai jenis JOIN


Sebagian besar analis menggunakan INNER JOIN atau LEFT JOIN di sepanjang karier mereka. Saat
Anda menggabungkan tabel, Anda menggabungkan data dari satu tabel dengan data di tabel lain yang
dihubungkan oleh sebuah field yang sama-sama dimiliki kedua tabel tersebut. Misalnya, Anda memiliki
data warna favorit teman Anda di satu tabel dan film favorit pilihan teman Anda di tabel lain. Anda dapat
mengumpulkan kedua data warna dan film favorit itu dalam satu tabel dengan menggabungkan dua
tabel berdasarkan nama teman Anda, yang merupakan field yang sama-sama mereka miliki. Nama
teman Anda adalah JOIN field-nya atau field yang digunakan untuk menggabungkan kedua tabel. Di
dunia kerja, JOIN field biasanya berupa nomer identitas atau ID, seperti customer_id atau account_id.

Tampilan tabel
Warna_Favorit Film_Favorit

teman (string) teman (string)

warna (string) film (string)


Tampilan data

Warna_Favorit

teman warna

Rachel DeSantos biru

Sujin Lee hijau

Najil Okoro merah

John Anderson oranye

Film_Favorit

teman film

Rachel DeSantos Avengers

Sujin Lee Despicable Me

Najil Okoro Frozen

Jadi, dalam contoh ini, Anda akan menggunakan INNER JOIN jika Anda ingin melihat informasi nama
teman yang memiliki warna dan film favorit. Artinya jika John Anderson memiliki warna favorit tetapi tidak
ada film favorit, nama John Anderson tidak akan muncul dalam hasil Anda. Teman itu harus berada di
kedua tabel supaya muncul dalam hasil Anda. Jadi INNER JOIN berguna ketika Anda ingin melihat data
di mana kunci JOIN ada di kedua tabel, yang merupakan alasan mengapa Anda ingin menggabungkan
dataset tersebut. Biasanya, analis akan sangat sering menggunakan INNER JOIN.

SELECT
teman,
warna, film

FROM Warna_Favorit AS w
INNER JOIN
Film_Favorit AS f ON w.teman = f.teman
Hasil:

teman warna film

Rachel DeSantos biru Avengers

Sujin Lee hijau Despicable Me

Najil Okoro merah Frozen

Karena kueri ini menggunakan INNER JOIN, hasilnya hanya menampilkan tiga nama dari empat
teman Anda. Untuk mengingat kembali, hasil itu muncul karena kueri INNER JOIN hanya
menampilkan hasil di mana JOIN field —dalam hal ini "teman"— ada di kedua tabel. Karena John
Anderson tidak ada di tabel film favorit, ia dikeluarkan dari hasil kueri.

Sekarang, katakanlah Anda ingin menggunakan LEFT JOIN untuk memasukkan seluruh informasi teman
Anda ke dalam satu tabel (misalnya tabel warna favorit) dengan menambahkan data dari tabel lain
(misalnya tabel film favorit) jika ada. Jadi, jika John Anderson memiliki warna favorit tetapi tidak ada film
favorit, dia akan tetap muncul di hasil pencarian Anda. Dia akan memiliki bidang kosong (null) di isian film
favoritnya. Seringkali LEFT JOIN digunakan jika data yang akan Anda tarik dari tabel lain bersifat
opsional. Sebuah field yang datanya bagus untuk dimiliki tetapi tidak diperlukan untuk analisis karena
Anda mungkin banyak mendapatkan null. Di tempat kerja, Anda akan menemukan bahwa analis
menggunakan LEFT JOIN lebih jarang bila dibandingkan INNER JOIN.

SELECT
teman,
warna,
film
FROM
Warna_Favorit AS w
LEFT JOIN
Film_Favorit AS f ON w.teman = f.teman

Hasil:

teman warna film

Rachel DeSantos biru Avengers

Sujin Lee hijau Despicable Me

Najil Okoro merah Frozen

John Anderson oranye null

Jadi sekarang Anda tahu perbedaan antara INNER JOIN dan LEFT JOIN. Anda tahu bahwa INNER
JOIN adalah tipe JOIN yang paling umum digunakan karena selaras dengan kasus bisnis berbagai
perusahaan.
Alasan lain mengapa INNER JOIN sering digunakan adalah karena kunci JOIN ini harus ada di kedua
tabel maka INNER JOIN dapat menghasilkan lebih sedikit data. Artinya kueri dengan INNER JOIN
cenderung berjalan lebih cepat dan menggunakan sumber daya lebih sedikit
daripada kueri dengan LEFT JOIN. Hal ini mungkin tidak menjadi masalah bagi sebagian besar analis,
tetapi jika Anda bekerja dengan tabel yang sangat besar yang memiliki lebih dari 1 juta baris dan/atau
tergantung pada dialek SQL yang digunakan, kueri Anda mungkin membutuhkan waktu lebih lama untuk
dijalankan jika Anda menggunakan LEFT JOIN daripada INNER JOIN.

Pada dasarnya, hal yang bisa dipetik di sini adalah gunakan INNER JOIN sesering yang Anda bisa.

Agregator seperti SUM() dan COUNT()


Agregator meringkas baris menjadi satu nilai. Fungsi SUM() dan COUNT() adalah contoh agregator.
Jenis agregator yang tersedia akan bergantung pada dialek SQL yang digunakan perusahaan Anda.
Tetapi agregator yang paling umum digunakan seperti SUM(), COUNT(), MAX(), dan MIN() tersedia
dalam semua dialek SQL, meskipun ada sedikit perbedaan. Sangat mudah untuk melihat bagaimana
format agregator untuk dialek apa pun yang Anda kerjakan. Ada banyak sumber daya yang tersedia
secara online. Cukup buka mesin pencari favorit Anda dan cari fungsi agregat dan dialek SQL yang ingin
Anda gunakan. Misalnya, cari "Fungsi SUM di Server SQL." Semua agregator bekerja dengan cara yang
sama, jadi mari kita bahas SUM() dan COUNT(). Fungsi SUM() menjumlahkan kolom apa pun yang
Anda masukkan ke dalam tanda kurung. Fungsi COUNT() menghitung jumlah entri di kolom apa pun
yang Anda masukkan ke dalam tanda kurung. Misalnya, katakanlah Anda memiliki sebuah tabel
pembelian dengan daftar orang dan jumlah tiket film yang mereka beli.

Tabel pembelian:

nama tiket

Rachel DeSantos 3

Sujin Lee 2

Najil Okoro 2

John Anderson 1

Kueri:

SELECT
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian

Hasil:

total_tiket jumlah_pembelian

8 4
Anda juga dapat menambahkan klausa DISTINCT di dalam fungsi tersebut. Klausa ini akan bekerja di
sebagian besar dialek SQL tetapi sebaiknya Anda terlebih dahulu memeriksa dan mengkonfirmasi
bahwa fungsi tersebut bekerja dengan dialek yang digunakan perusahaan Anda. Menambahkan klausa
DISTINCT dalam fungsi SUM() atau COUNT() memungkinkan Anda melakukan agregasi hanya pada
setiap nilai field yang berbeda. Lihat di contoh di bawah ini:

SELECT
SUM(tiket) AS total_tiket,
SUM(DISTINCT tiket) AS total_tiket_distinct,
COUNT(tiket) AS jumlah_pembelian
COUNT(DISTINCT tiket) AS
jumlah_pembelian_distinct
FROM
pembelian

Hasil:

total_tiket total_tiket_distinct jumlah_pembelian jumlah_pembelian_di


stinct

8 6 4 3

Anda mungkin memperhatikan bahwa kolom dengan DISTINCT di dalamnya menghasilkan angka yang
lebih kecil. Hal itu karena DISTINCT memberi tahu SQL untuk menjumlahkan nilai-nilai yang unik saja.
Untuk lebih memahaminya, lihat kolom kedua untuk total_tiket_distinct, yang menunjukkan bagaimana
DISTINCT dapat digunakan dengan fungsi SUM(). Tapi, dalam contoh ini, tidak masuk akal untuk
menjumlahkan nilai-nilai yang berbeda saja. Anda mungkin tidak akan pernah menggunakan DISTINCT
dengan fungsi SUM(). Sebaliknya, Anda akan lebih sering menggunakan DISTINCT dengan fungsi
COUNT() karena klausa ini sangat membantu untuk mengidentifikasi kasus-kasus unik.

Menggunakan GROUP BY dengan agregator


Sebelumnya, ketika Anda belajar tentang SUM() dan COUNT() pada pembelian tiket film, Anda
meringkas data untuk mendapatkan jumlah total tiket yang dibeli dan total pembelian dengan
menggunakan SUM() dan COUNT(). Saat Anda menggunakan fungsi agregat seperti SUM() dan
COUNT() dengan klausa GROUP BY, grup-grup ini diringkas dalam irisan yang ditentukan oleh klausa
GROUP BY.

Misalnya, mari kita anggap bahwa tabel pembelian Anda tampak seperti di bawah ini, di mana setiap
orang bertransaksi untuk acara tertentu. Anda perlu menggunakan klausa GROUP BY jika Anda ingin
mendapatkan jumlah total tiket yang terjual dan jumlah total pembelian berdasarkan jenis acara. Anda
akan melihat bahwa jika ingin menjumlahkan berdasarkan sesuatu (misalnya acara), Anda dapat
menggunakan klausa GROUP BY. Dalam hal ini, SQL memang cukup intuitif.
Tabel pembelian baru:

acara nama tiket

bersenang- Rachel DeSantos 5


senang
kencan Sujin Lee 2

kencan Najil Okoro 2

bersenang- John Anderson 3


senang

Kueri:
SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
acara

Hasil:

acara total_tiket jumlah_pembelian

bersenang- 8 2
senang
kencan 4 2

Luar biasa! Sekarang Anda tahu cara menggunakan klausa GROUP BY dan kapan Anda perlu
menggunakannya. Berikut adalah hal menarik lainnya yang perlu diketahui: Anda dapat menggunakan
nomor kolom dalam klausa GROUP BY untuk menentukan apa yang ingin Anda kelompokkan alih-alih
menggunakan nama kolom. Di contoh terakhir, Anda ingin mengelompokkan berdasarkan acaranya.
Acara adalah kolom pertama yang ditulis dalam kueri SQL. Artinya Anda bisa menulis GROUP BY 1
bukan GROUP BY acara. Jika acara adalah kolom kedua dalam klausa SELECT, maka Anda akan
menulis GROUP BY 2. Lihat di bawah:

Kueri:
SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
acara
Sama dengan:
SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
1

Mengetahui pintasan ini dapat menghemat waktu saat Anda menulis kueri SQL dan mengelompokkan data
berdasarkan beberapa field. Dalam hal ini, Anda hanya perlu memisahkannya dengan koma (misalnya
GROUP BY 1, 2, 3, 4).

Kapan menggunakan HAVING.


Klausa HAVING mirip dengan klausa WHERE karena menyaring data berdasarkan kondisi tertentu.
Tetapi kedua klausul ini digunakan dalam situasi yang berbeda. Klausa WHERE digunakan untuk
membuat filter di tabel Anda, seperti filter untuk rentang tanggal atau negara tertentu. Klausa HAVING
digunakan untuk membuat filter pada agregasi Anda dan harus dipasangkan dengan klausa GROUP
BY.

Tabel pembelian:

acara nama tiket

bersenang- Rachel DeSantos 5


senang
kencan Sujin Lee 2

kencan Najil Okoro 2

bersenang- John Anderson 3


senang

Dalam contoh ini, Anda akan melihat bahwa Anda dapat memberi lapisan pada klausa HAVING jika Anda
ingin membatasi agregasi Anda, atau dalam kasus ini adalah SUM dan COUNT:
Kueri:

SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
acara
HAVING
SUM(tiket) > 5

Hasil:

acara total_tiket jumlah_pembelian

bersenang- 8 2
senang

Penting untuk dicatat bahwa hasil Anda tidak menampilkan acara 'kencan' lagi. Hal itu karena
klausa HAVING Anda menyaring untuk mendapatkan jumlah yang lebih besar dari 5. Acara
'kencan' hanya memiliki 4 total tiket, yang kurang dari 5, sehingga acara 'ken can' tidak muncul
dalam hasil Anda.

Bagus! Sekarang Anda tahu bagaimana dan kapan harus menggunakan klausa HAVING. Sebagai analis
data, Anda akan menggunakan banyak klausa WHERE dan hanya beberapa kali klausa HAVING. Hal itu
dilakukan karena kasus bisnis perusahaan, tetapi juga karena masalah sumber daya, seperti INNER
JOIN vs. LEFT JOIN. Jika kueri Anda berisi klausa HAVING, klausa itu akan memakan waktu lebih lama
untuk dijalankan dan membutuhkan lebih banyak sumber daya karena SQL perlu menyaring hasil dari
kalkulasi SUM() dan COUNT(). Jadi, adalah ide yang baik untuk mencoba meminimalkan penggunaan
klausa HAVING bila masih memungkinkan. Tapi, jika Anda perlu menggunakan HAVING, coba gunakan
tabel sementara.

Menggunakan ORDER BY untuk mengorganisir hasil Anda


Klausa ORDER BY membantu Anda mengorganisir hasil Anda. Klausa ini berlaku di akhir kueri SQL
dan merupakan klausa terakhir untuk digunakan kecuali Anda memiliki klausa LIMIT.

Versi tabel pembelian yang sedikit dimodifikasi:

nama tiket

Rachel DeSantos 3

Sujin Lee 5

Najil Okoro 2

John Anderson 4
Katakanlah kita ingin semua orang di tabel ini diatur berdasarkan jumlah tiket yang mereka beli
dari terbesar ke terkecil, atau urutan menurun.

SELECT
nama,
tiket
FROM
pembelian
ORDER BY
tiket DESC

Hasil:
nama tiket

Sujin Lee 5

John Anderson 4

Rachel DeSantos 3

Najil Okoro 2

Jika Anda ingin menunjukkan kepada orang dengan jumlah tiket paling sedikit terlebih dahulu,
Anda menginginkan hasil kuerinya dalam urutan menaik atau ASCending. Untuk melakukannya di
SQL, Anda dapat menggunakan ASC atau membiarkannya kosong karena SQL men yusun kolom
dalam urutan ASCending secara default. Namun, praktik terbaik adalah menulis ASC atau DESC
sehingga klausa ini jelas bagi semua orang yang membaca kueri Anda.

Kapan menggunakan LIMIT


Klausa LIMIT sangat membantu ketika Anda hanya ingin bekerja dengan sejumlah baris tertentu. Klausa
ini umumnya digunakan dalam dua situasi.

Dalam situasi pertama, katakanlah Anda menginginkan jumlah kasus X teratas. Dalam contoh tiket film,
misalkan Anda hanya menginginkan 3 besar pembelian tiket. Anda bisa menggunakan klausa LIMIT
seperti di bawah ini.

Kueri:

SELECT
nama,
tiket
FROM
pembelian
ORDER BY
tiket DESC
LIMIT 3 --3 hasil teratas saja
Hasil:

nama tiket

Sujin Lee 5

John Anderson 4

Rachel DeSantos 3

Dalam situasi kedua, katakanlah Anda ingin bekerja dengan seluruh dataset sebelum Anda menulis
kueri. Dalam hal ini, Anda akan menggunakan klausa LIMIT sehingga Anda tidak membuang-buang
sumber daya di setiap baris.

Kueri:
SELECT
nama,
tiket
FROM
pembelian
ORDER BY
tiket DESC
LIMIT 20 --20 hasil teratas saja

Hasil:

nama tiket

Rachel DeSantos 3

Sujin Lee 5

Najil Okoro 2

John Anderson 4

Anda mungkin memperhatikan bahwa Anda hanya mendapatkan empat baris data di hasil kueri
meskipun Anda menetapkan batas
20. Hal itu karena tabel pembelian hanya berisi empat baris data. Klausa LIMIT adalah jumlah baris
maksimum untuk ditampilkan, jika tabel pembelian itu berisi satu juta baris, hanya 20 baris yang akan
ditampilkan. Namun, karena tabel pembelian berisi kurang dari 20 baris, maka semua data ditampilkan.

Ekspresi bersyarat seperti CASE, IF, dan COALESCE()


Ekspresi bersyarat seperti pernyataan CASE dan fungsi COALESCE() digunakan saat Anda ingin
mengubah bagaimana hasil Anda disajikan. Meskipun Anda menetapkan kondisi dalam ekspresi
bersyarat, ekspresi bersyarat berbeda dari jenis kondisi yang Anda masukkan ke dalam klausa WHERE.
Kondisi yang dimasukkan ke dalam klausa WHERE berlaku untuk seluruh kueri, sementara ekspresi
bersyarat berlaku hanya untuk
field tersebut. Selain itu, Anda dapat mengubah bagaimana hasil Anda disajikan dengan ekspresi
bersyarat, yang tidak dapat dilakukan pernyataan WHERE. Mari kita lihat tiga ekspresi bersyarat
yang paling umum: CASE, IF, dan COALESCE().

Pernyataan CASE
Pernyataan CASE paling sering digunakan sebagai label dalam dataset Anda. Anda dapat menggunakan
pernyataan CASE untuk memberi label baris yang memenuhi kondisi tertentu sebagai X dan baris yang
memenuhi kondisi lain sebagai Y. Inilah sebabnya mengapa CASE biasa digunakan dengan fungsi
agregat ketika Anda ingin mengelompokkan banyak hal berdasarkan kategori. Berikut ini contoh yang
menggunakan tabel film yang diputar di bioskop lokal:

Tabel BioskopFilm:

genre judul_film

horor Silence of the Lambs

komedi Jumanji

keluarga Frozen 2

dokumenter 13th

Katakanlah Anda ingin mengelompokkan film-film ini ke dalam film yang akan Anda tonton dan yang
tidak akan Anda tonton, dan menghitung jumlah film yang ada di setiap kategori. Kueri Anda adalah:
SELECT
CASE
WHEN genre = ‘horor’ THEN ‘tidak akan menonton’
ELSE 'akan menonton'
END AS kategori_menonton, --membuat kategori Anda
sendiriCOUNT(judul_film) AS jumlah_film
FROM
BioskopFIlm GROUP
BY
1 --saat mengelompokkan berdasarkan CASE, gunakan nomor
posisi atau ketik seluruh pernyataan CASE di sini

Hasil:

kategori_menont jumlah_film
on
Tidak akan 1
menonton
Akan menonton 3

Anda mungkin memperhatikan bahwa Anda dapat menambahkan label ke dataset dengan
menggunakan pernyataan CASE. Tetapi perlu diingat bahwa fitur ini belum tentu tersedia di semua
dialek SQL, termasuk BigQuery. Jika Anda ingin
mempelajari lebih lanjut, harap tinjau dokumentasi COUNT() atau SUM() khususnya untuk dialek
SQL Anda dan lihat bagaimana pernyataan CASE dapat digunakan.

Ada cara lain agar Anda dapat menggunakan pernyataan CASE dalam BigQuery (sekali lagi, ini
mungkin tidak berlaku untuk semua dialek SQL). Jika kondisi Anda cocok, seperti contoh di atas, maka
Anda dapat menulis pernyataan CASE sebagai (bandingkan baris 2-3):

SELECT
CASE genre
WHEN 'horor' THEN 'tidak akan
menonton' ELSE 'akan menonton'
END AS kategori_menonton
COUNT(judul_film) AS jumlah_film
FROM
BioskopFilm
GROUP BY
1

Pernyataan ini akan menampilkan hasil yang sama, tetapi tidak disarankan karena hasilnya terbatas
hanya pada kondisi yang cocok (misalnya genre = 'horor'). Sebagai perbandingan, pernyataan
sebelumnya dengan WHEN genre = 'horor' lebih fleksibel dan dapat mengambil jenis kondisi lain,
seperti lebih besar dari (>), kurang dari (<), tidak sama dengan (<> atau !=), dll.

Pernyataan IF
Selanjutnya adalah pernyataan IF. Pernyataan IF mirip dengan pernyataan CASE, tetapi mereka
memiliki satu perbedaan utama: Pernyataan CASE bisa memiliki beberapa kondisi, sedangkan
pernyataan IF tidak. Pada contoh di atas, Anda hanya memiliki satu kondisi (misalnya genre WHEN =
'horor'), sehingga Anda juga bisa menggunakan pernyataan IF seperti ini:

SELECT
IF(genre='horror', 'tidak akan menonton', 'akan
menonton') AS kategori_menonoton,
COUNT(judul_film) AS jumlah_film
FROM
BioskopFilm
GROUP BY
1
Tetapi, jika Anda memiliki beberapa kondisi, Anda perlu menggunakan pernyataan CASE seperti ini:

SELECT
CASE
WHEN genre = ‘horor’ THEN ‘tidak akan
menonton’
WHEN genre = 'dokumenter' THEN 'akan
menonton sendirian'
ELSE 'menonton dengan
orang lain' END AS
kategori_menonton,
COUNT (judul_film) AS jumlah_film
FROM
BioskopFilm
GROUP BY
1

Hasil:

kategori_menont jumlah_film
on
Tidak akan 1
menonton
Akan menonton 1
sendirian
Menonton dengan 2
orang lain

Fungsi COALESCE()
Terakhir, adalah fungsi COALESCE(). Fungsi ini digunakan untuk mengembalikan ekspresi non-null
pertama yang ditemuinya dalam urutan yang ditentukan dalam fungsi tersebut. Fungsi ini berguna ketika
data Anda tersebar di banyak kolom. Contohnya, katakanlah Anda memiliki tabel dengan judul film
sebagai baris, kolom sebagai bulan, dan nilai 1 jika sebuah film diluncurkan pada bulan itu atau null jika
tidak. Lihat tabel PeluncuranFilm di bawah ini:

judul_film Jan_2030 Feb_2030 Mar_2030

Avengers X 1 null null

Frozen V null 1 null

Lion King IV null null null


Jika Anda ingin tahu apakah film-film ini diluncurkan di antara bulan Januari-Maret 2030,
maka Anda dapat menggunakan COALESCE. Contoh:
SELECT
judul_film
COALESCE (Jan_2030, Feb_2030, Mar_2030) AS
indikator_diluncurkan
FROM
PeluncuranFilm

Hasil:

judul_film indikator_diluncurkan

Avengers X 1

Frozen V 1

Lion King IV null

Anda mungkin memperhatikan bahwa dua dari tiga film itu memiliki nilai non-null di field yang ditentukan
(Jan_2030, Feb_2030, Mar_2030). Contoh ini menunjukkan cara kerja fungsi COALESCE. Fungsi ini akan
mencari ke setiap kolom yang Anda tentukan dalam fungsi tersebut dan mengembalikan nilai non-null jika
menemukannya.

Di dunia kerja, COALESCE sering digunakan untuk memastikan bahwa tidak ada fields yang berisi null.
Jadi pernyataan COALESCE bisa berupa: COALESCE(mulai_dari_sini, lalu_ke_sini, 0) untuk memberi
tahu SQL agar memeriksa apakah ada nilai non-null di dua field pertama tersebut. Jika tidak ada null di
field-field tersebut, maka letakkan angka nol di tempat null. Di BigQuery, cara ini sama dengan
menggunakan fungsi IFNULL() (hal itu dibahas lebih lanjut di sini). Dialek SQL lainnya mungkin tidak
memiliki fungsi IFNULL(), dan dalam hal ini, sebagai gantinya digunakan fungsi COALESCE().

Membuat dan menghapus tabel


Data di SQL disimpan dalam tabel. Panduan ini telah merujuk pada beberapa contoh tabel seperti tabel
pembelian, PeluncuranFilm, dan BioskopFilm. Mereka adalah tabel yang sudah ada karena Anda tidak
membuatnya.

Membuat tabel
Situasi ideal untuk membuat sebuah tabel adalah jika tiga kondisi berikut terpenuhi:
1. Kueri kompleks yang berisi beberapa JOIN
2. Hasil keluaran berupa sebuah tabel
3. Anda sering kali atau secara teratur perlu menjalankan kueri tersebut

Jika kondisi-kondisi ini terpenuhi, maka membuat tabel pelaporan adalah sebuah ide bagus.
Namun praktik terbaik adalah memberitahu manajer atau rekan tim sebelum melakukannya jika
seandainya Anda perlu mendapatkan izin mereka untuk membuat tabel pelaporan.
Syntax untuk membuat tabel akan berubah tergantung pada dialek dan platform SQL yang Anda
gunakan. Anda akan belajar cara membuat tabel di BigQuery di sini, tetapi jika perusahaan Anda
menggunakan dialek SQL yang berbeda, adalah ide yang baik untuk mencari cara membuat tabel dalam
dialek SQL itu (misalnya. "Membuat tabel di PostgreSQL"). Atau lebih baik lagi, mintalah bantuan pada
manajer atau rekan satu tim Anda.

Secara umum, ketika Anda membuat tabel, Anda ingin memastikan tabel yang sama belum ada.
Karena jika Anda mencoba membuat tabel yang sudah ada, kueri akan menampilkan pesan error.
Cara memeriksa tabel yang sudah ada akan berbeda-beda di antara dialek SQL, tetapi selalu
merupakan hal yang baik untuk.
menghindari kesalahan yang tidak perlu dalam pekerjaan Anda.

Cara memeriksa tabel yang sudah ada sebelumnya di BigQuery adalah:

CREATE TABLE IF NOT EXISTS datasetku.FilmDanWarnaFavorit

AS
SELECT
teman,
warna,
film
FROM
Warna_Favorit AS w
INNER JOIN
Film_Favorit AS f ON w.teman = f.teman

Anda telah membuat tabel FIlmDanWarnaFavorit! Anda dapat mereferensikan satu tabel ini untuk
menemukan warna dan/atau film favorit setiap teman tanpa harus menggabungkan dua tabel terpisah,
Warna_Favorit dan Film_Favorit, setiap kali membutuhkannya.

Metode CREATE TABLE IF NOT EXISTS adalah metode terbaik jika tabel dalam kueri Anda (misalnya
Warna_Favorit dan Film_Favorit) tidak terus diperbarui. CREATE TABLE IF NOT EXISTS tidak akan
melakukan apa pun jika tabel sudah ada karena tabel itu tidak akan diperbarui. Jadi, jika tabel asal terus
diperbarui (misalnya nama teman baru terus ditambahkan lengkap dengan warna dan film favorit mereka),
maka lebih baik menggunakan metode pembuatan tabel yang berbeda.

Metode lain untuk membuat tabel adalah metode CREATE OR REPLACE TABLE. Begini cara
kerjanya:
CREATE OR REPLACE TABLE mydataset.FilmDanWarnaFavorit
AS
SELECT
teman,
warna,
film
FROM
Warna_Favorit AS w
INNER JOIN
Film_Favorit AS f ON w.teman = f.teman

Anda mungkin memperhatikan bahwa satu-satunya perbedaan di antara kedua cara membuat tabel
itu adalah baris pertama kueri. Baris ini memberi tahu SQL apa yang harus dilakukan jika tabel itu
sudah ada. CREATE TABLE IF NOT EXISTS hanya akan membuat sebuah tabel jika tabel itu
belum ada. Jika ada, maka kuerinya akan berjalan tetapi tidak akan melakukan apa -apa. Cara ini
adalah alat pengaman bila Anda tidak sengaja menimpa tabel yang sekiranya penting. Atau, jika
Anda memang perlu menimpa sebuah tabel, Anda dapat menggunakan CREATE OR REPLACE
TABLE.

Singkatnya, Anda akan menggunakan CREATE TABLE IF NOT EXISTS ketika membuat sebuah tabel
statis yang tidak perlu diperbarui. Jika tabel Anda perlu terus diperbarui, sebagai gantinya Anda dapat
menggunakan CREATE OR REPLACE TABLE.

Menghapus tabel
Sekarang mari kita berbicara tentang menghapus tabel. Langkah ini jarang terjadi, tetapi penting
untuk dipelajari karena, setelah tabel dihapus, data yang ada di dalamnya mungkin hilang. Dan,
karena data dimiliki oleh perusahaan tempat Anda bekerja, menghapus tabel bisa berarti
menyingkirkan sesuatu yang bukan milik Anda.

Pikirkan tentang bagaimana Anda akan memperlakukan akun media sosial yang bukan milik Anda.
Misalnya, jika perusahaan Anda memberi Anda akses ke akun mereka. Anda dapat melihat posting dan
mungkin (dengan izin) membuat posting Anda sendiri untuk mereka, tetapi Anda tidak akan menghapus
posting media sosial karena ini adalah atas akun pemilik, bukan akun Anda.

Jika Anda pernah berpikir untuk menekan tombol delete untuk tabel yang tidak Anda buat, pastikan
Anda memverifikasi alasan mengapa Anda menekan tombol itu dan tanyakan kembali kepada
manajer Anda untuk berjaga-jaga.

Tetapi, jika Anda perlu menghapus tabel, terutama jika itu adalah tabel yang Anda buat dan tidak
diperlukan lagi, Anda dapat menghapus tabel di BigQuery dengan menggunakan kueri ini:

DROP TABLE IF NOT EXISTS datasetku.FilmDanWarnaFavorit

DROP TABLE memberi tahu SQL untuk menghapus tabel, dan bagian IF EXISTS memastikan bahwa
Anda tidak mendapat pesan error jika tabel itu tidak ada. Klausa ini adalah alat pengaman, sehingga jika
tabel itu ada, maka tabelnya akan dihapus. Jika tabel itu tidak ada dan Anda menjalankan kueri ini, maka
tidak akan terjadi apa-apa. Jadi, bagaimanapun juga, alat pengaman bekerja sesuai keinginan Anda.
Praktik terbaik adalah menambahkan IF EXISTS.

Tabel sementara
Sejauh ini, Anda telah belajar cara membuat tabel dan kapan Anda perlu membuatnya. Jangan ragu
untuk meninjaunya di bagian atas jika Anda membutuhkan penyegaran. Tabel yang Anda buat
dengan metode CREATE TABLE IF NOT EXISTS atau CREATE OR REPLACE TABLE adalah tabel
permanen. Mereka dapat dibagikan dan dilihat oleh orang lain, dan nantinya dapat diakses.
Tapi, mungkin ada situasi di mana Anda tidak perlu membuat tabel permanen. Ingat: menyimpan data
dalam SQL menghabiskan uang dan sumber daya perusahaan. Jika Anda tidak memerlukan tabel
permanen, Anda dapat membuat tabel sementara sebagai gantinya. Tabel sementara hanya ada di
dalam sesi Anda (atau hingga 24 jam tergantung pada platform SQL Anda) dan tidak dapat dibagikan
atau dilihat oleh orang lain. Tabel sementara hanya ada untuk Anda selama sesi Anda. Pikirkan tabel
sementara seperti kertas buram di mana Anda dapat mencoret-coret kalkulasi sebelum meletakkan
jawaban akhir.

Mari kita mulai dengan menguraikan kapan Anda perlu membuat tabel permanen vs. tabel sementara.

Berikut adalah tiga syarat kapan Anda perlu membuat tabel permanen. Ketiga syarat
tersebut harus dipenuhi.
1. Kueri kompleks yang berisi beberapa JOIN
2. Hasil keluaran berupa sebuah tabel
3. Anda sering kali atau secara teratur perlu menjalankan kueri tersebut

Sebagai gantinya, Tabel sementara digunakan untuk memecah kueri kompleks menjadi bagian-bagian
yang lebih kecil. Kueri kompleks ini dapat berisi beberapa JOIN tetapi itu bukan keharusan. Anda
mungkin ingin menggunakan tabel sementara jika satu atau beberapa kondisi berikut berlaku:
● Menjalankan kueri dengan beberapa pernyataan JOIN dan WHERE secara perlahan
● Menjalankan kueri yang berisi GROUP BY dan HAVING secara perlahan
● Kueri bersarang (yaitu kueri dalam kueri)
● Jika Anda perlu melakukan kalkulasi di atas kalkulasi lain (misalnya, menjumlahkan
sesuatu per hari, lalu menghitung jumlah rata-rata untuk seluruh hari)

Jika salah satu kondisi di atas terpenuhi, maka penggunaan tabel sementara dapat mempercepat kueri ,
yang akan memudahkan Anda menulis kueri, serta memecahkan masalah jika terjadi kesalahan pada
kueri tersebut.

Berikut cara membuat tabel sementara:


CREATE TEMP TABEL ContohTabel

AS
SELECT
warna
FROM
Warna_Favorit
Sekarang, mari kembali ke tabel permanen yang Anda buat sebelumnya:
CREATE TABLE IF NOT EXISTS datasetku.FilmDanWarnaFavorit AS
SELECT
teman,
warna,
film
FROM
Warna_Favorit AS w
INNER JOIN
Film_Favorit AS f ON w.teman = f.teman

Kueri ini berjalan untuk tabel permanen karena memenuhi ketiga kondisi yang disebutkan
sebelumnya. Tapi, untuk tabel sementara, penggunaan kueri ini bukan ide yang bagus. Anda
mengerjakan beberapa JOIN tetapi tidak ada pernyataan WHERE, dan kueri berjalan sangat cepat
karena ukuran tabel Warna_Favorit dan Film_Favorit yang relatif kecil (jumlah baris kurang dari
100.000).

Mari kita pertimbangkan skenario yang berbeda untuk penggunaan tabel sementara. Sebelumnya
Anda belajar tentang GROUP BY dan HAVING Jika kueri Anda berisi kedua klausa itu, seperti yang
ada di bawah ini, maka Anda perlu menggunakan tabel sementara jika kueri Anda berjalan lambat.

Kueri tabel sementara (jika kueri Anda berjalan lambat):

SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
acara
HAVING
SUM(tiket) > 5

Dalam kueri di atas, SQL harus melakukan tiga tindakan. Pertama, kueri itu akan mengelompokkan tabel
Anda berdasarkan acara. Kedua, kueri itu mengambil SUM() dan COUNT() dari kolom tiket. Ketiga, kueri
itu akan menampilkan acara dengan nilai SUM () tiket yang lebih besar dari lima. Jika tabel pembelian
berukuran sangat besar (lebih dari 1 juta baris) dan Anda juga menjalankan JOIN dalam tabel ini, maka
kemungkinan besar kueri Anda akan berjalan lambat. Tapi, Anda dapat menghindari masalah ini dengan
menggunakan klausa HAVING dan mempercepat kueri Anda dengan memecahnya menjadi dua langkah
untuk digunakan di tabel sementara.
Pertama, Anda dapat melakukan agregasi GROUP BY:
CREATE TEMP TABLE TiketMenurutAcara AS
SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
acara,

Kemudian, Anda dapat melakukan batasan HAVING sebagai kondisi WHERE:


SELECT
acara,
jumlah_tiket,
jumlah_pembelian
FROM
TiketMenurutAcara jumlah_tiket
WHER
>5
E

Ada tiga hal penting yang perlu diperhatikan di sini:


1. Jika Anda menjalankan dua kueri secara bersamaan, yang harus Anda lakukan dengan
tabel sementara (hanya tersedia selama sesi itu), maka Anda memerlukan titik koma
untuk memisahkan setiap kueri.
2. Kueri pertama adalah tempat Anda membuat tabel sementara. Kueri kedua merujuk pada
tabel sementara ini dan field-field pada tabel tersebut. Itulah mengapa Anda dapat mengakses
jumlah tiket sebagai jumlah_tiket di kueri kedua.
3. Saat membuat nama tabel, jangan menggunakan spasi atau kueri akan mengembalikan pesan
error. Praktik terbaik adalah menggunakan metode penulisan camelcase untuk memberi nama
pada tabel yang Anda buat. Metode penulisan camelcase berarti Anda menggunakan huruf
besar untuk setiap awal kata dan di antara kata-kata tidak ada spasi, sehingga bentuknya seperti
punuk unta. Jadi tabel TiketMenurutAcara menggunakan kapitalisasi camelcase.

Kesimpulannya, Anda tidak harus menggunakan tabel sementara, tetapi tabel itu bisa menjadi alat yang
sangat berguna untuk membantu memecah kueri yang kompleks atau rumit menjadi langkah-langkah yang
lebih kecil dan mudah dikelola.
Kesimpulan
Panduan ini mencakup banyak konsep, tetapi Anda dapat kembali lagi dan lagi saat kemudian Anda
menulis kueri SQL sendiri. Seperti yang telah Anda pelajari selama materi ini, berlatih adalah bagian
penting dari proses pembelajaran, dan semakin sering Anda berlatih menggunakan SQL, semakin
banyak Anda akan membuat penemuan baru. Anda dapat menyimpan panduan ini sehingga Anda
dapat meninjau dan merujuk pada fungsi dan konsep ini apabila dibutuhkan.

Anda mungkin juga menyukai