Memahami SQL Statement
Memahami SQL Statement
Mengenal SQL 1
Structured Query Language (SQL) adalah suatu bahasa database standar industri. SQL
menyediakan Data Definiton Language (DDL) dan Data Manipulation Language (DML).
Walaupun dalam beberapa bagian saling bersangkutan, perintah DDL memungkinkan
kita untuk membuat dan mendefinisikan tabel (CREATE TABLE), dan index (CREATE
INDEX), sedangkan perintah DML memungkinkan anda untuk membangun query untuk
mengambil data (SELECT) dari beberapa tabel, menyisip (INSERT) data baru,
memperbaiki (UPDATE) data, dan menghapus (DELETE).
Penguasaan SQL Statement merupakan syarat mutlak bagi Database Programmer, karena
dengan pemanfaatan SQL Statement akan menghasilkan efisiensi dan efektifitas yang
tinggi dalam manipulasi data.
Pada trend pemrograman Client Server, Client melakukan request ke server dengan suatu
query yang ditulis dalam bentuk SQL Statement, dan kemudian query tersebut akan
diproses oleh Database Server, serta mengembalikan data ataupun hasil untuk query
tersebut kembali ke komputer Client.
CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)]
[NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]])
Perintah CREATE TABLE digunakan untuk mendefinisikan suatu tabel baru beserta
fieldnya dan konstraint, jika NOT NULL disebutkan, maka record baru membutuhkan
data yang sah untuk field tersebut.
CONSTRAINT clause dapat digunakan untuk membuat berbagai batasan pada field
termasuk PRIMARY KEY, anda dapat juga menggunakan perintah CREATE INDEX
untuk membuat index dan PRIMARY KEY pada tabel yang ada. CONSTRAINT clause
menyerupai CREATE INDEX, tetapi dapat digunakan untuk membuat Relation antar
tabel.
dimana :
Indoprog 1
Memahami SQL Statement Hendra, S.T.
Contoh :
Tabel Forum
Keterangan Text 50
Perintah SQL :
Indoprog 2
Memahami SQL Statement Hendra, S.T.
atau
Tabel Status
Keterangan Text 50
Perintah SQL :
Tabel Peserta
Nama Text 50
Alamat Text 50
Kota Text 50
Telepon Text 25
Homepage Text 50
Perusahaan Text 50
TanggalGabung Date 8
Perintah SQL :
CREATE TABLE PESERTA (Email TEXT(25) NOT NULL CONSTRAINT P_KEY PRIMARY
KEY,
Nama TEXT(50),
Alamat TEXT(50),
Kota TEXT(50),
Indoprog 3
Memahami SQL Statement Hendra, S.T.
Telepon TEXT(50),
Homepage TEXT(50),
Perusahaan TEXT(50),
TanggalGabung Date);
Tabel Aktifitas
ID Long 4 Ya
Perintah SQL :
Indoprog 4
Memahami SQL Statement Hendra, S.T.
Membuat Index
CREATE [ UNIQUE ] INDEX indexON table (field [ASC|DESC][, field [ASC|DESC],
...])[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]
dimana :
Gunakan UNIQUE untuk membuat nilai unik terhadap field tertentu sehingga tidak
memungkinkan duplikasi data. Gunakan WITH clause untuk menentukan apakah :
• Tidak memperbolehkan pemasukan nilai Null pada field yang diindex dengan
menggunakan option DISALLOW NULL.
• Menghindarkan record dengan nilai Null pada field yang diindex untuk
diikutsertakan dalam index.
• Membuat index sebagai PRIMARY, setiap tabel hanya dapat memiliki satu index
PRIMARY.
Contoh membuat Index S_KEY berdasarkan Nama pada tabel PESERTA, perintah SQL
DDL-nya adalah sebagai berikut :
Memodifikasi Tabel
dimana :
Indoprog 5
Memahami SQL Statement Hendra, S.T.
Menghapus tabel yang ada dalam database, atau index dari suatu tabel
table nama tabel yang akan dihapus atau tabel dimana index berada
index nama index yang akan dihapus
Indoprog 6
Memahami SQL Statement Hendra, S.T.
Latihan 1
Judul : Pembuatan Tabel, Index dan Konstraint dengan
DML
1. Aktifkan Visual Data Manager pada menu Add-Ins, dan buatlah suatu Database file
baru Rental.Mdb
Pada Menu File, Pilih New, Microsoft Access, Version 7.0 MDB …
Indoprog 7
Memahami SQL Statement Hendra, S.T.
Ketik Rental
Tabel Anggota
Indoprog 8
Memahami SQL Statement Hendra, S.T.
Telepon Text 15 Ya
Daftar DateTime Ya
Caranya :
Lakukan klik pada tombol Execute, dan akan muncul dialog box :
Indoprog 9
Memahami SQL Statement Hendra, S.T.
Kalau muncul dialog box berikut, abaikan saja, karena DDL SQL tidak menghasilkan
Recordset
Tabel CD
Aktor Text 30 Ya
Daftar DateTime Ya
Indoprog 10
Memahami SQL Statement Hendra, S.T.
CREATE TABLE CD (
KodeCD Text(7) NOT NULL CONSTRAINT P_KEY PRIMARY KEY,
Judul Text(50) NOT NULL, Kategori Text(20) NOT NULL,
Aktor Text(30),
Harga Currency NOT NULL,
Daftar DateTime);
Tabel Transaksi
Kembali DateTime Ya
Denda Currency Ya
Indoprog 11
Memahami SQL Statement Hendra, S.T.
3. Tambahkan Index untuk tabel Anggota berdasarkan nama, tabel CD berdasarkan Judul
4. Tambahkan field BlackList pada Tabel Anggota, dan field Status pada CD
BlackList Bit Ya
Status Text 1 Ya
Indoprog 12
Memahami SQL Statement Hendra, S.T.
2. Dengan menggunakan DDL SQL buatlah tabel-tabel berikut ini, definisikan Primary
Key masing-masing tabel dan Relation antar tabel.
Tabel Fakultas
Tabel Jurusan
Tabel Mahasiswa
Tabel Kuliah
Tabel Dosen
Indoprog 13
Memahami SQL Statement Hendra, S.T.
Tabel KHS
Id Long Ya Ya
Indoprog 14
Memahami SQL Statement Hendra, S.T.
Mengenal SQL 2
Sebagaimana telah diterangkan pada Modul sebelumnya bahwa perintah SQL dibagi atas
dua kelompok besar yaitu DDL (Data Definition Language) dan DML (Data
Manipulation Language). Pada DML, terbagi atas APPEND, UPDATE, DELETE, dan
SELECT query yang dapat digunakan untuk pengolahan data.
Menambah suatu record ke table, hal ini dikenal sebagai append query.
Contoh :
Menghapus satu atau lebih record dari tabel yang berada di daftar FROM clause yang
memenuhi WHERE clause.
Pada tabel yang memiliki hubungan one-to-many relationship dengan tabel lain. Operasi
Cascade delete dapat menyebabkan record lain yang berada pada sisi many ikut terhapus
ketika penghapusan di lakukan terhadap data pada sisi one.
Penting
· Data yang telah dihapus dengan delete query, tidak dapat dibatalkan.
· Lakukan backup terhadap data anda setiap saat. Jika anda salah menghapus, maka anda
dapat mengambil kembali dari backup.
Indoprog 15
Memahami SQL Statement Hendra, S.T.
Contoh :
Catatan :
Kita tidak perlu menulis BlackList=True, karena BlackList sendirinya
bertipe Logical
Syntax
UPDATE table
SET newvalue
WHERE criteria;
Penting :
· UPDATE tidak menghasilkan suatu himpunan hasil. Juga, setelah anda mengupdate
record dengan menggunakan update query, anda tidak dapat membatalkan operasi
tersebut. Jika anda ingin mengetahui record mana saja yang akan terupdate, pertama anda
perlu melakukan select query dengan kriteria yang sama.
· Lakukan backup terhadap data anda setiap saat. Jika anda salah menghapus, maka anda
dapat mengambil kembali dari backup.
Contoh :
dimana fields adalah daftar dari field-field yang akan diambil dari tabel, anda dapat
menggunakan tanda * (Asterisk) untuk menyatakan seluruh field dari tabel.
Contoh :
Indoprog 16
Memahami SQL Statement Hendra, S.T.
Atau
Ketika recordset terbentuk, Microsoft Jet Engine menggunakan nama field sebagai nama
objek field pada recordset, anda dapat menentukan nama objek field tersebut dengan
reserved word AS.
Contoh :
dalam hal ini nama objek field TanggalDaftar akan digunakan untuk field Daftar.
Anda dapat menggunakan AS untuk menentukan nama objek field pada recordset yang
merupakan hasil dari fungsi Agregate maupun ekspresi.
Contoh :
Akan mendapat suatu recordset dengan field JlhAnggota dan record tunggal yang berisi
jumlah anggota yang terdaftar pada tabel Anggota.
SELECT fieldlist
FROM tableexpression
WHERE criteria
Sebagaimana pemakaian WHERE clause pada UPDATE dan DELETE query, anda dapat
menggunakan WHERE clause untuk membatasi data yang dikembalikan berdasarkan
kriteria tertentu.
Contoh :
SELECT fieldlist
FROM table
WHERE selectcriteria
[ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]]
Indoprog 17
Memahami SQL Statement Hendra, S.T.
Anda dapat menggunakan ORDER BY clause untuk menentukan urutan data hasil query
berdasarkan field tertentu, pada defaultnya adalah Ascending kalau tidak disebutkan ASC
ataupun DESC.
Contoh :
Contoh :
Akan mendapat suatu recordset dengan field JlhDenda dan record tunggal yang berisi
jumlah perhitungan field denda pada tanggal 20 September 2001 dari tabel Transaksi.
SELECT fieldlist
FROM table
WHERE criteria
[GROUP BY groupfieldlist]
Anda dapat menggunakan ORDER BY clause untuk meringkas record yang nilai fieldnya
sama menjadi satu record dikombinasikan dengan fungsi Agregate untuk mendapatkan
statistik dari masing-masing ringkasan.
Misalnya kita ingin mendapatkan suatu daftar recordset yang berisi jumlah denda harian
berdasarkan tanggal pengembalian (Kembali), maka perintah SQL adalah :
SELECT fieldlist
FROM table
WHERE selectcriteria
Indoprog 18
Memahami SQL Statement Hendra, S.T.
GROUP BY groupfieldlist
[HAVING groupcriteria]
Jika anda menggunakan WHERE clause untuk membatasi data hasil query berdasarkan
kriteria tertentu, maka HAVING clause digunakan untuk membatasi data setelah
GROUPING dilakukan.
Contoh :
Mendapatkan daftar hasil jumlah denda harian, dimana yang dikembalikan hanya jumlah
denda yang diatas 10000.
Secara default kalau tidak dituliskan, maka predikat ALL akan digunakan. Anda dapat
menggunakan predikat DISTINCT untuk mengambil satu record dari beberapa record
yang memiliki nilai yang sama.
Contoh :
Akan menghasilkan daftar nama Aktor dari tabel CD yang kita miliki. pemakaian
predikat DISTINCT dalam hal ini untuk memastikan hanya 1 aktor terambil dari
beberapa CD yang mungkin memiliki aktor utama yang sama.
Pemakaian predikat TOP untuk mendapatkan n record atau n persen record dari daftar
teratas.
Misalnya kita ingin mendapatkan 10 kode CD yang paling sering diTransaksi oleh
Anggota.
Indoprog 19
Memahami SQL Statement Hendra, S.T.
Mengambil kolom dari dua atau lebih tabel dengan Operasi INNER JOIN
Pada operasi INNER JOIN akan mengabungkan record-record yang memiliki nilai sama
pada kolom tertentu pada kedua tabel.
Tabel Transaksi
Tabel CD
Tabel Anggota
Indoprog 20
Memahami SQL Statement Hendra, S.T.
Limit Byte
Daftar DateTime
Misalnya kita ingin mengambil suatu recordset yang berisi kolom-kolom berikut :
Tanggal Transaksi
Judul Transaksi
Nama Anggota
Dalam hal ini kita akan menggambil data dari dua tabel, yaitu tabel Transaksi, dan tabel
Anggota, dimana dalam pengambilan tersebut KodeAnggota pada tabel Transaksi harus
bersesuaian dengan KodeAnggota pada tabel Anggota, sehingga FROM clause-nya
dapat ditulis menjadi :
Pada perintah SELECT yang menggambil kolom lebih dari satu tabel, kita perlu
menuliskan nama Tabel dan Field yang dipisahkan dengan dot (.).
Anda dapat melakukan nested untuk mengambil data lebih dari dua tabel
Misalnya kita ingin mengambil suatu recordset yang berisi kolom-kolom berikut :
Tanggal Transaksi
Judul CD
Nama Anggota
Harga CD
Dalam hal ini kita akan menggambil data dari tiga tabel, yaitu tabel Transaksi, tabel CD
dan tabel Anggota, dimana dalam pengambilan tersebut KodeCD pada tabel Transaksi
harus bersesuaian dengan KodeCD pada tabel CD, dan KodeAnggota pada tabel
Indoprog 21
Memahami SQL Statement Hendra, S.T.
Transaksi harus bersesuaian dengan KodeAnggota pada tabel Anggota, sehingga FROM
clause-nya dapat ditulis menjadi :
atau
atau
Jika pada operasi INNER JOIN, recordset yang dihasilkan adalah data-data yang
memiliki nilai yang bersesuaian pada kolom tertentu, sedangkan operasi OUTER JOIN
seperti LEFT JOIN dan RIGHT JOIN dapat digunakan untuk mengambil seluruh data
dari suatu tabel walaupun pada tabel lainnya tidak ada data yang bersesuaian.
Contoh :
Membuat suatu query union, yang mana mengabung hasil dari dua query atau tabel
dengan menghilangkan record duplikat, untuk mengikutkan record yang duplikat, anda
dapat mencamtumkan ALL.
[TABLE] query1 UNION [ALL] [TABLE] query2 [UNION [ALL] [TABLE] queryn [ ...
]]
Indoprog 22
Memahami SQL Statement Hendra, S.T.
Misalnya kita memiliki dua tabel History (data transaksi bulan lalu), Transaksi (data
transaksi sekarang), kita ingin mengambil data dari dua tabel tersebut menjadi satu
recordset.
TRANSFORM aggfunction
selectstatement
PIVOT pivotfield [IN (value1[, value2[, ...]])]
Anda dapat menggunakan perintah TRANSFORM untuk membuat suatu Crosstab query
yang merupakan ringkasan data yang kolomnya berasal dari field atau ekspresi.
Misalnya kita akan membuat ringkasan data jumlah transaksi peminjaman CD oleh
masing-masing Anggota (baris) pada masing-masing bulan JAN, FEB, ... (kolom)
TRANSFORM Count(NoTransaksi)
SELECT Transaksi.KodeAnggota
FROM Transaksi
GROUP BY Transaksi.KodeAnggota
Indoprog 23
Memahami SQL Statement Hendra, S.T.
PIVOT Format([Tanggal],"mmm") In
("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec
");
Indoprog 24
Memahami SQL Statement Hendra, S.T.
Latihan 1
Judul : Mencoba Append, Update, dan Delete query
1. Dengan menggunakan Visual Data Manager, buka database Rental.mdb.
Tabel Anggota
Tabel CD
Tabel Transaksi
Indoprog 25
Memahami SQL Statement Hendra, S.T.
Latihan 2
Judul : Mencoba SELECT query
1. Dengan menggunakan Visual Data Manager aktifkan Nwind.Mdb yang merupakan
database sample pada Visual Basic maupun Microsoft Access.
• Categories
Indoprog 26
Memahami SQL Statement Hendra, S.T.
• Customers
• Employees
• Orders
• Orders Details
• Products
• Shippers
• Suppliers
2. Aktifkan tampilan dengan menggunakan DBGrid , yang dapat dipilih dari Toolbar.
• CustomerId
• CompanyName
• ContactName
• ContactTitle
• Address
• City
• Region
• PostalCode
• Country
• Phone
• Fax
4. Pada Jendela SQL ketikkan perintah SQL berikut, dan klik pada Execute.
Indoprog 27
Memahami SQL Statement Hendra, S.T.
Dengan menggunakan WHERE clause, batasi data yang ContactTitle adalah Sales
Manager
Indoprog 28
Memahami SQL Statement Hendra, S.T.
Hitung Jumlah pelangan yang terdapat di Country USA dengan Fungsi Agregate Count
Buatlah Daftar Negara yang mana jumlah pelangan diatas 10 perusahaan dengan
HAVING clause
Buatlah Daftar Negara dimana langanan berada (tidak boleh double) dengan
menggunakan predikat DISTINCT
Buatlah Daftar 10 besar Negara berdasarkan jumlah pelanggan, dengan predikat TOP
• ProductID
• ProductName
• SupplierID
• CategoryID
• QuantityPerUnit
• UnitPrice
• UnitInStock
• UnitOnOrder
• ReorderLevel
• Discontinued
• CategoryID
• CategoryName
• Description
• Picture
7. Dengan menggunakan perintah SQL dan operasi INNER JOIN antara tabel Products
dan Categories, tampilkan kolom ProductName, CategoryName, dan Unit Price.
Indoprog 29
Memahami SQL Statement Hendra, S.T.
• SupplierId
• CompanyName
• ContactName
• ContactTitle
• Address
• City
• Region
• PostalCode
• Country
• Phone
• Fax
• Homepage
9. Dengan menggunakan perintah SQL dan operasi INNER JOIN antara tabel Products,
Categories, Suppliers, tampilkan kolom ProductName, CategoryName, SupplierName,
dan Unit Price.
10. Buatlah suatu daftar negara dimana perusahaan memiliki hubungan, baik dari tabel
Customers maupun tabel Suppliers, dengan operasi UNION.
• OrderID
• CustomerID
• EmployeeID
• OrderDate
• RequiredDate
• ShippedDate
• ShipVia
• Freight
• ShipName
• ShipAddress
• ShipCity
Indoprog 30
Memahami SQL Statement Hendra, S.T.
• ShipRegion
• ShipPostalCode
• ShipCountry
12. Buatlah suatu daftar jumlah Order Per CustomerID untuk Jan, Feb, ..., Dec.
TRANSFORM Count(*)
SELECT Orders.CustomerId
FROM Orders
GROUP BY Orders.CustomerId
PIVOT Format([OrderDate],"mmm") In
("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
TRANSFORM Count(*)
SELECT Orders.CustomerId
FROM Orders WHERE Year([OrderDate]) = 1994
GROUP BY Orders.CustomerId
PIVOT Format([OrderDate],"mmm") In
("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
Indoprog 31
Memahami SQL Statement Hendra, S.T.
Latihan 3
Judul : Latihan
1. Dengan menggunakan Visual Data Manager aktifkan Biblio.Mdb
• Menampilkan kolom PubId, Name, dan Company Name dari tabel Publishers
• Batasi data yang dari City New York
• Urutkan data berdasarkan Name Descending
• Hitung jumlah publishers dari City Carmel
• Hitung jumlah pelanggan dari masing-masing City
• Buatlah Daftar City yang mana jumlah publishernya diatas 3
• Buatlah Daftar City publishers (tidak boleh double)
• Buatlah Daftar 10 besar City berdasarkan jumlah publishers
3. Tampilan recordset dengan kolom ISBN, Author dari tabel TitleAuthor dan Authors.
4. Tampilan recordset dengan kolom Title, Author, Name, dari tabel Titles, Title Author,
Authors, dan Publishers (4 Table)
Indoprog 32