Anda di halaman 1dari 18

SEJARAH SQL (Structured Query Language)

Sejarah SQL dimulai dari artikel seorang peneliti dari IBM


bernama EF Codd yang membahas tentang ide pembuatan
database relasional pada bulan Juni 1970. Artikel ini juga
membahas kemungkinan pembuatan bahasa standar untuk
mengakses data dalam database tersebut. Bahasa tersebut
kemudian diberi nama SEQUEL (Structured English Query
Language). Setelah terbitnya artikel tersebut, IBM
mengadakan proyek pembuatan database relasional berbasis
bahasa SEQUEL. Akan tetapi, karena permasalahan hukum
mengenai penamaan SEQUEL, IBM pun mengubahnya menjadi
SQL. Implementasi database relasional dikenal dengan
System/R. Di akhir tahun 1970-an, muncul perusahaan bernama
Oracle yang membuat server database populer yang bernama
sama dengan nama perusahaannya. Dengan naiknya
kepopuleran Oracle, maka SQL juga ikut populer sehingga saat
ini menjadi standar de facto bahasa dalam manajemen
database.
PENGERTIAN SQL

SQL adalah bahasa non-prosedural yang bertentangan dengan


bahasa prosedural ke tiga seperti COBOL dan C. Perbedaan bahasa
prosedural dengan non-prosedural adalah pada pandangannya,
pada bahasa prosedural pembuatan perintah program didasarkan
pada “how” yaitu bagaimana suatu hasil dapat diperoleh. Sedangkan
pada bahasa non–prosedural didasarkan pada “what” yaitu apa
yang akan ditampilkan. Karekfenistik dari RDBMS adalah bahasa
database yang didasarkan pada himpunan (set). Sehingga SQL dapat
diartikan sebagai proses himpunan data dalam kelompok-kelompok
tertentu.
Ada dua perusahaan terkenal, ANSI (The American National
Standards Institute) dan ISO (The International Standards
Organization), mempromosikan SQL standard untuk Industri.
Standard ANSI-92 merupakan standard SQL yang banyak dikenal
dan dikembangkan.
Query dibedakan menjadi 2
yaitu :
1. Untuk membuat/mendefinisikan obyek-obyek database seperti
membuat tabel, relasi dansebagainya. Biasanya disebut dengan
Data Definition Language (DDL)
2. Untuk memanipulasi data, yang biasanya dikenal dengan Data
Manipulation Language(DML). Manipulasi data bisa berupa:a.
Menambah, mengubah atau menghapus data.b. Pengambilan
informasi yang diperlukan dari database, yang mana datanya
diambil daritabel maupun dari query sebelumnya
Terdapat 3 (tiga) jenis perintah SQL, yaitu DDL, DML dan DCL.

1. DDL atau Data Definition Language


DDL merupakan perintah SQL yang berhubungan dengan pendefinisian suatu
struktur database, dalam hal ini database dan table. Perintah SQL yang termasuk
dalam DDL antara lain :
• CREATE
• ALTER
• RENAME
• DROP
2. DML atau Data Manipulation Language
DML merupakan perintah SQL yang berhubungan dengan manipulasi atau
pengolahan data atau record dalam table. Perintah SQL yang termasuk dalam DML
antara lain :
• SELECT
• INSERT
• UPDATE
• DELETE
3. DCL atau Data Control Language
DCL merupakan perintah SQL yang berhubungan dengan pengaturan hak akses
user, baik terhadap server, database, table maupun field. Perintah SQL yang termasuk
dalam DCL antara lain :
• GRANT
• REVOKE
Data Definition Language
DDL digunakan untuk mendefinisikan, mengubah, serta menghapus basis data dan
objek-objek yang diperlukan dalam basis data, misalnya tabel, view, user, dan
sebagainya. Secara umum, DDL yang digunakan adalah CREATE untuk membuat objek
baru, USE untuk menggunakan objek, ALTER untuk mengubah objek yang sudah ada,
dan DROP untuk menghapus objek. DDL biasanya digunakan oleh administrator basis
data dalam pembuatan sebuah aplikasi basis data.
Perintah yang digunakan adalah CREATE. CREATE digunakan untuk membuat basis
data maupun objek-objek basis data. Sebagai contoh :
nama_field adalah nama kolom (field) yang akan dibuat. Beberapa
sistem manajemen basis data mengizinkan penggunaan spasi dan
karakter nonhuruf pada nama kolom.
tipe_data tergantung implementasi sistem manajemen basis data.
Misalnya, pada MySQL, tipe data dapat berupa VARCHAR, TEXT,
BLOB, ENUM, dan sebagainya.
constraints adalah batasan-batasan yang diberikan untuk tiap kolom.
Ini juga tergantung implementasi sistem manajemen basis data,
misalnya NOT NULL, UNIQUE, dan sebagainya. Ini dapat digunakan
untuk mendefinisikan kunci primer (primary key) dan kunci asing
(foreign key).
Seperti apa bentuknya serta contohnya?

Perhatikan contoh-contoh kasus berikut ini.


Untuk studi kasus, lagi-lagi kita ambil sampel yang terkait
dengan nilai matkuliah mahasiswa, karena merupakan sampel
yang paling mudah dalam pemahamannya. Berikut ini adalah
struktur tabel yang digunakan beserta recordnya.
view sourceprint?
view sourceprint? 1.CREATE TABLE ambilmk (
1.CREATE TABLE mk ( 2.nim varchar(5),
3.kodeMK varchar(5),
2.kodeMK varchar(5), 4.nilai int(11),
3.namaMK varchar(20), 5.PRIMARY KEY(nim, kodeMK)
4.sks int(11), 6.);
5.PRIMARY KEY(kodeMK)
view sourceprint?
6.);
1.INSERT INTO ambilmk VALUES
view sourceprint? 2.('001', 'A01', 3),
1.INSERT INTO mk 3.('001', 'A02', 4),
VALUES 4.('001', 'A03', 2),
5.('002', 'A02', 3),
2.('A01', 'Kalkulus', 3),
6.('002', 'A03', 2),
3.('A02', 'Geometri', 2), 7.('003', 'A01', 4),
4.('A03', 'Aljabar', 3); 8.('003', 'A03', 3);
Nah selanjutnya misalkan ada pertanyaan-pertanyaan sebagai
berikut ini:
o Tampilkan nama mahasiswa dan nilai matakuliah yang memiliki
nilai tertinggi dalam matakuliah ‘A02′.
o Dalam perkuliahan dengan kode ‘A03′, siapakah mahasiswa
(nim dan nama) yang memiliki nilai di atas rata-rata nilai dari
semua mahasiswa yang mengambil matakuliah tersebut?
o Dari data mahasiswa yang terdaftar, siapa sajakah (nama)
mahasiswa yang tidak mengambil matakuliah ‘A01′?
o Hapuslah data mahasiswa (dari tabel mhs) yang memiliki IPK
terendah (kasus di DO).
o Tampilkan mahasiswa yang memiliki IPK di bawah 3.5.
OK akan kita jawab dulu pertanyaan No. 1.

Untuk pertanyaan ini, mungkin Anda mengira query atau


statement SQL nya berbentuk seperti ini:
view sourceprint?
1.SELECT mhs.namaMhs, ambilmk.nilai
2.FROM mhs, ambilmk
3.WHERE mhs.nim = ambilmk.nim AND ambilmk.kodeMK = 'A02'
AND
4.ambilmk.nilai = MAX(ambilmk.nilai);
Apabila query di atas dijalankan, maka akan terjadi error.
Padahal secara logika sudah benar kan? Ternyata salahnya karena
penggunaan aggregate function (dalam hal ini MAX) tidak boleh
diletakkan dalam WHERE. Lantas di mana? Aggregate function
hanya boleh diletakkan di bagian SELECT dan HAVING. Sehingga
query yang benar adalah sebagai berikut:
view sourceprint?
1.SELECT mhs.namaMhs, ambilmk.nilai
2.FROM mhs, ambilmk
3.WHERE mhs.nim = ambilmk.nim AND ambilmk.kodeMK = 'A02'
AND
4.ambilmk.nilai = (SELECT MAX(nilai)
5.FROM ambilmk
6.WHERE kodeMK = 'A02');
Perhatikan perintah di atas, terutama pada bagian SELECT
MAX(nilai) FROM ambilmk WHERE kodeMK = ‘A02′. Bagian ini
disebut dengan subquery. Perintah tersebut digunakan untuk
mencari nilai tertinggi untuk matakuliah ‘A02′. Hasil dari subquery
ini nantinya digunakan sebagai syarat untuk query yang berada di
level atasnya (parent query).
Selanjutnya kita bahas pertanyaan No. 2

Nah untuk pertanyaan ini, Anda mungkin juga mengira querynya


berbentuk seperti ini
view sourceprint?
1.SELECT mhs.nim, mhs.namaMhs
2.FROM mhs, ambilmk
3.WHERE mhs.nim = ambilmk.nim AND ambilmk.kodeMK = 'A03'
AND
4.ambilmk.nilai > AVG(ambilmk.nilai);
Apabila Anda jalankan, maka akan terjadi error.
Penyebabnya sama dengan error yang terjadi pada soal No. 1,
yaitu adanya aggregate function (dalam hal ini AVG()) dalam
WHERE.
Statement SQL yang benar adalah:
view sourceprint?
1.SELECT mhs.nim, mhs.namaMhs
2.FROM mhs, ambilmk
3.WHERE mhs.nim = ambilmk.nim AND ambilmk.kodeMK = 'A03'
AND
4.ambilmk.nilai > (SELECT AVG(nilai)
5.FROM ambilmk
6.WHERE kodeMK = 'A03');
Sudah mulai pahamkah Anda tentang subquery? Saya
harapkan Anda sudah mulai paham, meskipun sedikit demi sedikit
OK… kita lanjutkan ke pertanyaan No. 3.

Secara logika, untuk menjawab pertanyaan ini adalah kita buat 2 buah
query, yaitu query pertama untuk menampilkan semua mahasiswa yang
terdaftar di database dan query kedua untuk menampilkan mahasiswa
yang mengambil matakuliah ‘A01′. Selanjutnya hasil query pertama
dibandingkan dengan hasil query kedua. Dan sebagai outputnya atau
yang ditampilkan adalah mahasiswa yang ada di hasil query pertama
namun tidak ada di hasil query kedua. Nah… bagaimana untuk
mengimplementasikan logika ini di SQL? ini dia perintahnya
view sourceprint?
1.SELECT nim, namaMhs
2.FROM mhs
3.WHERE nim NOT IN
4.(SELECT nim FROM ambilmk WHERE kodeMK = 'A01');
Maksud dari klausa WHERE nim NOT IN (SELECT nim FROM
ambilmk WHERE kodeMK = ‘A01′) adalah bahwa syarat yang
ditampilkan adalah nim yang ada di tabel mhs namun tidak terdapat
(NOT IN) di hasil subquery SELECT nim FROM ambilmk WHERE kodeMK
= ‘A01′ (nim yang mengambil ‘A01′). Sederhana bukan?
Thanks for Watch

Anda mungkin juga menyukai