Kursus
Menyaring baris dari sebuah tabel berdasarkan suatu kondisi atau sekumpulan kondisi adalah praktik yang sangat umum dalam analisis data. Di SQL, Anda dapat melakukannya menggunakan klausa where. Dalam tutorial ini, Anda akan menggunakannya untuk berbagai skenario.
Anda akan menggunakan PostgreSQL sebagai RDBMS (Relational Database Management System), tetapi sintaksnya tidak banyak berbeda saat menggunakan sistem basis data lainnya. Anda akan mulai dengan menyiapkan basis data PostgreSQL dan membuat tabel secara manual yang berisi data negara. Setelah ini disiapkan, Anda akan mengeksekusi beberapa kueri filter yang menggabungkan klausa WHERE.
Catatan: Untuk mengikuti tutorial ini, Anda harus memahami dasar-dasar SQL dan PostgreSQL. Sumber berikut mungkin membantu jika Anda belum familiar dengannya.
Membuat Tabel di PostgreSQL
Untuk mengikuti tutorial ini, Anda perlu membuat tabel di PostgreSQL yang memuat informasi tentang negara-negara di seluruh dunia. Tabel ini akan digunakan untuk mendemonstrasikan bagaimana klausa WHERE bekerja dalam berbagai skenario.
Langkah 1: Buat basis data baru
Buka pgAdmin (atau antarmuka SQL pilihan Anda) dan buat basis data PostgreSQL baru. Anda dapat menamainya misalnya world_data atau nama lain sesuai preferensi.
Langkah 2: Buat dan isi tabel kita
Setelah basis data siap, buka jendela editor kueri SQL baru dan jalankan kode SQL berikut. Ini akan membuat tabel bernama countries dan menyisipkan sekumpulan rekaman yang mencakup berbagai benua, tahun kemerdekaan, dan wilayah:
-- Create the countries tableCREATE TABLE countries ( code VARCHAR(3) PRIMARY KEY, name VARCHAR(100), continent VARCHAR(50), region VARCHAR(100), surface_area NUMERIC, indep_year INTEGER, local_name VARCHAR(100), gov_form VARCHAR(100), capital VARCHAR(100), cap_long NUMERIC, cap_lat NUMERIC);-- Insert sample data into the countries tableINSERT INTO countries (code, name, continent, region, surface_area, indep_year, local_name, gov_form, capital, cap_long, cap_lat)VALUES('IND', 'India', 'Asia', 'Southern Asia', 3287263, 1947, 'Bharat', 'Federal Republic', 'New Delhi', 77.2090, 28.6139),('PAK', 'Pakistan', 'Asia', 'Southern Asia', 881912, 1947, 'Pakistan', 'Federal Republic', 'Islamabad', 73.0551, 33.6844),('CHN', 'China', 'Asia', 'Eastern Asia', 9596961, NULL, 'Zhongguo', 'People''s Republic', 'Beijing', 116.4074, 39.9042),('VNM', 'Vietnam', 'Asia', 'South-Eastern Asia', 331212, 1945, 'Việt Nam', 'Socialist Republic', 'Hanoi', 105.8544, 21.0285),('JPN', 'Japan', 'Asia', 'Eastern Asia', 377975, NULL, 'Nippon', 'Constitutional Monarchy', 'Tokyo', 139.6917, 35.6895),('DEU', 'Germany', 'Europe', 'Western Europe', 357386, 1955, 'Deutschland', 'Federal Republic', 'Berlin', 13.4050, 52.5200),('FRA', 'France', 'Europe', 'Western Europe', 551695, 843, 'France', 'Republic', 'Paris', 2.3522, 48.8566),('RUS', 'Russia', 'Europe', 'Eastern Europe', 17098242, 1991, 'Rossiya', 'Federation', 'Moscow', 37.6173, 55.7558),('UKR', 'Ukraine', 'Europe', 'Eastern Europe', 603500, 1991, 'Ukrayina', 'Republic', 'Kyiv', 30.5234, 50.4501),('EGY', 'Egypt', 'Africa', 'Northern Africa', 1002450, 1922, 'Misr', 'Republic', 'Cairo', 31.2357, 30.0444),('NGA', 'Nigeria', 'Africa', 'Western Africa', 923768, 1960, 'Nigeria', 'Federal Republic', 'Abuja', 7.4951, 9.0578),('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', 7682300, 1901, 'Australia', 'Federal Parliamentary Democracy', 'Canberra', 149.1245, -35.3075),('USA', 'United States', 'North America', 'North America', 9833517, 1776, 'United States', 'Federal Republic', 'Washington, D.C.', -77.0369, 38.9072),('CAN', 'Canada', 'North America', 'North America', 9984670, 1867, 'Canada', 'Constitutional Monarchy', 'Ottawa', -75.6972, 45.4215),('BRA', 'Brazil', 'South America', 'South America', 8515767, 1822, 'Brasil', 'Federal Republic', 'Brasília', -47.9292, -15.7801),('ARG', 'Argentina', 'South America', 'South America', 2780400, 1816, 'Argentina', 'Federal Republic', 'Buenos Aires', -58.3816, -34.6037);Tabel ini memiliki berbagai informasi tentang total sekitar 16 negara di seluruh dunia. Tabel tersebut memiliki kolom-kolom berikut:
codeyang merupakan primary key tabel dan menunjukkan kode negara universal untuk suatu negaranameyaitu nama sebuah negaracontinenttempat negara beradaregionlokasi geografis tempat negara beradasurface_areadari negara tersebutindep_yearyaitu tahun ketika suatu negara memperoleh kemerdekaanlocal_namedari suatu negaragov_formyaitu jenis pemerintahan yang berlaku di suatu negaracapitaldari suatu negaracap_longyaitu bujur ibu kota suatu negaracap_latyaitu lintang ibu kota suatu negara
Sekarang mari mulai menyaring beberapa rekaman dengan klausa WHERE.
Menggunakan Klausul WHERE di SQL
Di SQL, klausa WHERE memungkinkan Anda memfilter rekaman berdasarkan nilai tekstual maupun numerik. Anda dapat membandingkan nilai-nilai ini, dan operasi berbasis perbandingan berikut didukung -
=sama dengan<>dan!=tidak sama dengan<kurang dari>lebih dari<=kurang dari atau sama dengan>=lebih dari atau sama dengan
Disarankan untuk menggunakan <> alih-alih != sesuai standar SQL.
Sekarang mari ambil rekaman negara di mana code-nya adalah AUS. Kolom yang harus Anda bandingkan di sini adalah kolom code dan nilai yang dibandingkan adalah AUS. Kuerinya adalah:
SELECT * FROM countries WHERE code = 'AUS';Dan Anda mendapatkan:

Perhatikan beberapa hal berikut -
Klausa
WHEREselalu muncul setelahFROM.Di SQL, string diapit menggunakan tanda petik tunggal.
Sekarang mari lihat perbandingan numerik. Mari ambil rekaman negara yang memperoleh kemerdekaan (indep_year) setelah 1901:
SELECT * FROM countries WHERE indep_year > 1901;Anda mendapatkan rekaman total 3 negara yang memperoleh kemerdekaan setelah 1901. Perhatikan pemakaian operator pembanding di sini. Kolom indep_year bertipe bilangan bulat. Oleh karena itu, tidak menggunakan tanda petik dalam perbandingan.
Anda dapat menghubungkan beberapa kondisi dalam klausa WHERE menggunakan penghubung AND dan OR. Kueri berikut mendapatkan rekaman negara-negara where continent = 'Asia' and indep_year > 1900 -
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901;
Anda mendapatkan informasi tentang total tiga negara yang berada di benua Asia dan memperoleh kemerdekaan setelah 1901. Perhatikan bahwa dalam kueri di atas, Anda membandingkan nilai tekstual dan numerik. Sebagai latihan, Anda bisa mencoba berbagai kombinasi AND dan OR dalam klausa WHERE.
Catatan: Saat Anda menggabungkan AND dan OR, jangan lupa untuk menutup masing-masing kondisi dalam tanda kurung. Jika tidak, SQL akan bingung saat menentukan prioritas evaluasi kondisi.
Dengan kueri berikut, Anda mendapatkan total enam negara.
SELECT * FROM countries WHERE(continent = 'Europe' AND indep_year > 1900)or(continent = 'Asia' AND indep_year > 1900);
Anda bahkan dapat menghubungkan lebih dari dua kondisi dalam klausa WHERE:
SELECT * FROM countries WHERE continent = 'Asia' OR indep_year > 1900 OR surface_area > 652090;
Di sini, Anda mendapatkan total 15 negara yang berada di Asia atau memperoleh kemerdekaan setelah 1901 atau memiliki luas wilayah lebih besar dari 652090.
Sekarang mari ubah kueri tersebut menjadi varian AND, yang lebih ketat:
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901 AND surface_area > 652090;
Dalam kasus ini, Anda akan mendapatkan total dua negara.
Anda juga dapat memasangkan subkueri dalam klausa WHERE. Misalnya Anda ingin mengambil rekaman negara yang memiliki luas wilayah terbesar, tetapi Anda tidak tahu berapa luas wilayah maksimum yang dimiliki suatu negara. Kueri berikut dapat membantu dalam situasi seperti ini:
SELECT * FROM countries WHERE surface_area in (SELECT MAX(surface_area) FROM countries);Anda akan mendapatkan rekaman Russia.

Kesimpulan
Selamat, Anda telah menyelesaikan tutorial ini. Menyaring hasil kueri berdasarkan kondisi jelas merupakan keterampilan penting, dan tutorial ini menjadi pengantar untuk itu. Jika Anda ingin mengasah keterampilan SQL lebih jauh, Anda dapat melihat kursus kami (tautan di bawah).

Sayak bekerja di Hugging Face, tempat ia menulis kode, menulis, dan berbicara. Sebagian besar waktunya dihabiskan untuk segala hal terkait pustaka Diffusers. Ia juga merupakan instruktur proyek DataCamp dan penulis banyak tutorial DataCamp. Di luar pekerjaan, Anda mungkin menemukannya menonton maraton Suits di Netflix untuk kesekian kalinya.
FAQ Klausul WHERE di SQL
Dapatkah saya menggunakan kolom teks dan numerik dalam klausa WHERE?
Ya, Anda dapat memfilter berdasarkan nilai teks (misalnya, 'Asia') dan numerik (misalnya, > 1901). Ingat bahwa nilai teks harus diapit tanda petik tunggal.
Apakah ada perbedaan antara <> dan != dalam SQL?
Keduanya berarti "tidak sama dengan", tetapi <> adalah operator standar SQL. Beberapa basis data juga mendukung !=, tetapi sebaiknya gunakan <> demi kompatibilitas.
Bagaimana cara memfilter rekaman dengan nilai NULL?
Gunakan IS NULL atau IS NOT NULL. Contohnya:
SELECT * FROM countries WHERE indep_year IS NULL;Bisakah saya menggunakan subkueri dalam klausa WHERE?
Ya, subkueri dapat digunakan untuk membandingkan kolom dengan hasil kueri lain. Contohnya:
SELECT * FROM countries WHERE surface_area = (SELECT MAX(surface_area) FROM countries);Apakah klausa WHERE berada sebelum atau sesudah klausa FROM?
Klausa WHERE selalu berada setelah klausa FROM dan sebelum klausa seperti GROUP BY atau ORDER BY.
Bisakah saya menggunakan WHERE dengan JOIN?
Tentu. Anda dapat menerapkan klausa WHERE setelah melakukan JOIN untuk memfilter hasil gabungan.
