{count, plural, one {Kursus} other {Kursus}}
Apa itu kueri SQL?
SQL adalah singkatan dari Structured Query Language. Orang sering melafalkannya sebagai “S-Q-L” atau “sequel.” SQL digunakan dalam pemrograman dan dirancang untuk mengelola data yang disimpan di basis data menggunakan kueri SQL.
Jenis sistem manajemen basis data (DBMS) yang paling umum adalah sistem manajemen basis data relasional (RDBMS), tempat kita menyimpan data terstruktur, yaitu data yang memuat relasi antar entitas dan variabel. Entitas dan variabel ini diatur sebagai sekumpulan tabel dengan kolom dan baris. Beberapa RDBMS paling populer adalah MYSQL, Oracle, IBM DB2, dan Microsoft SQL Server.
Data di RDBMS disimpan dalam objek basis data yang disebut tabel. Sebuah basis data sering kali berisi beberapa tabel. Setiap tabel diidentifikasi dengan nama unik dan memuat kumpulan entri data terkait yang terstruktur sebagai baris dan kolom.
Kolom adalah entitas vertikal; kolom disebut field dan berisi semua informasi yang terkait dengan suatu field tertentu dalam tabel. Setiap baris dalam tabel dikenal sebagai record; ini adalah entitas horizontal dalam tabel.
Struktur sebuah basis data bisa terasa mirip dengan Excel. Namun, secara umum basis data lebih kuat daripada spreadsheet Excel. Berikut tiga alasannya:
- Basis data dapat berinteraksi dengan banyak bahasa pemrograman lain—memberi pengembang kemampuan lebih untuk mengelola dan mengambil informasi dari data.
- Basis data dapat memproses lebih banyak data dibandingkan spreadsheet di Excel. Excel dapat menangani hingga 1 juta baris data, sedangkan basis data dapat menangani lebih dari satu miliar baris.
- Basis data lebih mudah dihubungkan ke internet, memungkinkan ratusan pengguna dan aplikasi mengaksesnya secara bersamaan.
Tak sabar mulai belajar SQL? DataCamp punya materi hebat untuk memulai; belajar SQL menyoroti track yang dapat Anda ikuti untuk mengasah keterampilan SQL Anda!
Sekarang mari kita menyelami Kueri SQL lebih dalam…
Sebuah kueri SQL adalah pernyataan yang dibangun dengan menggabungkan berbagai perintah SQL. Perintah SQL tersebut bersama-sama menjalankan tugas tertentu untuk mengakses, mengelola, memodifikasi, memperbarui, mengontrol, dan mengatur data Anda yang disimpan di basis data dan dikelola melalui DBMS.
Mengapa menggunakan SQL?
SQL sangat serbaguna, digunakan oleh semua orang mulai dari data scientist dan engineer hingga pemasar dan tim sumber daya manusia—pada dasarnya, siapa pun yang ingin lebih melek data!
SQL tidak hanya digunakan di industri teknologi atau terbatas pada perusahaan besar. Banyak industri dari berbagai skala menggunakannya secara langsung atau tidak langsung. Misalnya, para profesional di industri keuangan dan layanan kesehatan sering menggunakan SQL karena banyaknya data yang mereka hasilkan.
Data adalah komoditas baru, dan SQL adalah alat yang sangat kuat untuk menangani dan mengolah big data. Ingin tahu bagaimana memaksimalkan SQL? Lihat tutorial DataCamp Apa yang dapat Anda lakukan dengan SQL untuk membantu menjawab pertanyaan tersebut.
Cara menulis kueri SQL
Sebelum masuk ke perumusan kueri itu sendiri, mari kita pertimbangkan pertanyaan: “Di mana saya menulis dan mengeksekusi kueri SQL saya?”
Pusat Belajar SQL DataCamp bisa menjadi titik awal yang baik untuk mulai bekerja dengan SQL di mesin Mac atau Windows.
Namun jika Anda hanya ingin mulai belajar bahasa asli basis data—SQL, Anda dapat memulai dengan kursus Introduction to SQL dari DataCamp. Kursus ini mengajarkan sintaks SQL yang digunakan banyak jenis basis data, seperti PostgreSQL, MySQL, SQL Server, dan Oracle. Anda akan bekerja dengan antarmuka SQL bawaan DataCamp dan tidak perlu berurusan dengan kerepotan penyiapan awal RDBMS.
DataCamp juga memiliki alat notebook hebat tempat Anda dapat membuat notebook sendiri: DataLab. DataLab adalah notebook kolaboratif berbasis cloud yang memungkinkan Anda menganalisis data, berkolaborasi dengan tim, dan berbagi insight. DataLab dirancang untuk membawa Anda dari belajar data science ke praktik data science. Dengan dataset bawaan, Anda dapat mulai menganalisis data dalam hitungan menit.
Sekarang mari kita lihat dataset yang akan kita gunakan dalam tutorial ini.
Kita akan mulai dengan ‘films’—sebuah tabel SQL yang memuat data 10 film. Data ini hanyalah subset kecil dari dataset IMDb Film yang digunakan dalam kursus Introduction to SQL DataCamp yang disebutkan sebelumnya.
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
Schindler's List |
1993 |
22000000 |
96067179 |
8.9 |
|
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
|
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
18000000 |
290158751 |
8.8 |
|
10 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
Tabel ‘films’ memiliki sepuluh record—nama film disimpan pada 10 baris. Field adalah lima kolom di tabel yang memuat informasi terkait film.
- ‘title’ adalah nama film
- ‘release_year’ adalah tahun rilis film
- ‘budget’ adalah biaya produksi film dalam dolar Amerika
- ‘gross’ adalah pendapatan film dalam dolar Amerika.
- ‘imdb_score’ menunjukkan rating yang dihasilkan dari suara pengguna IMDb, bukan kritikus film.
Mari mulai latihan dengan beberapa perintah SQL dasar untuk mengeksplorasi tabel ‘films’ di atas. Kami tidak mengharapkan Anda langsung mengeksekusi kueri solusi… melainkan menggunakannya sebagai dasar untuk mempelajari konsep kunci. Jadi jangan khawatir jika Anda belum memutuskan platform tempat menjalankan kueri.
Kueri SQL dasar
Perlu diingat bahwa kata kunci atau perintah SQL tidak peka huruf besar/kecil; menulis ‘select’ sama dengan menulis ‘SELECT’.
Kita akan menggunakan titik koma di akhir setiap pernyataan SQL yang kita tulis. Ini adalah kebiasaan pada beberapa sistem basis data, dan dilakukan untuk memisahkan setiap pernyataan SQL agar dapat dieksekusi dalam panggilan yang sama ke server.
Mari mulai dengan sebuah pertanyaan. Q1: Apa saja film yang disimpan di tabel?
SELECT - FROM
Pernyataan SELECT digunakan untuk memilih field yang ingin Anda lihat dari tabel basis data. Untuk Q1, Anda menginginkan field ‘title’.
Perintah/kata kunci FROM menentukan tabel tertentu dalam basis data dari mana Anda ingin menarik data. Ingat, sebuah basis data dapat berisi banyak tabel.
Sintaks: SELECT column1, column2, … FROM table_name;
Kueri SQL: SELECT title FROM films;
Hasil:
|
title |
|
|
1 |
The Godfather |
|
2 |
The Dark Knight |
|
3 |
The Godfather: Part II |
|
4 |
Schindler's List |
|
5 |
Pulp Fiction |
|
6 |
The Lord of the Rings: The Return of the King |
|
7 |
Fight Club |
|
8 |
Inception |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
|
10 |
The Shawshank Redemption |
Anda mungkin bertanya-tanya, bagaimana jika Anda belum pernah melihat tabel di atas sehingga tidak tahu nama kolom untuk ditentukan dalam pernyataan SELECT. Pertanyaan bagus! Kita akan mempelajari ‘*’ (asterisk) yang “magis” nanti dalam tutorial.
WHERE
Q2: Apa saja film yang dirilis pada 2010?
Untuk pertanyaan ini, Anda ingin “menyaring” film sehingga Anda memiliki nama film yang memenuhi kondisi: ‘release_year’ adalah 2010.
Anda dapat menggunakan klausa ‘WHERE’ untuk mengekstrak hanya record yang memenuhi kondisi tertentu.
Sintaks: SELECT column1, column2, … FROM table_name WHERE condition;
Kueri SQL: SELECT title, release_year FROM films WHERE release_year = 2010;
Hasil:
|
title |
release_year |
|
|
1 |
Inception |
2010 |
Operator dalam Klausa WHERE
Operator berikut dapat digunakan dalam klausa WHERE:
|
Operator |
Deskripsi |
|
= |
Sama dengan |
|
> |
Lebih besar dari |
|
< |
Lebih kecil dari |
|
>= |
Lebih besar dari atau sama dengan |
|
<= |
Lebih kecil dari atau sama dengan |
|
<> atau != |
Tidak sama dengan. |
|
BETWEEN |
Di antara suatu rentang tertentu |
|
LIKE |
Mencari pola yang cocok dengan pola yang diberikan |
|
IN |
Menentukan beberapa nilai yang mungkin |
Aritmetika di SQL
Anda dapat melakukan aritmetika sederhana di SQL menggunakan simbol matematika: +, -, *, /. Namun, Anda hanya dapat melakukan operasi antar kolom menggunakan simbol aritmetika ini. Anda juga dapat menggunakan tanda kurung untuk mengatur urutan operasi.
Tetapi jangan khawatir, untuk operasi yang lebih rumit—SQL memiliki fungsi agregat yang memungkinkan Anda melakukan operasi dalam baris yang sama. Kita bahas topik ini nanti dalam tutorial.
Q3: Hitung laba yang diperoleh setiap film dalam tabel ‘films’.
Petunjuk: Lakukan Gross - Budget dan simpan hasilnya di kolom bernama ‘movie_profit’ menggunakan AS
Kueri SQL: SELECT title, (gross - budget) AS movie_profit FROM films
Hasil:
|
title |
movie_profit |
|
|
1 |
The Godfather |
128821952 |
|
2 |
The Dark Knight |
348316061 |
|
3 |
The Godfather: Part II |
44300000 |
|
4 |
Schindler's List |
74067179 |
|
5 |
Pulp Fiction |
99930000 |
|
6 |
The Lord of the Rings: The Return of the King |
283019252 |
|
7 |
Fight Club |
-25976605 |
|
8 |
Inception |
132568851 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
272158751 |
|
10 |
The Shawshank Redemption |
3341469 |
Disclaimer: Para penggemar film mungkin terganggu oleh laba negatif untuk Fight Club. Rumus yang digunakan ((gross - budget) AS movie_profit) sangat sederhana dan memang, sesuai rumus dan data, hasilnya benar.
Tetapi contoh di atas mengingatkan Anda untuk memperhatikan proses pengumpulan data! Bahkan eksplorasi data sederhana dapat mengungkap kesalahan data yang mungkin disebabkan oleh kesalahan dalam proses pengumpulan atau penyimpanan data (perubahan tipe data, dll)—mungkin itulah yang terjadi saat menyusun dataset yang digunakan.
Selalu perhatikan data yang Anda kerjakan!
AND, OR, NOT
Klausa WHERE dapat dikombinasikan dengan klausa kondisional lain menggunakan operator AND, OR, dan NOT. Operator AND dan OR digunakan untuk memfilter record berdasarkan lebih dari satu kondisi, dan operator NOT digunakan untuk menegasikan suatu kondisi.
Mari lihat penggunaannya dengan contoh:
Q4: Apa saja film yang dirilis pada 2010 dan memiliki rating lebih tinggi dari 9?
Sintaks: SELECT column1, column2, … FROM table_name WHERE condition1 AND condition2 AND condition3 AND condition4…..;
Kueri SQL: SELECT title, release_year, imdb_score FROM films WHERE release_year = 2010 AND imdb_score >= 9;
Operator AND menampilkan record jika semua kondisi yang dipisahkan oleh AND bernilai benar.
Dalam tabel ‘films’, kita memiliki film ‘Inception’. Ini adalah satu-satunya nilai yang benar untuk release_year = 2010, tetapi salah untuk imdb_score >= 9 dan karena itu tidak memenuhi kedua set kondisi AND. Maka kueri mengembalikan himpunan hasil kosong.
Q5: Apa saja film yang dirilis pada 2010 atau memiliki rating lebih tinggi dari 9?
Sintaks: SELECT column1, column2, … FROM table_name WHERE condition1 OR condition2 OR condition3 OR condition4…..;
Kueri SQL: SELECT title, release_year, imdb_score FROM films WHERE release_year = 2010 OR imdb_score >= 9;
Hasil:
|
title |
release_year |
imdb_score |
|
|
1 |
The Godfather |
1972 |
9.2 |
|
2 |
The Dark Knight |
2008 |
9 |
|
3 |
The Godfather: Part II |
1974 |
9 |
|
4 |
Inception |
2010 |
8.8 |
|
5 |
The Shawshank Redemption |
1994 |
9.3 |
Operator OR menampilkan record jika salah satu dari kondisi yang dipisahkan oleh OR bernilai TRUE.
Film: The Godfather, The Dark Knight, The Godfather: Part II, The Shawshank Redemption bernilai benar untuk imdb_score >= 9, sedangkan Inception bernilai benar untuk release_year = 2010, sehingga semuanya lolos pada kondisi OR.
Q6: Apa saja film yang tahun rilisnya bukan 2010?
Sintaks: SELECT column1, column2, … FROM table_name WHERE NOT condition1;
Kueri SQL: SELECT title, release_year FROM films WHERE NOT release_year = 2010;
Hasil:
|
title |
release_year |
|
|
1 |
The Godfather |
1972 |
|
2 |
The Dark Knight |
2008 |
|
3 |
The Godfather: Part II |
1974 |
|
4 |
Schindler's List |
1993 |
|
5 |
Pulp Fiction |
1994 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
|
7 |
Fight Club |
1999 |
|
8 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
|
9 |
The Shawshank Redemption |
1994 |
Anda juga bisa menulis: SELECT title, release_year FROM films WHERE release_year != 2010;
Ini juga akan memberi hasil yang sama seperti di atas.Ada banyak cara untuk mencapai hasil yang sama di SQL. Namun, beberapa kueri mungkin lebih bertenaga kinerja dibanding yang lain. Kinerja dapat bergantung pada banyak faktor—jumlah data, perintah yang digunakan dalam kueri, bagaimana basis data disusun, tipe data, dll. Ini adalah topik yang agak lebih rumit dan lanjutan yang tidak akan kita bahas dalam tutorial kueri SQL ini.
Tetapi jika Anda tertarik, kursus Database Design DataCamp membahas lebih dalam topik-topik ini.
ORDER BY
Kata kunci ORDER BY digunakan untuk mengurutkan hasil baik secara menaik (menggunakan kata kunci ASC) atau menurun (menggunakan kata kunci DESC). Secara default pengurutan dilakukan secara menaik.
Q7: Apa saja film yang disimpan di tabel? Urutkan menurun berdasarkan release_year.
Sintaks: SELECT column1, column2, … FROM table_name ORDER BY column1, column2, ... ASC|DESC;
Kueri SQL: SELECT title, release_year FROM films ORDER BY release_year DESC;
Hasil:
|
title |
release_year |
|
|
1 |
Inception |
2010 |
|
2 |
The Dark Knight |
2008 |
|
3 |
The Lord of the Rings: The Return of the King |
2003 |
|
4 |
Fight Club |
1999 |
|
5 |
Pulp Fiction |
1994 |
|
6 |
The Shawshank Redemption |
1994 |
|
7 |
Schindler's List |
1993 |
|
8 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
|
9 |
The Godfather: Part II |
1974 |
|
10 |
The Godfather |
1972 |
LIMIT
Terkadang basis data membutuhkan waktu lama untuk menjalankan kueri Anda; terutama jika jumlah data yang disimpan sangat besar.
Cara mudah dan cepat untuk menguji kueri atau mengambil sampel jenis hasil yang Anda peroleh adalah menggunakan fungsi LIMIT. LIMIT memungkinkan Anda membatasi jumlah hasil yang didapat.
Q8: Apa saja 5 film terbaru yang disimpan di tabel?
Petunjuk: Urutkan himpunan hasil secara menurun terkait release_year lalu gunakan LIMIT.
Sintaks: SELECT column1, column2, … FROM table_name LIMIT x;
Kueri SQL: SELECT title, release_year FROM films ORDER BY release_year DESC LIMIT 5;
Hasil:
|
title |
release_year |
|
|
1 |
Inception |
2010 |
|
2 |
The Dark Knight |
2008 |
|
3 |
The Lord of the Rings: The Return of the King |
2003 |
|
4 |
Fight Club |
1999 |
|
5 |
Pulp Fiction |
1994 |
INSERT INTO
INSERT INTO digunakan untuk menambahkan record baru ke tabel basis data. Anda dapat menulis pernyataan INSERT INTO dengan dua cara:
- Menentukan nama kolom beserta nilai yang sesuai
Sintaks: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
- Jika Anda menambahkan nilai untuk SEMUA kolom tabel, Anda tidak perlu menyebutkan nama kolom dalam kueri. Berhati-hatilah saat menggunakan metode ini, dan pastikan urutan nilai sama dengan urutan kolom di tabel.
Sintaks: INSERT INTO table_name VALUES (value1, value2, value3, ...);
Q9: Tambahkan entri untuk ‘The Godfather: Part III’ ke tabel dengan detail: (‘The Godfather: Part III’, 1990, 54000000, 136900000, 7.6)
Sintaks: SELECT column1, column2, … FROM table_name ORDER BY column1, column2,... ASC|DESC;
Kueri SQL: INSERT INTO films (title, release_year, budget, gross, imdb_score)
VALUES (‘The Godfather: Part III’, 1970, 54000000, 136900000, 7.6);
Tabel hasil:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
Schindler's List |
1993 |
22000000 |
96067179 |
8.9 |
|
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
|
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
18000000 |
290158751 |
8.8 |
|
10 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
|
11 |
The Godfather: Part III |
1970 |
54000000 |
136900000 |
7.6 |
UPDATE
Kita menggunakan pernyataan UPDATE untuk memodifikasi record yang ada dalam tabel.
Q10: Koreksi release_year untuk ‘The Godfather: Part III’ menjadi 1990 alih-alih 1970
Sintaks: UPDATE table_name SET column1 = value1, column2 = value2, ...WHERE condition;
Kueri SQL: UPDATE films SET release_year = 1990 WHERE title = ‘The Godfather: Part III’;
Tabel hasil:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
Schindler's List |
1993 |
22000000 |
96067179 |
8.9 |
|
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
|
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
18000000 |
290158751 |
8.8 |
|
10 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
|
11 |
The Godfather: Part III |
1990 |
54000000 |
136900000 |
7.6 |
DELETE
Pernyataan DELETE digunakan untuk menghapus record yang ada dalam tabel.
Q11: Hapus entri ‘The Godfather: Part III’ dari tabel ‘films’.
Sintaks: DELETE FROM table_name WHERE condition;
Kueri SQL: DELETE FROM films WHERE title = ‘The Godfather: Part III’;
Tabel hasil: Sama seperti tabel asli yang kita mulai dengan total 10 record.
Kueri SQL lanjutan
Ingat kita menunda pembahasan ‘*’ yang “magis” di akhir Q1? Tanda * adalah asterisk. Ini adalah karakter menyeluruh yang bisa kita baca sebagai ‘semua’.
Kembali ke Q1: Apa saja film yang disimpan di tabel?
Kita menggunakan SELECT - FROM dengan Sintaks: SELECT column1, column2, … FROM table_name;
Kita menggunakan kueri: SELECT title FROM films;
Tetapi bagaimana jika Anda tidak tahu ‘title’ adalah field dalam tabel ‘films’? Atau nama field apa pun dalam tabel? Atau Anda sekadar ingin semua field dalam tabel untuk merasakan datanya? Nah, di sinilah * berguna.
Kita bisa menulis ulang kueri menjadi: SELECT * FROM films;
Ini akan mengambil semua field yang tersedia di tabel.
Karakter Wildcard SQL
LIKE
Operator LIKE digunakan dalam klausa WHERE untuk mencari pola tertentu dalam sebuah kolom.
Q12: Ambil semua nama film yang diawali dengan ‘The’
Sintaks: SELECT column1, column2, … FROM table_name WHERE column1 LIKE patternToMatch;
Kueri SQL: Select * FROM films WHERE title LIKE ‘The%’;
Tabel hasil:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
5 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
|
Karakter Wildcard |
Deskripsi |
Penggunaan: Contoh |
|
% (Persen) |
Mewakili nol atau lebih karakter |
The%: The, The Godfather, Theodore |
|
_ (Garis bawah) |
Mewakili satu karakter |
T_e: The, Tie |
|
[ ] (Tanda kurung siku) |
Mewakili satu karakter apa pun di dalam tanda kurung |
C[ao]t: Cat, Cot tetapi bukan Coat |
|
^ (Tanda sisipan) |
Mewakili karakter apa pun yang tidak ada di dalam tanda kurung |
Ca[^r]: Cat, Cab, Can tetapi bukan Car |
|
- (Tanda hubung) |
Mewakili satu karakter apa pun dalam rentang yang ditentukan |
C[a-o]: Can, Cab tetapi bukan Car, Cat |
Yang hebat adalah kita dapat menggunakan wildcard dalam kombinasi! Jadi Anda bisa membuat pernyataan pencocokan yang cukup kompleks menggunakan karakter wildcard bersama LIKE.
Fungsi Agregat
SQL sangat baik dalam mengagregasi data seperti yang Anda lakukan pada pivot table di Excel. Fungsi agregat dapat melakukan perhitungan bukan antar dua kolom tetapi dalam satu kolom, sehingga bekerja dengan semua atau sebagian baris dalam kolom yang sama.
Berikut fungsi agregat dalam SQL:
|
Fungsi |
Deskripsi |
|
COUNT |
Menghitung jumlah record dalam kolom tertentu |
|
SUM |
Menjumlahkan semua nilai dalam kolom tertentu |
|
MIN |
Mengembalikan nilai terendah dalam kolom tertentu |
|
MAX |
Mengembalikan nilai tertinggi dalam kolom tertentu |
|
AVG |
Mengembalikan nilai rata-rata untuk kelompok terpilih |
Q13: Apa film terbaru yang disimpan di tabel?
Kueri SQL: SELECT title AS latest_movie, MAX(release_year) AS released_in FROM films;
Hasil:
|
latest_movie |
released_in |
|
|
1 |
Inception |
2010 |
GROUP BY
Fungsi agregat SQL mengagregasi seluruh kolom. Namun bagaimana jika Anda ingin mengagregasi hanya sebagian kolom? Misalnya, Anda mungkin ingin menghitung jumlah film yang dirilis dalam satu tahun.
Di sinilah Anda memerlukan klausa GROUP BY. GROUP BY memungkinkan Anda memisahkan data ke dalam kelompok, yang kemudian dapat diagregasi secara independen satu sama lain.
Q13: Hitung jumlah film yang dirilis dalam satu tahun.
Kueri SQL: SELECT release_year, COUNT(*) AS number_of_movies FROM films GROUP BY release_year;
Hasil:
|
release_year |
number_of_movies |
|
|
1 |
1972 |
1 |
|
2 |
2008 |
1 |
|
3 |
1974 |
1 |
|
4 |
1993 |
1 |
|
5 |
1994 |
2 |
|
6 |
2003 |
1 |
|
7 |
1999 |
1 |
|
8 |
2010 |
1 |
|
9 |
1980 |
1 |
Contoh Kueri SQL dari beberapa tabel
Sejauh ini, kita hanya bekerja dengan satu tabel pada satu waktu. Namun kekuatan nyata dari basis data dan SQL berasal dari kemampuan untuk bekerja dengan data dari banyak tabel.
Istilah "basis data relasional" dalam RDBMS berasal dari fakta bahwa tabel dalam basis data saling berelasi. Tabel-tabel tersebut memiliki pengidentifikasi umum yang memungkinkan data dari banyak tabel dikombinasikan dengan mudah. Di sinilah kita menggunakan JOIN tabel SQL.
Mari lihat contoh sederhana untuk membiasakan diri dengan sintaks JOIN dan juga mempelajari sedikit tentang berbagai jenis JOIN yang mungkin.
Pertimbangkan tabel lain bernama ‘movieDirectors’ yang memuat nama sutradara untuk beberapa film yang kita miliki di tabel ‘films’.
|
title |
director |
|
|
1 |
The Godfather |
Francis Ford Coppola |
|
2 |
The Godfather: Part II |
Francis Ford Coppola |
|
3 |
The Godfather: Part III |
Francis Ford Coppola |
|
4 |
Schindler's List |
Steven Spielberg |
|
5 |
The Dark Knight Rises |
Christopher Nolan |
Kita dapat menggabungkan data di kedua tabel ini menggunakan pengidentifikasi umum: ‘title’.
Q14: Tambahkan kolom ke tabel ‘films’, mengisinya dengan nama sutradara dari tabel ‘movieDirectors’.
Sintaks: SELECT leftTable.column1, rightTable.column1, leftTable.column2…. FROM leftTable INNER JOIN rightTable ON leftTable.commonIdentifier = rightTable.commonIdentifier;
Kueri SQL: Select films.title, films.release_year, movieDirectors.director FROM films INNER JOIN movieDirectors ON films.title = movieDirectors.title
Hasil:
|
title |
release_year |
director |
|
|
1 |
The Godfather |
1972 |
Francis Ford Coppola |
|
2 |
The Godfather: Part II |
1974 |
Francis Ford Coppola |
|
3 |
Schindler's List |
1993 |
Steven Spielberg |
Berbagai jenis SQL Join
|
JOIN |
Deskripsi |
Diagram |
|
Inner Join |
Mengembalikan hanya record yang memiliki nilai yang cocok di kedua tabel |
|
|
Left (Outer) Join |
Mengembalikan semua record dari tabel kiri, dan record yang cocok dari tabel kanan |
|
|
Right (Outer) Join |
Mengembalikan semua record dari tabel kanan, dan record yang cocok dari tabel kiri |
|
|
Full (Outer) Join |
Mengembalikan semua record ketika ada kecocokan di tabel kiri atau kanan |
|
Pada kueri contoh di atas, ‘films’ adalah tabel kiri dan ‘movieDirectors’ adalah tabel kanan. Jadi dengan INNER JOIN yang kita lakukan, kita hanya mendapatkan film yang ada di kedua tabel. Himpunan hasilnya adalah irisan dari kedua tabel.
SQL UNION
SQL JOIN memungkinkan Anda menggabungkan dua dataset secara berdampingan. Namun dengan SQL UNION Anda dapat menumpuk satu dataset di atas dataset lainnya. Operator UNION digunakan untuk menggabungkan himpunan hasil dari dua atau lebih pernyataan SELECT ketika “aturan” berikut terpenuhi:
- Setiap pernyataan SELECT harus memiliki jumlah kolom yang sama.
- Kolom-kolom tersebut juga harus memiliki tipe data yang serupa.
- Kolom yang digunakan dalam pernyataan SELECT harus dalam urutan yang sama.
Sintaks: SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
Pertimbangkan tabel ‘movies_2000s’:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
2 |
The Trial of the Chicago 7 |
2020 |
35000000 |
7.7 |
Sekarang jika kita gabungkan kedua tabel…
Kueri SQL: SELECT title FROM films UNION SELECT title FROM movies_2000s;
Hasil:
|
title |
|
|
1 |
The Godfather |
|
2 |
The Dark Knight |
|
3 |
The Godfather: Part II |
|
4 |
Schindler's List |
|
5 |
Pulp Fiction |
|
6 |
The Lord of the Rings: The Return of the King |
|
7 |
Fight Club |
|
8 |
Inception |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
|
10 |
The Shawshank Redemption |
|
12 |
The Trial of the Chicago 7 |
Anda mungkin memperhatikan bahwa ‘Inception’ hanya muncul sekali dalam himpunan hasil. Ini karena UNION hanya memilih nilai yang unik; jika Anda menginginkan semua nilai, gunakan UNION ALL.
Kueri SQL Bersarang
SQL mampu melakukan hal-hal hebat dengan data. Kueri bersarang adalah alat lain dalam SQL yang membuatnya layak untuk dipelajari. Kueri bersarang tidak lain adalah kueri di dalam kueri (Seperti mimpi dalam Inception!)
Dengan kueri bersarang, Anda dapat melakukan operasi yang sangat rumit tetapi dalam beberapa langkah sambil menjaga keterbacaan dan pemahaman kode tetap terjaga.
Q15: Tentukan profitabilitas rata-rata film dalam tabel ‘films’.
Petunjuk: Anda menghitung profitabilitas sebelumnya, pada Q3. Sekarang Anda harus mengambil hasil dari kueri tersebut dan menerapkan fungsi AVG padanya.
Kueri SQL Bersarang:
SELECT AVG(*) AS average_profit FROM
(SELECT title, (gross - budget) AS movie_profit FROM films where gross > budget);
Kami menghapus nilai negatif dari ‘Fight Club’ dalam perhitungan pada kueri SQL bagian dalam dengan menambahkan gross > budget.
Dalam kueri bersarang di atas, pertama kueri bagian dalam dijalankan lalu himpunan hasil ini digunakan sebagai tabel sementara untuk kueri bagian luar guna mengambil data.
Kami tidak akan terlalu jauh membahas topik kueri SQL bersarang. Namun kami sangat merekomendasikan Anda mengikuti kursus Intermediate SQL DataCamp untuk menguasai kueri SQL. Anda akan bermain dengan European Soccer Database sambil mempelajari lebih lanjut tentang kueri bersarang. Anda juga akan mempelajari pernyataan CASE dan window functions—topik yang tidak sempat kami bahas dalam tutorial kueri SQL ini.
Pemikiran akhir
Anda telah mempelajari banyak hal tentang kueri SQL dan berada pada posisi yang baik untuk memulai perjalanan pemecahan masalah dunia nyata menggunakan SQL. Dalam tutorial kueri SQL ini, Anda mempelajari apa itu kueri SQL dan cara menulis kueri SQL.
Anda melihat sintaks kueri dan menjawab beberapa pertanyaan sepanjang jalan. Kita mulai dengan contoh kueri SQL sederhana menggunakan pernyataan SELECT - FROM - WHERE dan berlanjut ke kueri SQL yang sedikit lebih kompleks menggunakan join, union, dan kueri bersarang.
Kami membahas banyak hal dalam tutorial ini, namun ini BUKAN daftar lengkap semua kemungkinan kueri SQL sederhana dan lanjutan—masih banyak lagi. Dan kami sangat merekomendasikan mengikuti track SQL Fundamentals DataCamp untuk mendapatkan pemahaman SQL yang lebih dalam dan komprehensif.
Ingat, latihan adalah kunci menguasai keterampilan apa pun dan SQL bukan pengecualian! Latihan akan membawa keterampilan SQL Anda dari pemula menjadi mahir.
Jadi, ayo mulai dan selamat berkueri!




