• Tidak ada hasil yang ditemukan

MENGGABUNGKAN TABEL DALAM BASIS DATA RELASIONAL

Dalam dokumen Structured Query Language SQL (Halaman 71-87)

Di Bab 1, saya memperkenalkan konsep database relasional, sebuah aplikasi yang mendukung data yang disimpan di beberapa, terkait tabel. Dalam model relasional, setiap tabel biasanya menyimpan data pada satu entitas seperti siswa, mobil, pembelian, rumah dan setiap baris dalam tabel menggambarkan salah satu entitas tersebut. Proses yang dikenal sebagai table join memungkinkan kita untuk menghubungkan baris dalam satu tabel ke baris di tabel lain.

Konsep database relasional berasal dari ilmuwan komputer Inggris Edgar F. Codd. Saat bekerja untuk IBM pada tahun 1970, ia menerbitkan sebuah makalah berjudul “A Relational Model of Data for Large Shared Data Banks.”

Ide-idenya merevolusi desain database dan mengarah pada pengembangan SQL. Dengan menggunakan model relasional, Anda dapat membuat tabel yang menghilangkan data duplikat, lebih mudah dirawat, dan memberikan peningkatan fleksibilitas dalam menulis kueri untuk mendapatkan data yang Anda inginkan saja.

Menautkan Tabel Menggunakan JOIN

Untuk menghubungkan tabel dalam kueri, kami menggunakan pernyataan JOIN ... ON (atau salah satu varian JOIN lainnya yang akan saya bahas dalam bab ini). Pernyataan JOIN menautkan satu tabel ke tabel lain dalam database selama kueri, menggunakan nilai yang cocok dalam kolom yang kami tentukan di kedua tabel. Sintaksnya mengambil bentuk ini:

SELECT *

FROM table_a JOIN table_b

ON table_a.key_column = table_b.foreign_key_column

Ini mirip dengan sintaks SELECT dasar yang telah Anda pelajari, tetapi alih-alih menamai satu tabel dalam klausa FROM, kami memberi nama tabel, memberikan kata kunci JOIN, dan kemudian memberi nama tabel kedua. Kata kunci ON mengikuti, di mana kita menentukan kolom yang ingin kita gunakan untuk mencocokkan nilai. Saat kueri berjalan, kueri memeriksa kedua tabel lalu mengembalikan kolom dari kedua tabel yang nilainya cocok dengan kolom yang ditentukan dalam klausa AKTIF.

Pencocokan berdasarkan kesetaraan antara nilai adalah penggunaan paling umum dari klausa ON, tetapi Anda dapat menggunakan ekspresi apa pun yang mengevaluasi hasil Boolean benar atau salah. Misalnya, Anda dapat mencocokkan di mana nilai dari satu kolom lebih besar dari atau sama dengan nilai di kolom lainnya:

ON table_a.key_column >= table_b.foreign_key_column

Itu jarang terjadi, tetapi ini merupakan opsi jika analisis Anda membutuhkannya.

Menghubungkan Tabel dengan Kolom Kunci

Pertimbangkan contoh tabel yang berhubungan dengan kolom kunci ini: bayangkan Anda adalah seorang analis data dengan tugas memeriksa pengeluaran penggajian badan publik berdasarkan departemen. Anda mengajukan permintaan Freedom of Information Act untuk data gaji agensi tersebut, mengharapkan untuk menerima spreadsheet sederhana yang mencantumkan setiap karyawan dan gaji mereka, diatur seperti ini:

dept location first_name last_name salary ---- --- --- --- --- Tax Atlanta Nancy Jones 62500 Tax Atalanta Lee Smith 59300 IT Boston Soo Nguyen 83000 IT Boston Janet King 95000

Tapi bukan itu yang datang. Sebagai gantinya, agensi mengirimi Anda dump data dari sistem penggajiannya: selusin file CSV, masing-masing mewakili satu tabel dalam databasenya. Anda membaca dokumen yang menjelaskan tata letak data (pastikan untuk selalu menanyakannya!) Dan mulailah memahami kolom di setiap tabel. Dua tabel menonjol: satu bernama karyawan dan satu lagi bernama departemen.

Menggunakan listing dibawah ini, mari buat versi tabel ini, sisipkan baris, dan periksa cara menggabungkan data di kedua tabel. Menggunakan database analisis yang telah Anda buat untuk latihan ini, jalankan semua kode, lalu lihat datanya baik dengan menggunakan pernyataan SELECT dasar atau mengklik nama tabel di pgAdmin dan memilih Lihat/Edit Data Semua Baris.

CREATE TABLE departements ( dept_id bigserial, dept varchar(100), city varchar(100),

CONTRAINT dept_key PRIMARY KEY (dept_id), CONTRAINT dept_city_unique UNIQUE (dept, city), );

CREATE TABLE employee ( emp_id bigserial, first_name varchar(100), last_name varchar(100), salary integer,

dept_id integer REFERENCES departements (dept_id), CONSTRAINT emp_key PRIMARY KEY (emp_id),

CONSTRAINT emp_dept_unique UNIQUE (emp_id, dept_id), );

INSERT INTO departements (dept, city), VALUES

(‘Tax’, ‘Atlanta’), (‘IT’, ‘Boston’);

INSERT INTO employees (first_name, last_name, salary, dept_id) VALUES

(‘Nancy’, ‘Jones’, 62500, 1), (‘Lee’, ‘Smith’, 59300, 1), (‘Soo’, ‘Nguyen’, 83000, 2), (‘Janet’, ‘King’, 95000, 2);

Kedua tabel mengikuti model relasional Codd di mana masing-masing menggambarkan atribut tentang satu entitas, dalam hal ini departemen dan karyawan agensi. Di tabel departemen, Anda akan melihat konten berikut:

dept_id dept city --- ---- ---

1 Tax Atlanta 2 IT Boston

Kolom dept_id adalah kunci utama tabel. Kunci utama adalah kolom atau kumpulan kolom yang nilainya secara unik mengidentifikasi setiap baris dalam sebuah tabel. Kolom kunci utama yang valid memberlakukan batasan tertentu:

• Kolom atau kumpulan kolom harus memiliki nilai unik untuk setiap baris.

• Kolom atau kumpulan kolom tidak boleh memiliki nilai yang hilang.

Anda mendefinisikan kunci utama untuk departemen dan karyawan menggunakan kata kunci CONSTRAINT, yang akan saya bahas secara mendalam dengan jenis batasan tambahan di Bab 7. Kolom dept_id secara unik mengidentifikasi departemen, dan meskipun contoh ini hanya berisi nama departemen dan kota, tabel seperti itu kemungkinan akan menyertakan informasi tambahan, seperti alamat atau informasi kontak. Tabel karyawan harus memiliki konten berikut:

emp_id first_name last_name salary dept_id --- --- --- --- ---

1 Nancy Jones 62500 1

2 Lee Smith 59300 1

3 Soo Nguyen 83000 2

4 Janet King 95000 2

Kolom emp_id secara unik mengidentifikasi setiap baris dalam tabel karyawan.

Agar Anda mengetahui di departemen mana setiap karyawan bekerja, tabel menyertakan kolom dept_id. Nilai di kolom ini mengacu pada nilai di kunci utama tabel departemen. Kami menyebutnya kunci asing, yang Anda tambahkan sebagai batasan saat membuat tabel.

Batasan kunci asing memerlukan nilai yang dimasukkan dalam kolom agar sudah ada di kunci utama tabel yang dirujuknya. Jadi, nilai di dept_id di tabel karyawan harus ada di dept_id di tabel departemen; jika tidak, Anda tidak dapat menambahkannya. Tidak seperti kunci utama, kolom kunci asing bisa kosong, dan bisa berisi nilai duplikat.

Dalam contoh ini, dept_id yang terkait dengan karyawan Nancy Jones adalah 1; ini mengacu pada nilai 1 di kunci utama tabel departemen, dept_id. Itu memberitahu kita bahwa Nancy Jones adalah bagian dari departemen Pajak yang berlokasi di Atlanta.

Catatan Nilai kunci utama hanya perlu unik di dalam tabel. Itulah mengapa tabel karyawan dan tabel departemen boleh saja memiliki nilai kunci utama menggunakan angka yang sama.

Kedua tabel tersebut juga menyertakan sebuah UNIQUE constraint, yang juga akan saya bahas secara lebih mendalam di “The UNIQUE Constraint” pada halaman 105. Secara singkat, ini menjamin bahwa nilai dalam kolom, atau kombinasi nilai dalam lebih banyak dari satu kolom, adalah unik. Di departemen, itu mengharuskan setiap baris memiliki pasangan nilai unik untuk

dept dan kota . Pada karyawan, setiap baris harus memiliki pasangan unik emp_id dan dept_id.

Anda menambahkan batasan ini untuk menghindari duplikat data. Misalnya, Anda tidak dapat memiliki dua departemen pajak di Atlanta.

Anda mungkin bertanya: apa keuntungan memecah data menjadi komponen-komponen seperti ini? Nah, pertimbangkan seperti apa contoh data ini jika Anda menerimanya seperti yang Anda pikirkan pada awalnya, semuanya dalam satu tabel:

dept location first_name last_name salary ---- --- --- --- --- Tax Atlanta Nancy Jones 62500 Tax Atlanta Lee Smith 59300

IT Boston Soo Nguyen 83000

IT Boston Janet King 95000

Pertama, ketika Anda menggabungkan data dari berbagai entitas dalam satu tabel, mau tidak mau Anda harus mengulang informasi. Ini terjadi di sini: nama departemen dan lokasi dijabarkan untuk setiap karyawan. Ini bagus ketika tabel terdiri dari empat baris seperti ini, atau bahkan 4.000. Tetapi ketika sebuah tabel menampung jutaan baris, pengulangan string yang panjang adalah mubazir dan membuang-buang ruang yang berharga.

Kedua, menjejalkan data yang tidak terkait ke dalam satu tabel membuat pengelolaan data menjadi sulit. Bagaimana jika departemen Marketing berganti nama menjadi Brand Marketing? Setiap baris dalam tabel akan membutuhkan pembaruan. Lebih mudah untuk menyimpan nama dan lokasi departemen hanya dalam satu tabel dan memperbaruinya hanya sekali.

Sekarang setelah Anda mengetahui dasar-dasar bagaimana tabel dapat berhubungan, mari kita lihat cara menggabungkannya dalam kueri.

Membuat Kueri Beberapa Tabel Menggunakan JOIN

Saat Anda menggabungkan tabel dalam kueri, database menghubungkan baris di kedua tabel di mana kolom yang Anda tentukan untuk bergabung memiliki nilai yang cocok. Hasil kueri kemudian menyertakan kolom dari kedua tabel jika Anda memintanya sebagai bagian dari kueri. Anda juga dapat menggunakan kolom dari tabel gabungan untuk memfilter hasil menggunakan klausa WHERE.

Query yang menggabungkan tabel memiliki sintaks yang mirip dengan pernyataan SELECT dasar.

Perbedaannya adalah bahwa kueri juga menentukan hal berikut:

• Tabel dan kolom untuk digabungkan, menggunakan pernyataan SQL JOIN ... ON

• Jenis join yang akan dilakukan menggunakan variasi kata kunci JOIN

Mari kita lihat sintaks JOIN ... ON secara keseluruhan terlebih dahulu lalu jelajahi berbagai jenis join. Untuk bergabung dengan contoh tabel karyawan dan departemen dan melihat semua data terkait dari keduanya, mulailah dengan menulis kueri seperti yang ada di listing dibawah ini:

SELECT * FROM employees

JOIN departements ON employees.dept_id;

Dalam contoh, Anda menyertakan wildcard asterisk dengan pernyataan SELECT untuk memilih semua kolom dari kedua tabel . Selanjutnya, kata kunci JOIN berada di antara dua tabel yang Anda inginkan datanya. Terakhir, Anda menentukan kolom untuk bergabung dengan tabel menggunakan kata kunci ON . Untuk setiap tabel, Anda memberikan nama tabel, titik, dan kolom yang berisi nilai kunci. Tanda sama dengan di antara dua nama tabel dan kolom.

Saat Anda menjalankan kueri, hasilnya menyertakan semua nilai dari kedua tabel di mana nilai di kolom dept_id cocok. Bahkan, bidang dept_id muncul dua kali karena Anda memilih semua kolom dari kedua tabel:

emp_id first_name last_name salary dept_id dept city --- --- --- --- --- ---- ---

1 Nancy Jones 62500 1 Tax Atlanta

2 Lee Smith 59300 1 Tax Atlanta

3 Soo Nguyen 83000 2 IT Boston

4 Janet King 95000 2 IT Boston

Jadi, meskipun data berada dalam dua tabel, masing-masing dengan kumpulan kolom yang terfokus, Anda dapat membuat kueri tabel tersebut untuk menarik kembali data yang relevan.

Dalam “Memilih Kolom Tertentu dalam Gabung” di halaman 85, saya akan menunjukkan kepada Anda cara mengambil hanya kolom yang Anda inginkan dari kedua tabel.

Jenis JOIN

Ada lebih dari satu cara untuk menggabungkan tabel di SQL, dan jenis gabungan yang akan Anda gunakan bergantung pada cara Anda ingin mengambil data. Daftar berikut menjelaskan berbagai jenis gabungan. Saat meninjau masing-masing, ada baiknya untuk memikirkan dua tabel berdampingan, satu di sebelah kiri kata kunci JOIN dan yang lainnya di sebelah kanan.

Contoh berdasarkan data dari setiap gabungan mengikuti daftar:

• JOIN Mengembalikan baris dari kedua tabel di mana nilai yang cocok ditemukan di kolom gabungan dari kedua tabel. Sintaks alternatifnya adalah INNER JOIN.

• LEFT JOIN Mengembalikan setiap baris dari tabel kiri ditambah baris yang cocok dengan nilai dalam kolom gabungan dari tabel kanan. Ketika baris tabel kiri tidak memiliki kecocokan di tabel kanan, hasilnya tidak menunjukkan nilai dari tabel kanan.

• RIGHT JOIN Mengembalikan setiap baris dari tabel kanan ditambah baris yang cocok dengan nilai kunci pada kolom kunci dari tabel kiri. Ketika baris tabel kanan tidak memiliki kecocokan di tabel kiri, hasilnya tidak menunjukkan nilai dari tabel kiri.

• FULL OUTER JOIN Mengembalikan setiap baris dari kedua tabel dan mencocokkan baris;

kemudian bergabung dengan baris di mana nilai dalam kolom yang digabungkan cocok. Jika tidak ada nilai yang cocok di tabel kiri atau kanan, hasil kueri berisi baris kosong untuk tabel lainnya.

• CROSS JOIN Mengembalikan setiap kemungkinan kombinasi baris dari kedua tabel.

Jenis gabungan ini paling baik diilustrasikan dengan data. Katakanlah Anda memiliki dua tabel sederhana yang memuat nama sekolah. Untuk memvisualisasikan tipe gabungan dengan lebih baik, sebut saja tabel school_left danschool_right. Ada empat baris di school_left:

id left_school

-- --- 1 Oak Street School 2 Roosevelt High School 5 Washington Middle School 6 Jefferson High School

Ada lima baris di school_right:

id right_school

-- --- 1 Oak Street School 2 Roosevelt High School 3 Morrison Elementary 4 Chase Magnet Academy 6 Jefferson High School

Perhatikan bahwa hanya sekolah dengan id 1, 2, dan 6 yang cocok di kedua tabel. Bekerja dengan dua tabel data serupa adalah skenario umum untuk analis data, dan tugas umum adalah mengidentifikasi sekolah mana yang ada di kedua tabel. Menggunakan gabungan yang berbeda dapat membantu Anda menemukan sekolah tersebut, ditambah detail lainnya.

Sekali lagi menggunakan database analisis Anda, jalankan kode di dibawah ini untuk mengisi dua tabel ini:

CREATE TABLE schools_left (

id integer CONSTRAINT left_id_key PRIMARY KEY, left_school varchar(30)

);

CREATE TABLE schools_right (

id integer CONSTRAINT right_id_key PRIMARY KEY, right_school varchar(30)

);

INSERT INTO schools_left (id, left_schools) VALUES (1, ‘Oak Street School’),

(2, ‘Roosevelt High School’), (5, ‘Washington Middle School’), (6, ‘Jefferson High School’);

INSERT INTO schools_right (id, right_schools) VALUES (1, ‘Oak Street School’),

(2, ‘Roosevelt High School’), (3, ‘Morrison Elementary’), (4, ‘Chase Magnet Academy), (6, ‘Jefferson High School’);

Kami membuat dan mengisi dua tabel: deklarasi untuk ini seharusnya sudah terlihat familier, tetapi ada satu elemen baru: kami menambahkan kunci utama ke setiap tabel. Setelah deklarasi untuk kolom id sekolah_kiri dan kolom id sekolah_kanan, kata kunci CONSTRAINT key_name PRIMARY KEY menunjukkan bahwa kolom tersebut akan berfungsi sebagai kunci utama untuk tabel mereka.

Artinya untuk setiap baris di kedua tabel, kolom id harus diisi dan berisi nilai yang unik untuk setiap baris dalam tabel tersebut. Akhirnya, kami menggunakan pernyataan INSERT yang sudah dikenal untuk menambahkan data ke tabel.

JOIN

Kami menggunakan JOIN, atau INNER JOIN, ketika kami ingin mengembalikan baris yang cocok dengan kolom yang kami gunakan untuk bergabung. Untuk melihat contohnya, jalankan kode ini, yang menggabungkan dua tabel yang baru saja Anda buat:

SELECT *

FROM schools_left JOIN schools_right ON schools_left.id = schools_right.id;

Mirip dengan metode yang kami gunakan di list diatas, kami menentukan dua tabel untuk digabungkan di sekitar kata kunci JOIN. Kemudian kita tentukan kolom mana yang akan kita gabung, dalam hal ini kolom id dari kedua tabel. Tiga ID sekolah cocok di kedua tabel, jadi JOIN hanya mengembalikan tiga baris ID yang cocok. Sekolah yang hanya ada di salah satu dari dua tabel tidak muncul di hasil. Perhatikan juga bahwa kolom dari tabel kiri ditampilkan di sebelah kiri tabel hasil:

id left_school id right_school

-- --- -- --- 1 Oak Street School 1 Oak Street School 2 Roosevelt High School 2 Roosevelt High School 6 Jefferson High School 6 Jefferson High School

Kapan sebaiknya Anda menggunakan JOIN? Biasanya, saat Anda bekerja dengan kumpulan data yang terstruktur dengan baik, terpelihara dengan baik, dan hanya perlu menemukan baris yang ada di semua tabel yang Anda ikuti. Karena GABUNG tidak menyediakan baris yang hanya ada di salah satu tabel, jika Anda ingin melihat semua data dalam satu atau beberapa tabel, gunakan salah satu tipe gabungan lainnya.

LEFT JOIN dan RIGHT JOIN

Berbeda dengan JOIN, kata kunci LEFT JOIN dan RIGHT JOIN masing-masing mengembalikan semua baris dari satu tabel dan menampilkan baris kosong dari tabel lainnya jika tidak ditemukan nilai yang cocok pada kolom yang digabungkan. Mari kita lihat aksi LEFT JOIN terlebih dahulu. Jalankan kode ini:

SELECT *

FROM schools_left LEFT JOIN schools_right ON schools_left.id = schools_right.id;

Hasil kueri menunjukkan keempat baris dari school_left serta tiga baris di school_right tempat bidang id cocok. Karena school_right tidak berisi nilai 5 di kolom right_id-nya, tidak ada kecocokan, jadi LEFT JOIN menampilkan baris kosong di sebelah kanan daripada menghilangkan seluruh baris dari tabel kiri seperti pada JOIN. Baris dari school_right yang tidak cocok dengan nilai apa pun di school_left dihilangkan dari hasil:

id left_schools id right_schools -- --- -- --- 1 Oak Street School 1 Oak Street School 2 Roosevelt High School 2 Roosevelt High School

5 Washington Middle School

6 Jefferson High School 6 Jefferson High School

Kami melihat perilaku serupa tetapi berlawanan dengan menjalankan RIGHT JOIN, seperti pada listing dibawah ini:

SELECT *

FROM schools_left RIGHT JOIN schools_right ON schools_left.id = schools_right.id;

Kali ini, kueri mengembalikan semua baris dari sekolah_kanan ditambah baris dari sekolah_kiri di mana kolom id memiliki nilai yang cocok, tetapi kueri tidak mengembalikan baris sekolah_kiri yang tidak cocok dengan sekolah_kanan:

id left_schools id right_schools -- --- -- --- 1 Oak Street School 1 Oak Street School 2 Roosevelt High School 2 Roosevelt High School

3 Morrison Elementary 4 Chase Magnet Academy 6 Jefferson High School 6 Jefferson High School

Anda akan menggunakan salah satu dari jenis gabungan ini dalam beberapa keadaan:

• Anda ingin hasil kueri Anda berisi semua baris dari salah satu tabel.

• Anda ingin mencari nilai yang hilang di salah satu tabel; misalnya, saat Anda membandingkan data tentang entitas yang mewakili dua periode waktu yang berbeda.

• Saat Anda mengetahui beberapa baris dalam tabel yang digabungkan tidak akan memiliki nilai yang cocok.

FULL OUTER JOIN

Saat Anda ingin melihat semua baris dari kedua tabel dalam gabungan, terlepas dari apakah ada kecocokan, gunakan opsi FULL OUTER JOIN. Untuk melihatnya beraksi.

SELECT *

FROM schools_left FULL OUTER JOIN schools_right ON schools_left.id = schools_right.id

Hasilnya memberikan setiap baris dari tabel kiri, termasuk baris yang cocok dan kosong untuk baris yang hilang dari tabel kanan, diikuti oleh baris yang hilang dari tabel kanan:

id left_schools id right_schools -- --- -- --- 1 Oak Street School 1 Oak Street School 2 Roosevelt High School 2 Roosevelt High School 5 Washington Middle School

6 Jefferson High School 6 Jefferson High School 4 Chase Magnet Academy 3 Morrison Elementary

Gabungan luar penuh diakui kurang berguna dan lebih jarang digunakan daripada gabungan dalam dan kiri atau kanan. Namun, Anda dapat menggunakannya untuk beberapa tugas: untuk menggabungkan dua sumber data yang sebagian tumpang tindih atau untuk memvisualisasikan sejauh mana tabel berbagi nilai yang cocok.

CROSS JOIN

Dalam kueri CROSS JOIN, hasilnya (juga dikenal sebagai produk Cartesian) mengurutkan setiap baris di tabel kiri dengan setiap baris di tabel kanan untuk menampilkan semua kemungkinan kombinasi baris. Daftar 6-8 menunjukkan sintaks CROSS JOIN; karena join tidak perlu mencari kecocokan antar field kunci, tidak perlu memberikan klausa menggunakan kata kunci ON.

SELECT *

FROM schools_left CROSS JOIN schools_right;

Hasilnya memiliki 20 baris — produk dari empat baris di tabel kiri dikalikan lima baris di kanan:

id left_schools id right_schools -- --- -- --- 1 Oak Street School 1 Oak Street School 1 Oak Street School 2 Roosevelt High School 1 Oak Street School 3 Morrison Elementary 1 Oak Street School 4 Chase Magnet Academy 1 Oak Street School 6 Jefferson High School 2 Roosevelt High School 1 Oak Street School 2 Roosevelt High School 2 Roosevelt High School 2 Roosevelt High School 3 Morrison Elementary 2 Roosevelt High School 4 Chase Magnet Academy 2 Roosevelt High School 6 Jefferson High School 5 Washington Middle School 1 Oak Street School 5 Washington Middle School 2 Roosevelt High School 5 Washington Middle School 3 Morrison Elementary 5 Washington Middle School 4 Chase Magnet Academy 5 Washington Middle School 6 Jefferson High School 6 Jefferson High School 1 Oak Street School 6 Jefferson High School 2 Roosevelt High School 6 Jefferson High School 3 Morrison Elementary 6 Jefferson High School 4 Chase Magnet Academy 6 Jefferson High School 6 Jefferson High School

Kecuali jika Anda ingin rehat kopi ekstra lama, saya sarankan untuk menghindari kueri CROSS JOIN di tabel besar. Dua tabel dengan 250.000 catatan masing-masing akan menghasilkan kumpulan hasil 62,5 miliar baris dan membebani server yang paling keras sekalipun.

Penggunaan yang lebih praktis akan menghasilkan data untuk membuat daftar periksa, seperti semua warna yang ingin Anda tawarkan untuk setiap gaya kemeja di gudang.

Menggunakan NULL untuk Menemukan Baris dengan Nilai yang Hilang

Mampu mengungkapkan data yang hilang dari salah satu tabel sangat berharga saat Anda menggali data. Setiap kali Anda bergabung dengan tabel, sebaiknya periksa kualitas data dan pahami lebih baik dengan menemukan apakah semua nilai kunci dalam satu tabel muncul di tabel lain. Ada banyak alasan mengapa perbedaan mungkin ada, seperti kesalahan klerikal, output yang tidak lengkap dari database, atau beberapa perubahan data dari waktu ke waktu.

Semua informasi ini adalah konteks penting untuk membuat kesimpulan yang benar tentang data.

Bila Anda hanya memiliki beberapa baris, mengamati data adalah cara mudah untuk mencari baris dengan data yang hilang. Untuk tabel besar, Anda memerlukan strategi yang lebih baik:

pemfilteran untuk menampilkan semua baris tanpa kecocokan. Untuk melakukan ini, kami menggunakan kata kunci NULL.

Dalam dokumen Structured Query Language SQL (Halaman 71-87)