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.
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
Tampilan tabel
Warna_Favorit Film_Favorit
Warna_Favorit
teman warna
Film_Favorit
teman film
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:
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:
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.
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:
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.
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:
Kueri:
SELECT
acara,
SUM(tiket) AS total_tiket,
COUNT(tiket) AS jumlah_pembelian
FROM
pembelian
GROUP BY
acara
Hasil:
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).
Tabel pembelian:
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:
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.
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.
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.
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
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:
Hasil:
judul_film indikator_diluncurkan
Avengers X 1
Frozen V 1
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 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.
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 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.
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.
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,
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.