Pada pertengahan tahun sembilan puluhan, Sun Microsystems mengeluarkan bahasa yang dapat "ditulis sekali, [dan] dijalankan di mana saja." Bahasa itu, tentu saja, adalah Java. Dan, meskipun bahasa itu menjadi salah satu bahasa pemrograman paling populer hingga hari ini, slogan mereka ternyata sedikit optimis. Bahasa Java memiliki beberapa kemiripan yang kuat dengan SQL. Bahasa itu juga dapat dipindahkan dari satu database ke database lain, atau bahkan lintas sistem operasi, dengan sedikit atau tanpa modifikasi. Setidaknya, itulah impiannya. Di dunia nyata, kode tingkat produksi cenderung memerlukan beberapa penyesuaian agar dapat berfungsi di environment baru. Blog ini akan menguraikan beberapa alasan mengapa sintaksis SQL dapat berbeda di berbagai vendor database.
Spesifikasi ANSI SQL
ANSI, yang merupakan singkatan dari American National Standards Institute, mendefinisikan seperangkat aturan dan perintah sintaksis dasar yang akan digunakan untuk berinteraksi dengan database relasional. Namun, seperti halnya implementasi HTML, CSS, dan ECMAScript pada peramban, sebagian besar implementasi SQL pada database tidak sempurna dan/atau tidak lengkap. ANSI SQL memungkinkan fleksibilitas dalam tingkat kesesuaian, sehingga tidak ada persyaratan vendor yang ketat untuk mengimplementasikan spesifikasi lengkap. Namun, bahkan pada tingkat dasar dan terendah, semua vendor sedikit berbeda.
Di luar itu, ada ekstensi nonstandar, yang didukung oleh semua vendor dalam satu bentuk atau lainnya. Bahkan sesuatu yang sederhana seperti indeks pun tidak standar. Spesifikasi ANSI SQL tidak menyebutkan apa pun tentang indeks, sehingga implementasi pengindeksan setiap vendor merupakan pelengkap standar. Hal itu membuka pintu bagi vendor untuk membuat sintaksis apa pun yang mereka anggap sesuai atau paling menguntungkan bagi merek mereka. Hasilnya: berbagai dialek SQL, yang sebagian besar sama, tetapi dengan beberapa perbedaan.
Menulis SQL Serbaguna
Jika Anda menginginkan kode SQL yang dapat digunakan di semua jenis database, Anda harus menggunakan pernyataan SQL standar seperti SELECT, WHERE, GROUP BY, ORDER BY, dll. Fungsi agregat seperti SUM(), AVG(), MIN(), dan MAX() juga dapat dipahami oleh semua jenis database populer, termasuk SQL Server, MySQL, PostgreSQL, SQLite, dan Oracle. Berikut ini adalah kueri yang dapat digunakan di semua database:
Select c.customer_id, c.customer_name, SUM(p.amount) AS total_sales FROM customers AS c LEFT JOIN purchases AS p ON c.customers_id = p.customer_id WHERE c.customer_location = 'Canada' GROUP BY c.customer_name ASC;
Belajar SQL
Jika Anda baru saja memulai administrasi dan/atau pengembangan database, Anda harus berkonsentrasi pada SQL yang dapat diterapkan pada berbagai jenis database. Anda juga harus bekerja dengan database yang sangat sesuai dengan ANSI SQL dan populer, seperti MySQL. Database ini secara konsisten telah menjadi database paling populer selama beberapa dekade terakhir. Basis data ini juga sangat sesuai, sehingga menjadikannya alat pembelajaran yang sangat baik. Ada banyak artikel tentangnya dan sebagian besar contoh SQL dikembangkan dan dijalankan pada MySQL. Microsoft SQL Server berada di urutan kedua. Namun, database ini menggunakan dialek SQL Microsoft, yang disebut T-SQL. SQL Server yang sangat berbeda dengan platform lain membuat SQL Server menjadi database pemula yang kurang ideal. Anda mungkin lebih baik memilih PostgreSQL atau SQLite, yang juga cukup populer dan sesuai dengan ANSI. SQLite sangat menarik bagi pemula karena ukurannya yang kecil dan mudah dibawa.
Berikut ini beberapa perbedaan yang mungkin Anda temukan di antara database:
Kasus Sensitivitas
Pertimbangkan klausa WHERE name = 'Rob' Or WHERE name = 'rob'
;
MySQL | PostgreSQL | SQLite | SQL Server |
---|---|---|---|
Equivalent | Non Equivalent | Non Equivalent | Non Equivalent |
Menggunakan Tanda Kutip
Beberapa database hanya support kutip tunggal, sementara lainnya mengizinkan tanda kutip ganda:
MySQL | PostgreSQL | SQLite | SQL Server |
---|---|---|---|
Keduanya | Hanya Tunggal | Keduanya | Hanya Tunggal |
Kolom dan Tabel Alias
MySQL, PostgreSQL, dan SQLite semuanya menggunakan kata kunci "AS" untuk menunjukkan alias, yaitu, SELECT SUM(score) AS avg_score
, sementara SQL Server menggunakan tanda sama dengan, yaitu, SELECT SUM(score) = avg_score
.
Fungsi Tanggal/Waktu
Setiap database mengimplementasikan fungsi tanggal dan waktu miliknya sendiri:
MySQL | PostgreSQL | SQLite | SQL Server |
---|---|---|---|
CURDATE() CURTIME() EXTRACT() | CURRENT_DATE() CURRENT_TIME() EXTRACT() | DATE('now') strftime() | GETDATE() DATEPART() |
Navicat Premium: Alat Universal
Navicat Premium adalah alat pilihan untuk bekerja dengan berbagai jenis database. Tidak hanya dapat terhubung ke beberapa database secara bersamaan, tetapi fitur Cuplikan Kodenya membuat penulisan query terhadap jenis database pilihan Anda lebih mudah dari sebelumnya. Fitur Cuplikan Kode memungkinkan Anda memasukkan kode yang dapat digunakan kembali ke dalam pernyataan SQL Anda saat bekerja di Editor SQL. Selain mendapatkan akses ke kumpulan cuplikan bawaan untuk pernyataan dan fungsi alur kontrol umum, Anda juga dapat menentukan sendiri.
Anda dapat mengunduh Navicat 17 untuk 14-day fully functional FREE trial. Tersedia untuk sistem operasi Windows, macOS, dan Linux.