A. MODUL 1
1. Perbedaan Data definition language dengan Data manipulation language adalah sebagai
berikut :
a. Data definition language adalah kumpulan perintah SQL yang berkaitan dengan
pembuatan, perubahan, dan penghapusan database maupun objek-objek yang terdapat
di dalam database, seperti tabel, indeks, prosedur/fungsi, trigger dan sebagainya.
Perintah SQL yang termasuk dalam DDL :
- CREATE, berfungsi untuk membuat database dan objek-objek di dalam database
- ALTER,berfungsi untuk mengubah database dan objek-objek di dalam database
- DROP, berfungsi untuk menghapus database dan objek-objek di dalam database
b. Data manipulation language adalah kumpulan perintah SQL yang berkaitan dengan
manipulasi data atau isi dari suatu tabel. Dengan perintah-perintah di dalam UML. Kita
dapat memanipulasi (menambah, mengubah, dan manghapus} data yang terdapat pada
suatu tabel secara mudah.
Perintah SQL yang termasuk kategori DML :
- INSERT, berfungsi untuk menambah atau memasukkan data baru ke dalam tabel.
- UPDATE, berfungsi untuk mengubah data dalam tabel dengan nilai baru.
- DELETE, berfungsi untuk menghapus data dari suatu tabel
2. Tipe Data
Jenis-Jenis Tipe Data yang digunakan dalam SQL adalah :
1. DATETIME, tanggal dan waktu dengan jangkauan nilai dari 1 Januari 1753 sampai
31 Desember 9999 dan memiliki presisi 3.33 milidetik.
2. SMALLDATETIME, tanggal dan waktu dengan jangkauan nilai dari 1 Januari 1900
sampai 6 Juni 2079 dan memiliki presisi 1 menit.
1. BINARY (n), data biner yang panjangnya bersifat tetap terhadap kapasitas
penyimpanan yang didefinisikan oleh n dan membutuhkan tempat penyimpanan
sebesar n byte. Nilai n memiliki jangkauan dari 1 sampai 8,000.
2. VARBINARY (n atau max), data biner yang panjangnya bersifat variabel terhadap
kapasitas penyimpanan yang didefinisikan oleh n dan membutuhkan tempat
penyimpanan sebesar [jumlah data yang disimpan + 2] byte. Nilai n memiliki
jangkauan dari 1 sampai 8,000 dan max bernilai 231 – 1 byte.
3. IMAGE, data biner yang panjangnya bersifat variabel dengan jumlah data
maksimum sebesar 231 - 1 (2,147,483,647) dan membutuhkan tempat
penyimpanan sebesar [jumlah karakter yang disimpan] byte.
1. TIMESTAMP, angka biner yang unik, yang secara otomatis dihasilkan ketika terjadi
perubahaan dalam suatu row pada suatu tabel dan membutuhkan tempat
penyimpanam sebesar 8 byte.
2. UNIQUEIDENTIFIER, data globally unique indentifier (GUID) yang membutuhkan
tempat penyimpanan sebesar 16 byte. Contoh: 6F9619FF-8B86-D011-B42D-
00C04FC964FF.
B. MODUL 2
C. MODUL 3
D. MODUL 4
1. Equijoins
Dikenal juga sebagai Inner Join atau Simple Join. Tipe join ini digunakan bila ingin
menampilkan isi dari kolom tertentu pada suatu tabel dan menggabungkanya dengan kolom
tertentu pada tabel lainnya yang ditampilkan menurut kesamaan isi dari kolom yang sama-
sama dimiliki oleh kedua tabel tersebut yaitu Primary Key dan Foreign Key. Operator yang
digunakan adalah INNER JOIN dengan syntax query sebagai berikut.
SELECT <column_name>
FROM <main_table>
INNER JOIN <joined_table>
ON <connecting_column> = <connecting_column>;
Contoh:
Diketahui bahwa terdapat tabel Pegawai dan Dept dengan spesifikasi dan konten sebagai
berikut.
Kita ingin menampilkan identitas antara lain: IDPeg, Nama, dan NamaDept. Kedua tabel
dihubungkan dengan Foreign Key pada tabel Pegawai, yakni IDDept yang dapat
dihubungkan dengan Primary Key pada tabel Dept, yakni IDDept. Dengan demikian, SQL
statement yang bisa kita gunakan adalah sebagai berikut.
SYNTAX KETERANGAN
SELECT Menampilkan kolom IDPeg, Nama yang berasal
Pegawai.IDPeg, dari tabel Pegawai
Pegawai.Nama, Serta kolom NamaDept yang berasal dari tabel
Dept.NamaDept Dept
FROM Dept INNER Kesemua kolom tersebut berasal dari tabel Dept yang
JOIN Pegawai dihubungkan dengan tabel Pegawai.
Dari statement diatas terlihat bahwa kita ingin menampilkan IDPeg dan Nama (SELECT
Pegawai.IDPeg, Pegawai.Nama) dari table Pegawai. Sementara itu, NamaDept
didapatkan dari tabel Dept, sehingga untuk menampilkan juga NamaDept, ditambahkan
sintaks SELECT Dept.NamaDept.
Hal yang menyatukan keduanya adalah IDDept yang dimiliki tabel Pegawai maupun
tabel Dept. Karena itu, untuk menampilkan Nama yang sesuai, maka nilai IDDept pada
tabel Pegawai harus sama dengan nilai pada tabel Dept. Dalam statement query diatas
hal ini diterjemahakan pada bagian ON Pegawai.IDDept=Dept.IDDept.
Catatan: Kedua tabel tetap dapat dihubungkan meskipun nama kolom yang berhubungan
berbeda (dalam contoh nama kolom sama, yaitu IDDept). Hal yang paling
utama adalah kedua kolom yang berhubungan harus terhubung dengan
pendefinisian primary key dan foreign key terlebih dahulu.
2. Outer joins
Fungsi join condition yang digunakan untuk melihat semua baris yang terdapat pada tabel
utama yang dihubungkan dengan tabel lainnya. Berbeda dari fungsi inner join, fungsi outer
join ini juga menampilkan baris yang tidak memenuhi syarat join yang berikan. Outer join
dinyatakan dengan operator OUTER JOIN.
Pada Microsoft SQL 2005, terdapat dua jenis statement Outer join, yaitu Right Outer Join dan
Left Outer Join. Perbedaannya adalah kolom yang menjadi acuan untuk tampilan eksekusi.
Jika menggunakan Right Outer Join, maka yang dijadikan acuan adalah tabel yang
statemennya berada di sebelah kanan statement Right Outer Join tersebut. Sebaliknya, jika
menggunakan Left Outer Join, maka kolom yang dijadikan acuan adalah tabel yang
statemennya berada di sebelah kiri statement Left Outer Join.
SELECT <column_name>
FROM <main_table>
RIGHT OUTER JOIN <joined_table>
ON <connecting_column> = <connecting_column>;
SELECT <column_name>
FROM <main_table>
LEFT OUTER JOIN <joined_table>
ON <connecting_column> = <connecting_column>;
Contoh:
Penggunaan RIGHT OUTER JOIN.
SYNTAX KETERANGAN
SELECT Menampilkan kolom IDPeg, Nama yang berasal dari
Pegawai.IDPeg, tabel Pegawai
Pegawai.Nama, Serta kolom NamaDept yang berasal dari tabel Dept
Dept.NamaDept
FROM Dept RIGHT Kesemua kolom tersebut berasal dari tabel Dept yang
OUTER JOIN dihubungkan dengan tabel Pegawai dengan fungsi
Pegawai RIGHT OUTER JOIN.
SYNTAX KETERANGAN
SELECT Menampilkan kolom IDPeg, Nama yang berasal
Pegawai.IDPeg, dari tabel Pegawai
Pegawai.Nama, Serta kolom NamaDept yang berasal dari tabel
Dept.NamaDept Dept
FROM Dept LEFT Kesemua kolom tersebut berasal dari tabel Dept yang
OUTER JOIN dihubungkan dengan tabel Pegawai dengan fungsi
Pegawai LEFT OUTER JOIN.
Pada Right Join, seluruh data dari tabel Pegawai ditampilkan baik yang memiliki Nama
Dept ataupun tidak. Sedangkan, pada Left Join berlaku sebaliknya, data seluruh
Departemen ditampilkan baik yang memiliki anggota Pegawai ataupun tidak. Pada contoh
Left Join diatas, Nama Departemen tercetak dua data atau lebih. Hal ini tidak menjadi
masalah meskipun pada tabel Dept hanya terdapat satu data Dept tersebut.
3. Self Joins
Pada pengelolaan basis data, terkadang kita ingin memberikan kolom tambahan yang
sebenarnya kolom tersebut sama dengan salah satu kolom dalam tabel tersebut. Disaat
seperti inilah fungsi self join digunakan. Dengan fungsi self join, kita dapat menghubungkan
tabel dengan tabel itu sendiri. Operator yang digunakan untuk memanggil fungsi self join ini
sebenarnya adalah INNER JOIN. Hanya saja yang dihubungkan adalah tabel yang sama.
Adapun syntax query yang digunakan untuk memanggil fungsi tersebut adalah sebagai
berikut.
SELECT <column_name>
FROM <main_table> AS A
INNER JOIN <main_table> AS B
ON A.<joined_column>= A.<joined_column>;
Contoh:
Pada tabel Pegawai yang telah dibuat sebelumnya, kita ingin menampilkan kolom IDPeg,
Nama, dan NamaAtasan. Untuk membuat nama atasan tersebut, sebelumnya kita perlu
menggabungkan kolom IDAtasan pada tabel Pegawai yang datanya berasal dari kolom
IDPeg yang juga berasal dari tabel Pegawai.
SYNTAX KETERANGAN
SELECT Menampilkan kolom IDPeg, Nama yang berasal dari
P.IDPeg, tabel Pegawai
P.Nama, A.Nama Serta kolom lain yang juga menampilkan kolom Nama dari
AS NamaAtasan
tabel Pegawai namun berdasarkan isi kolom IDAtasan
yang terhubung dengan kolom IDPeg. Dan kolom tersebut
diberi inisial NamaAtasan.
FROM Pegawai Kesemua kolom tersebut berasal dari tabel Pegawai yang
AS P INNER diberi initial P dan dihubungkan dengan tabel yang sama, yaitu
JOIN Pegawai tabel Pegawai yang diberi initial berbeda, yaitu A.
AS A
ON P.IDAtasan Menghubungkan kolom IDAtasan yang berasal dari tabel P
= A.IDPeg (Tabel Pegawai sebenarnya) yang nilainya sama
dengan/berasal dari kolom IDPeg pada tabel A (Tabel
Pegawai virtual)
E. MODUL 5
Subquery ini digunakan jika user ingin meng-copy isi suatu tabel yang telah dibuat
sebelumnya. Tabel baru ini selanjutnya dapat diubah sesuai dengan keinginan user tanpa
mengubah tabel awalnya.
Contoh penggunaan:
Untuk melakukan duplikasi tabel, dilakukan pembuatan tabel tersebut dengan isi kolom dan
tipe data yang sama seperti tabel yang akan di copy. Sebagai contoh, dilakukan pembuatan
tabel Pegawai2 sebagai berikut.
Fungsi Tabel Sebagai tabel yang data-datanya (record-nya) akan dipaste dari tabel
Baru lain yang memiliki tipe data dan kolom yang sama.
Dengan tabel tersebut, kemudian dilakukan INSERT tabel dari tabel Pegawai. Berikut ini syntax
subquery with the INSERT statement tersebut.
Fungsi Untuk mengcopy isi dari tabel Pegawai dan me-paste-nya pada tabel
Syntax Pegawai2 yang telah dibuat templatanya.
2. Scalar subqueries
Subquery ini digunakan untuk melakukan statement query (SELECT, INSERT, UPDATE, atau
DELETE) untuk record-record yang memiliki kesamaan nilai dengan kriteria yang diberikan.
Untuk memahami lebih jelas penggunaan query ini, dapat melihat contoh berikut:
SELECT Nama
FROM Pegawai
WHERE IDDept =
(
SELECT IDDept
FROM Pegawai
WHERE Nama=’Angie’
);
Fungsi Syntax di atas digunakan untuk menampilkan seluruh Nama Pegawai yang
Syntax memiliki IDDept yang sama dengan IDDept pegawai yang bernama ‘Angie’.
SYNTAX KETERANGAN
SELECT Nama Menampilkan kolom Nama yang berasal dari tabel
FROM Pegawai Pegawai yang memiliki IDDept memenuhi kriteria.
WHERE IDDept =
(SELECT IDDept Menampilkan kolom IDDept yang berasal dari tabel
FROM Pegawai Pegawai yang isi dari kolom Nama-nya adalah ‘Angie’.
WHERE Nama=
’Angie’);
Syntax diatas akan menghasilkan tampilan yang sama seperti pada penggunaan JOIN dibawah ini.
SELECT X.Nama
FROM Pegawai AS X
JOIN Pegawai AS Y
ON (X.IDDept=Y.IDDept)
WHERE Y.Nama='Angie';
3. Table subqueries
Table subquery digunakan bila user ingin melakukan statement query (SELECT, INSERT,
UPDATE, atau DELETE) untuk record-record yang tidak NULL dan tidak terdapat duplikasi.
Untuk memahami lebih jelas penggunaan query ini, dapat melihat contoh berikut:
SELECT NamaDept
FROM Dept
WHERE IDDept IN
(
SELECT DISTINCT IDDept
FROM Pegawai
);
Fungsi Syntax di atas digunakan untuk menampilkan seluruh record pada kolom
Syntax NamaDept yang memiliki IDDept yang tidak redundan pada tabel
Pegawai
4. Correlated subqueries
Terkadang user hanya ingin menampilkan atau melakukan statement query lainnya untuk
record-record pada suatu database yang nilai pada salah satu kolomnya memenuhi suatu
kriteria tertentu. Pada kondisi seperti itulah subquery ini digunakan, yaitu dengan
membandingkan nilai pada suatu kolom dari record tersebut dengan kriteria yang ditetapkan.
Sebagai contoh:
Bila user ingin menampilkan nama pegawai yang yang memiliki IDDept lebih besar dari rata-
rata IDDept seluruh pegawai, syntax yang digunakan adalah:
SELECT Nama
FROM Pegawai
WHERE IDDept <
(
SELECT AVG(IDDept) FROM Pegawai
);
Catatan: Syntax di atas hanya sebagai contoh karena pada kasus sebenarnya tidak mungkin
user akan merata-rata IDDept.
5. Subqueries with EXISTS, NOT EXISTS
Subquery ini digunakan untuk melakukan statement query (SELECT, INSERT, UPDATE, atau
DELETE) untuk record-record yang juga sudah terdaftar atau belum terdaftar pada tabel
lainnya. Bila ingin melakukan statement query untuk record-record yang telah terdaftar,
digunakan operator EXIST, namun bila ingin melakukan statement query untuk record-record
yang belum terdaftar, digunakan operator NOT EXIST.
SELECT NamaDept
FROM Dept
WHERE EXISTS
(
SELECT *
FROM Pegawai
WHERE Dept.IDDept=Pegawai.IDDept
);
Fungsi Syntax di atas digunakan untuk menampilkan seluruh record pada kolom
Syntax NamaDept yang memiliki IDDept.
SELECT NamaDept
FROM Dept
WHERE EXISTS
(
SELECT *
FROM Pegawai
WHERE Dept.IDDept=Pegawai.IDDept
);
Fungsi Syntax di atas digunakan untuk menampilkan seluruh record pada kolom
NamaDept yang tidak memiliki IDDept.