Rabu, 24 Maret 2010
Tutorial SQL
(Structured Query Language)
Structured Query Language (SQL) merupakan bahasa yang banyak digunakan dalam berbagai produk database. SQL dibangun di laboratorium IBM-San Jose California sekitar akhir tahun 70-an. Pertama kali dikembangkan sebagai bahasa di produk database DB2 yang sampai saat ini merupakan produk database andalan IBM. SQL sering di lafalkan dengan “sequel”.
Saat ini organisasi standar America (ANSI) menetapkan standar bahasa SQL yaitu ANSI-92 standard. Masing-masing vendor database memiliki dialeknya sendiri sebagaian besar spesifikasinya mengacu pada standar ANSI tersebut dengan berbagai ekstensi tambahan. SQL Server menggunakan bahasa Transact-SQL dalam produknya, sedangkan Oracle menggunakan PL/SQL.
Dalam tutorial ini penulis menggunakan database NorthWind yang merupakan database sampel di SQL Server sebagai sarana latihan. Tools yang digunakan adalah Query Analyzer, yang dapat diakses dari menu Start > Program > Microsoft SQL Server > Query Analyzer. Anda juga dapat menggunakan produk database lain seperti MySQL atau Oracle dengan konsep yang sama.
Saat ini organisasi standar America (ANSI) menetapkan standar bahasa SQL yaitu ANSI-92 standard. Masing-masing vendor database memiliki dialeknya sendiri sebagaian besar spesifikasinya mengacu pada standar ANSI tersebut dengan berbagai ekstensi tambahan. SQL Server menggunakan bahasa Transact-SQL dalam produknya, sedangkan Oracle menggunakan PL/SQL.
Dalam tutorial ini penulis menggunakan database NorthWind yang merupakan database sampel di SQL Server sebagai sarana latihan. Tools yang digunakan adalah Query Analyzer, yang dapat diakses dari menu Start > Program > Microsoft SQL Server > Query Analyzer. Anda juga dapat menggunakan produk database lain seperti MySQL atau Oracle dengan konsep yang sama.
Menampilkan Data dengan Statement SELECT
Syntax paling dasar untuk mengambil data dari database adalah sebagai berikut :
FROM Customers
Jalankan perintah tersebut dengan menekan tombol F5, maka akan tampil tiga kolom dari tabel Customers :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ALFKI Alfreds Futterkiste Maria
ANATR Ana Trujillo Emparedados y helados Ana
ANTON Antonio Moreno Taquería Antonio
AROUT Around the Horn Thomas
BERGS Berglunds snabbköp Christina
BLAUS Blauer See Delikatessen Hanna Moos
BLONP Blondesddsl père et fils Frédérique
BOLID Bólido Comidas preparadas Martín
BONAP Bon app' Laurence
………………………..
………………………..
Syntax paling dasar untuk mengambil data dari database adalah sebagai berikut :
SELECT column
FROM table
FROM table
Buka query Analyser dan pastikan anda telah terkoneksi dengan database Northwind. Tuliskan kode berikut untuk menampilkan data customer yang terdapat di tabel Customers.
SELECT CustomerID, CompanyName, ContactNameFROM Customers
Jalankan perintah tersebut dengan menekan tombol F5, maka akan tampil tiga kolom dari tabel Customers :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ALFKI Alfreds Futterkiste Maria
ANATR Ana Trujillo Emparedados y helados Ana
ANTON Antonio Moreno Taquería Antonio
AROUT Around the Horn Thomas
BERGS Berglunds snabbköp Christina
BLAUS Blauer See Delikatessen Hanna Moos
BLONP Blondesddsl père et fils Frédérique
BOLID Bólido Comidas preparadas Martín
BONAP Bon app' Laurence
………………………..
………………………..
Untuk menampilkan semua kolom dari suatu table, digunakan tanda asterik (*), daripada menyebutkan nama kolomnya satu per satu. Tiluskan statement berikut :
SELECT * FROM Customers
Maka akan ditampilkan seluruh kolom di table Customers yang berjumlah 11 kolom.
Meskipun cara ini sangat sederhana untuk menampilkan isi seluruh kolom dari suatu table, anda tetap dianjurkan untuk hanya mengambil data dari kolom yang anda perlukan saja. Pengambilan data yang tidak perlu mengakibatkan penurunan performa aplikasi.
Filter Data dengan WHERE
SELECT * FROM Customers
Maka akan ditampilkan seluruh kolom di table Customers yang berjumlah 11 kolom.
Meskipun cara ini sangat sederhana untuk menampilkan isi seluruh kolom dari suatu table, anda tetap dianjurkan untuk hanya mengambil data dari kolom yang anda perlukan saja. Pengambilan data yang tidak perlu mengakibatkan penurunan performa aplikasi.
Filter Data dengan WHERE
Perintah SELECT dan FROM diatas hanya membatasi jumlah kolom yang ditampilkan saja, sedangkan jumlah baris yang dihasilkan tidak dibatasi. Anda sering memerlukan hanya baris atau data yang memenuhi kriteria tertentu saja yang ditampilkan.
Klausa WHERE digunakan untuk menentukan kriteria RECORD yang ditampilkan. Syntax umumnya adalah sebagai berikut :
SELECT columns
FROM tables
WHERE Conditions
Klausa WHERE digunakan untuk menentukan kriteria RECORD yang ditampilkan. Syntax umumnya adalah sebagai berikut :
SELECT columns
FROM tables
WHERE Conditions
Perintah SQL diatas dapat dimodifikasi agar menampilkan data untuk customer dengan kode ALFKI saja. Kode SQL nya menjadi sebagai berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE CustomerID = 'ALFKI'
Setelah dirun maka tampil hasil query sebagai berikut :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ALFKI Alfreds Futterkiste Maria Anders
(1 row(s) affected)
Terlihat bahwa hanya dihasilkan satu record yang memenuhi kriteria. Dalam perintah tersebut kriteria yang digunakan adalah kolom CustomerID dengan nilai ALFKI.
Anda juga dapat membuat beberapa kriteria sekaligus dengan klausa WHERE. Logika yang digunakan bisa berupa OR (atau) serta AND (dan). Perhatikan contoh perintah berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE CustomerID = 'ALFKI' OR
CustomerID = 'AROUT'
Maka dihasilkan dua buah record yang memenuhi kritreia tersebut :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ALFKI Alfreds Futterkiste Maria Anders
AROUT Around the Horn Thomas Hardy
(2 row(s) affected)
Cara lain adalah menggunakan AND sehingga data yang ditampilkan hanya yang memenuhi kriteria yang disebutkan saja. Misalkan perintah berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE City = 'London' AND
ContactName = 'Thomas Hardy'
Maka record yang ditampilkan harus memenuhi kedua kriteria di klausa WHERE. Hasil yang didapat adalah :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
AROUT Around the Horn Thomas Hardy
(1 row(s) affected)
Apabila anda mengganti AND dengan OR, maka hasilnya akan berbeda, yaitu sebagai berikut :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
AROUT Around the Horn Thomas Hardy
BSBEV B's Beverages Victoria Ashworth
CONSH Consolidated Holdings Elizabeth Brown
EASTC Eastern Connection Ann Devon
NORTS North/South Simon Crowther
SEVES Seven Seas Imports Hari Kumar
(6 row(s) affected)
Sampai di sini anda telah mempelajari bagaimana mengambil data dari database berdasarkan kriteria tertentu, serta perbedaan penggabungan kriteria yang menggunakan OR dan AND.
Sortir Data dengan ORDER BY
ORDER BY digunakan untuk mengurutkan hasil pencarian data. Secara default data yang ditampilkan disortir berdasarkan urutan masuknya data ke dalam tabel. Dengan menggunakan ORDER BY anda dapat mengurutkan berdasarkan kolom tertentu yang anda kehendaki.
Bila anda perhatikan perintah SQL diatas maka data yang dihasilkan telah diurutkan berdasarkan kolom CustomerID. Anda dapat merubahnya dengan mengurutkan berdasarkan kolom ContactName dengan perintah berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
ORDER BY ContactName
Sehingga hasilnya adalah :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ROMEY Romero y tomillo Alejandra Camino
MORGK Morgenstern Gesundkost Alexander Feuer
ANATR Ana Trujillo Emparedados Ana Trujillo
TRADH Tradição Hipermercados Anabela Domingues
GOURL Gourmet Lanchonetes André Fonseca
EASTC Eastern Connection Ann Devon
LAMAI La maison d'Asie Annette Roulet
Terlihat bahwa data telah diurutkan berdasarkan ContactName secara ascending (dari a ke z). Anda dapat membalik urutan menjadi dari z ke a dengan merubah klausa ORDER BY menjadi seperti berikut :
ORDER BY ContactName desc
Secara default urutan yang digunakan adalah ascending.
Selain itu dapat pula digunakan beberapa kriteria pengurutan. Artinya pengurutan dilakukan berdasarkan kolom yang disebut pertama, setelah itu kolom kedua, dan selanjutnya. Perintah diatas dapat ditambahkan sehingga menjadi sebagai berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
ORDER BY ContactName, CompanyName
Maka data akan diurutkan mengikuti ContactName, dan selanjutnya berdasarkan CompanyName.
Perintah ORDER BY juga dapat digabungkan dengan WHERE misalnya sebagai berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE City = 'London' OR
ContactName = 'Thomas Hardy'
ORDER BY ContactName
Perhatikan baik-baik bahwa ORDER BY harus diletakkan setelah WHERE. Apabila urutan tersebut terbalik maka statement SQL tidak dapat dijalankan dan menghasilkan pesan error berikut :
Server: Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'WHERE'.
Klausa GROUP BY
Fungsi agregat yang telah dijelaskan sebelumnya hanya menampilkan satu baris hasil. Sering dibutuhkan untuk menampilkan rangkuman hasil perhitungan beberapa kelompok data dalam satu kali tampilan.
Misalnya anda ingin menghitung rata-rata dan jumlah produk yang terjual untuk setiap jenis produk. Untuk melakukan ini digunakan klausa GROUP BY yang berfungsi mengelompokkan data yang memiliki kriteria sama. Dengan demikian dapat dihasilkan suatu rangkuman hasil perhitungan untuk tiap kategori data.
Tuliskan kode program berikut :
SELECT ProductID, SUM(Quantity)as Jumlah
from [Order Details]
GROUP BY ProductID
Perintah tersebut akan menghitung jumlah produk yang terjual untuk setiap ProductID dan mengelompokkan hasilnya berdasarkan ProductID tersebut. Hasil yang didapat sebagai berikut :
ProductID Jumlah
----------- -----------
23 580
46 548
69 714
77 791
31 1397
15 122
62 1083
Terlihat jelas bahwa SQL Server telah mengelompokkan barang berdasarkan ProductID dan menghitung jumlah di kolom (QTY) untuk tiap ProductID tersebut.
Hal yang perlu mendapatkan perhatian adalah pada baris terakhir kode program tersebut yaitu pada bagian :
Bagian ini berfungsi mengelompokkan barang berdasarkan ProductID nya. Sedangkan kolom ProductID sendiri telah disebutkan di dalam daftar SELECT. Ini merupakan aturan dasar apabila anda menggunakan GROUP BY dalam perhitungan dengan fungsi agregat. Kolom dalam daftar SELECT yang tidak dihitung dengan fungsi agregat harus dimasukkan dalam daftar GROUP BY. Pada contoh diatas kolom ProductID masuk dalam daftar SELCT tetapi tidak dihitung menggunakan fungsi SUM, sehingga harus dimasukkan dalam daftar GROUP BY.
Salah satu contoh pengembangan yang lebih kompleks dari perintah penggunaan GROUP BY ini adalah sebagai berikut :
SELECT ProductID, SUM(Quantity)as Jumlah,
AVG(Quantity) as Rataan,
SUM(Quantity*UnitPrice)as Nilai,
AVG(Quantity*UnitPrice)as AVGNilai
from [Order Details]
GROUP BY ProductID
ORDER BY Nilai DESC
Kode tersebut menghitung jumlah, rata-rata, serta nilai uang tiap kategori produk. Nilai uang dari tiap produk didapat dengan mengalikan Quantity dengan UnitPrice. Selanjutnya data diurutkan berdasarkan nilai uangnya dari yang terbesar hingga terkecil. Hasilnya adalah sebagai berikut :
ProductID Jumlah Rataan Nilai AVGNilai
----------- ----------- ----------- -------------------
38 623 25 149984.2000 6249.3416
29 746 23 87736.4000 2741.7625
59 1496 27 76296.0000 1412.8888
60 1577 30 50286.0000 986.0000
62 1083 22 49827.9000 1038.0812
56 1263 25 45121.2000 902.4240
51 886 22 44742.6000 1147.2461
17 978 26 35482.2000 958.9783
18 539 19 31987.5000 1184.7222
28 640 19 26865.6000 814.1090
Perhatikan baik-baik bahwa perintah ORDER BY harus selalu diletakkan setelah GROUP BY.
Inner Join
Penggabungan tabel dalam perintah SQL menggunakan keyword JOIN. Jenis penggabungan tabel yang pertama adalah INNER JOIN. INNER JOIN hanya menampilkan data yang benar-benar terdapat di dalam tabel yang saling dihubungkan.
Misalnya anda menggabungkan tabel Customers dengan Orders, maka field penghubung yang digunakan adalah CustomerID. Perhatikan diagram berikut :
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0gy284N9abSeZXK1rOCgbe1j9EjvLPyP5SgX7e_7qCQXj4i7hJ9quSIAlaXgMEcV0n8fm8HPB8NckwgavYYdKBvcZgYPkw40fo74wuO0Ch3QY66hZqgS72w4pFRx-hT5B62Z8Zlun-ew/s400/Untitled.png)
Pada gambar tersebut terlihat bahwa CustomerID merupakan Primary Key di tabel Customers dan menjadi Foreign Key di tabel Orders. Hubungan kedua tabel tersebut adalah One to Many, dimana satu customer dapat memiliki banyak order yang berulang.
Dalam teknik INNER JOIN maka hasil yang ditampilkan hanya record yang memiliki CustomerID sama di kedua tabel tersebut. Apabila terdapat customr yang CustomerID nya tidak ditemukan di tabel Orders maka data tersebut tidak ditampilkan.
Coba ketikkan perintah berikut di Query Analyser :
SELECT CompanyName, OrderID, OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
Dan perhatikan hasilnya sebagai berikut :
CompanyName OrderID OrderDate
---------------------------------------- ----------- ---------
Vins et alcools Chevalier 10248 1996-07-04 00:00:00.000
Toms Spezialitäten 10249 1996-07-05 00:00:00.000
Hanari Carnes 10250 1996-07-08 00:00:00.000
Victuailles en stock 10251 1996-07-08 00:00:00.000
Suprêmes délices 10252 1996-07-09 00:00:00.000
Hanari Carnes 10253 1996-07-10 00:00:00.000
…………………………………………………………
……………………………………………………….
(830 row(s) affected)
Perintah SQL tersebut mengambil field CompanyName dari tabel Customers, sedangkan field OrderID dan OrderDate diambil dari tabel Orders. Perhatikan baik baik diagram pada gambar 3.2.
Kunci utama penggabungan dua tabel tersebut adalah keyword INNER JOIN dengan kriteria CustomerID. Perhatikan bahwa nama tabel juga harus dituliskan sebelum nama field CustomerID tersebut.
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
Antara nama tabel dengan nama field dibatasi dengan tanda titik (.) misalnya Orders.CustomerID. Tujuan pencantuman nama tabel tersebut adalah menghindari ambiguitas yang mengakibatkan error apabila perintah tersebut dieksekusi. Karena CustomerID tersebut terdapat di kedua tabel maka nama tabel harus dicantumkan agar dapat diidentifikasi secara unik field mana yang dimaksud.
Untuk memberikan gambaran lebih kompleks mengenai penerapan penggabungan tabel ini anda dapat memodifikasi contoh perintah yang terdapat penggunaan GROUP BY. Pada perintah tersebut anda menghitung Jumlah dan rataan produk yang terjual, tetapi hanya ditampilkan ProductID saja sedangkan nama produknya tidak terlihat karena terdapat di tabel lain.
Anda dapat menggabungan tabel Order Details tersebut dengan tabel Products yang menyimpan nama produk. Dengan demikian dapat ditampilkan baik ProductID maupun nama produknya. Tuliskan baris perintah berikut :
SELECT Products.ProductID, Products.ProductName,
SUM([Order Details].Quantity) AS Jumlah,
AVG([Order Details].Quantity) AS Rataan,
SUM(Products.UnitPrice * [Order Details].Quantity)
AS Nilai,
AVG(Products.UnitPrice * [Order Details].Quantity)
AS AVGNilai
FROM Products
INNER JOIN [Order Details]
ON Products.ProductID = [Order Details].ProductID
GROUP BY Products.ProductID, Products.ProductName
Setelah dijalankan maka akan tampak hasilnya :
ProductID ProductName Jumlah Rataan Nilai AVGNilai
----------- ---------------------------------------- ---------
1 Chai 828 21 14904.0000 392.2105
2 Chang 1057 24 20083.0000 456.4318
3 Aniseed 328 27 3280.0000 273.3333
4 Chef Anton 453 22 9966.0000 498.3000
Pada perintah diatas anda dapat melihat bahwa semua nama field diawali dengan nama tabelnya. Hal ini menyebabkan penulisan kode program menjadi panjang, tetapi sisi positifnya adalah kita dapat langsung mengetahui posisi tabel dari tiap-tiap field yang ditampilkan.
Selain itu antara tabel Customers terdapat beberapa field yang namanya sama sehingga apabila tidak dituliskan nama tabelnya berakibat error pada perintah tersebut.
LEFT JOIN dan RIGHT JOIN
Berbeda dengan INNER JOIN yang hanya menampilkan irisan data dari tabel yang digabungkan maka LEFT JOIN akan menampilkan data dari tabel yang disebutkan terlebih dahulu.
LEFT JOIN
Misalkan pada diagram gambar 3.2 diatas digunakan perintah LEFT JOIN maka apabila tabel Customers disebutkan terlebih dahulu SQL Server akan menampilkan semua nama customer yang terdapat di tabel tersebut. Semua data customer ditampilkan walaupun CustomerID nya tidak terdapat di tabel Orders.
Penggunaan praktis perintah ini misalnya anda ingin mengetahui frekuensi order semua customer baik yang telah memiliki order maupun yang belum. Untuk kebutuhan tersebut maka ditampilkan semua customer berikut data frekuensi ordernya. Perhatikan contoh perintah berikut :
SELECT Customers.CustomerID, Customers.CompanyName,
COUNT(Orders.OrderID) AS Frekuensi
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerID, Customers.CompanyName
ORDER BY COUNT(Orders.OrderID)
Karena menggunakan perintah LEFT JOIN maka semua data di tabel Customers ditampilkan seluruhnya walaupun frekuensi ordernya 0. Hasil perintah tersebut adalah :
CustomerID CompanyName Frekuensi
---------- ---------------------------------------- ----------
PARIS Paris spécialités 0
FISSA FISSA Fabrica Inter. Salchichas S.A. 0
CENTC Centro comercial Moctezuma 1
LAZYK Lazy K Kountry Store 2
GROSR GROSELLA-Restaurante 2
LAUGB Laughing Bacchus Wine Cellars 3
……………
……………
(91 row(s) affected)
Anda dapat melihat terdapat 2 customer yang frekuensi 0 tetapi tetap ditampilkan. Di akhir tampilan hasil tersebut terlihat ada 91 baris yang ditampikan. Untuk melakukan pengecekan jalankan perintah berikut :
SELECT COUNT(*) from dbo.Customers
maka hasilnya adalah :
-----------
91
(1 row(s) affected)
Artinya terdapat 91customer di tabel Customers, yaitu sama dengan jumlah baris di perintah sebelumnya. Dengan demikian memang benar bahwa LEFT JOIN telah menampilkan seluruh Customer yang berjumlah 91.
RIGHT JOIN
Perintah RIGHT JOIN merupakan kebalikan dari LEFT JOIN, yaitu menampilkan semua isi tabel yang disebutkan kedua dalam perintah join. Dalam contoh di atas apabila LEFT JOIN diganti RIGHT JOIN maka semua isi tabel Orders akan ditampilkan semuanya.
Cobalah memodifikasi perintah diatas menjadi sebagai berikut :
SELECT Customers.CustomerID, Customers.CompanyName,
COUNT(Orders.OrderID) AS Frekuensi
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerID, Customers.CompanyName
ORDER BY COUNT(Orders.OrderID)
Setelah anda jalankan perintah tersebut lihatlah perbedaaanya dengan perintah LEFT JOIN sebelumnya. Maka terlihat hanya dihasilkan 89 baris, berarti terdapat 2 customer yang CustomerID nya tidak terdapat di tabel Orders atau frekuensi ordernya = 0.
Statement INSERT
Untuk mengisikan data ke dalam suatu tabel digunakan perntah INSERT yang memiliki syntax umum sebagai berkut :
INSERT table (column list)
VALUES (value list)
Misalnya untuk mengisikan data customer baru dituliskan perintah berikut :
INSERT Customers (CustomerID, CompanyName, ContactName)
VALUES ('MJTR', 'Majuterus', 'Lisha')
Perintah tersebut mengisikan data di tabel Customers untuk tiga kolom yaitu CustomerID, CompanyName dan ContactName. Sedangkan kolom lain yang tidak diisi maka terisi dengan nilai default sesuai dengan desain tabelnya. Apabila desain tabelnya tidak mengijinkan nilai NULL maka anda harus mengisikan nilainya dalam perintah INSERT tersebut.
Apabila anda menampilkan data tabel Customers maka tampak data yang telah diisikan tersebut sebagai berikut :
CustomerID CompanyName ContactName
---------------------------------------- ---------------------
MAISD Maison Dewey Catherine Dewey MEREP Mère
Paillarde Jean Fresnière
MJTR Majuterus Lisha
MORGK Morgenstern Gesundkost Alexander Feuer
Apabila perintah INSERT digunakan untuk mengisikan seluruh kolom yang terdapat di suatu tabel maka nama kolom tidak perlu disebutkan secara eksplisit. Cukup disebutkan nilai data yang akan dimasukkan saja. Misalnya untuk mengisikan data ke tabel Shippers yang hanya terdiri dari tiga kolom dilancarkan perintah berikut :
INSERT Shippers
VALUES ('Megah Shipping', '021-55568953')
Anda mungkin bertanya mengapa VALUES yang diisikan hanya dua kolom, sedangan tabel Shippers terdiri dari 3 kolom. Jawabannya adalah karena kolom pertama yang bernama ShippersID telah disetting desainnya sebagai autonumber. Dengan demikian kolom tersebut akan terisi secara otomatis dengan angka berurut setiap terdapat data baru yang dimasukkan sehingga tidak perlu lagi diinsert secara eksplisit.
INSERT dari Tabel Lain
Pengisian tabel juga dapat menggunakan data yang diperoleh dari tabel lain. Caranya adalah dengan menggunakan perintah SELECT v berisi daftar data yang akan dimasukkan setelah perintah INSERT.
Misalnya anda ingin memasukkan data di tabel Suppliers ke dalam tabel Customers maka digunakan perintah berikut :
INSERT Customers (CustomerID, CompanyName, ContactName)
SELECT SupplierID, CompanyName, ContactName
FROM Suppliers
WHERE Country = 'USA'
Apabila anda belum melakukan perubahan apapun di tabel Suppliers maka akan terdapat 4 supplier yang diisikan ke tabel Customers.
Perintah tersebut menggunakan kriteria WHERE Country = 'USA', sehingga hanya supplier yang berada di negara USA saja yang dimasukkan ke tabel Customers.
Prinsip utama dalam penggunaan perintah tersebut adalah jumlah kolom yang akan diisi harus sama dengan kolom yang diambil dalam daftar SELECT. Dengan demikian apabila dua buah tabel memiliki jumlah kolom yang sama maka anda dapat menggunakan perintah tersebut untuk mengisikan seluruh kolom dengan perintah sederhana tanpa menyebutkan kolmnya satu per satu.
Misalkan tabel Customers dan Suppliers memiliki jumlah kolom sama dan anda ingin memasukkan semua supplier ke tabel Customers maka dapat digunakan perintah sederhana sebagai berikut :
INSERT Customers
SELECT * FROM Suppliers
Statement DELETE
Statement DELETE merupakan kebalikan perintah INSERT. Perintah ini menghapus data yang terdapat di suatu tabel. Data dihapus per record atau per baris berdasarkan kriteria tertentu.
Penentuan kriteria record mana yang akan dihapus bisa dilakukan dengan menggunakan klausa WHERE. Misalkan anda ingin menghapus data semua customer yang berada di negara France.
Syntax umum statement ini adalah sebagai berikut :
DELETE FROM table_name
WHERE Condition
Untuk menghapus data customer yang berasal dari Mexico di tabel Customers maka perintahnya adalah :
DELETE FROM Customers
where Country= 'Mexico'
Atau anda bisa juga menghapus data berdasarkan CustomerID yang merupakan primary key di tabel tersebut.
DELETE FROM Customers
where CustomerID= ‘ALFKI’
Selain menggunakan WHERE, dapat juga digabungkan dengan operator LIKE dan BETWEEN untuk membuat kriteria yang lebih fleksible. Misalnya sebagai berikut :
DELETE FROM Orders
WHERE OrderDate BETWEEN '07/01/1996' AND '07/31/1996'
Perintah tersebut akan menghapus data di tabel order yang memiliki OrderDate antara 1 Juli 1996 sampai dengan 31 Juli 1996.
Menghapus Seluruh Tabel
Apabila anda ingin mengosongkan tabel dan menghapus semua data yang ada di dalamnya maka digunakan perintah DELETE tanpa menggunakan kondisi WHERE.
Contoh berikut adalah perintah untuk mengosongkan isi tabel Products :
DELETE Products
Perintah tersebut hanya mengosongkan isi tabel saja tetapi tidak menghapus tabelnya.
Perlu diperhatikan apabila data dalam suatu tabel ternyata memiliki hubungan referential integrity dengan tabel lain maka penghapusan tersebut tidak dapat dilakukan. Mislanya apabila anda ingin menghapus data customer yang telah memiliki data order di tabel Orders, sedangakan antara kedua tabel tersebut memiliki hubungan referential integrity.
Untuk menghapus semua data di suatu tabel yang tidak memiliki hubungan referential integrity dengan tabel lain dapat digunakan perintah TRINCATE.
TRUNCATE TABLE Customers
Maka perintah tersebut akan menghapus semua data customer yang tidak memiliki hubungan dengan tabel lain.
Statement UPDATE
Apabila anda ingin mengedit atau merubah suatu data tanpa menghapusnya maka digunakan perintah UPDATE . Perintah ini juga menggunakan kondisi tertentu dengan klausa WHERE sebagaimana perintah DELETE.
Syntax umum statement UPDATE adalah sebagai berikut :
UPDATE table_name
SET Column1 = Value1, Column2 = Value2, …..
WHERE condition
Perintah ini melakukan perubahan pada kolom tertentu sebagaimana yang disebutkan dalam perintah SET. Perubahan dilakukan terhadap record yang memenuhi kriteria di klausa WHERE.
Misalkan anda ingin menaikkan harga produk sebesar 10% untuk semua barang yang memiliki CategoryID = 2, maka digunakan perintah berikut :
UPDATE Products
SET UnitPrice = UnitPrice * 1.1
WHERE CategoryID = 2
Harga barang terdapat di kolom UnitPrice sehingga kolom tersebut dikalikan dengan 1.1. Perintah tersebut akan menaikkan harga semua barang yang terdapat di tabel Products sesuai dengan kriteria CategoryID.
Selain menggunakan kriteria WHERE perintah ini juga dapat digabungkan dengan operator LIKE dan BETWEEN sebagaiman statement DELETE diatas.
Contoh berikut menggambarkan penggunaan beberapa kriteria untuk mengupdate suatu data :
UPDATE Customers
SET Country = 'Indonesia',
ContactName = 'Lisha'
WHERE City = 'Jakarta'
OR City = 'Surabaya'
Perintah diatas berguna untuk merubah nama negara menjadi Indonesia dan nama ContactName menjadi Lisha apabila kolom City berisi Jakarta atau Surabaya.
Membuat tabel (Creating tables)
Syntax
CREATE TABLE (
()
[UNIQUE] [NOT NUL] [PRIMARY KEY] [DEFAULT]
[referential_constraint_defenition>] [CHECK],
()
[UNIQUE] [NOT NULL] [PRIMARY KEY] [DEFAULT]
[referential_constraint_defenition>] [CHECK],
. . .
);
keterangan
Unique; Pada kolom tersebut tidak boleh ada data yang sama.
Not Null; tidak boleh data pada kolom tersebut bernilai null,
Unique dan Not Null; kolom tersebut dapat dijadikan primary key.
Default; nilai default yang secara otomatis akan mengisi kolom dengan data default tersebut setiap operasi insert dilakukan.
Referential_Constraint_Definition; Bila kolom tersebut merupakan foreign key terhadap tabel lain. Dengan syntax FOREIGN KEY REFERENCES
Contoh :
CREATE TABLE Pelajar (
No_Induk CHAR(8),
Nama CHAR(20),
Tgl_Lahir DATE,
Kelas CHAR(2)
);
CREATE TABLE Mata_Pelajaran(
Kode CHAR(4),
Nama CHAR(20),
Kelas CHAR(2)
);
CREATE TABLE Nilai(
No_Induk CHAR(8),
Kode CHAR(4),
Nl_Angka Number
);
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE CustomerID = 'ALFKI'
Setelah dirun maka tampil hasil query sebagai berikut :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ALFKI Alfreds Futterkiste Maria Anders
(1 row(s) affected)
Terlihat bahwa hanya dihasilkan satu record yang memenuhi kriteria. Dalam perintah tersebut kriteria yang digunakan adalah kolom CustomerID dengan nilai ALFKI.
Anda juga dapat membuat beberapa kriteria sekaligus dengan klausa WHERE. Logika yang digunakan bisa berupa OR (atau) serta AND (dan). Perhatikan contoh perintah berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE CustomerID = 'ALFKI' OR
CustomerID = 'AROUT'
Maka dihasilkan dua buah record yang memenuhi kritreia tersebut :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ALFKI Alfreds Futterkiste Maria Anders
AROUT Around the Horn Thomas Hardy
(2 row(s) affected)
Cara lain adalah menggunakan AND sehingga data yang ditampilkan hanya yang memenuhi kriteria yang disebutkan saja. Misalkan perintah berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE City = 'London' AND
ContactName = 'Thomas Hardy'
Maka record yang ditampilkan harus memenuhi kedua kriteria di klausa WHERE. Hasil yang didapat adalah :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
AROUT Around the Horn Thomas Hardy
(1 row(s) affected)
Apabila anda mengganti AND dengan OR, maka hasilnya akan berbeda, yaitu sebagai berikut :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
AROUT Around the Horn Thomas Hardy
BSBEV B's Beverages Victoria Ashworth
CONSH Consolidated Holdings Elizabeth Brown
EASTC Eastern Connection Ann Devon
NORTS North/South Simon Crowther
SEVES Seven Seas Imports Hari Kumar
(6 row(s) affected)
Sampai di sini anda telah mempelajari bagaimana mengambil data dari database berdasarkan kriteria tertentu, serta perbedaan penggabungan kriteria yang menggunakan OR dan AND.
Sortir Data dengan ORDER BY
ORDER BY digunakan untuk mengurutkan hasil pencarian data. Secara default data yang ditampilkan disortir berdasarkan urutan masuknya data ke dalam tabel. Dengan menggunakan ORDER BY anda dapat mengurutkan berdasarkan kolom tertentu yang anda kehendaki.
Bila anda perhatikan perintah SQL diatas maka data yang dihasilkan telah diurutkan berdasarkan kolom CustomerID. Anda dapat merubahnya dengan mengurutkan berdasarkan kolom ContactName dengan perintah berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
ORDER BY ContactName
Sehingga hasilnya adalah :
CustomerID CompanyName ContactName
---------- ---------------------------------------- ----------
ROMEY Romero y tomillo Alejandra Camino
MORGK Morgenstern Gesundkost Alexander Feuer
ANATR Ana Trujillo Emparedados Ana Trujillo
TRADH Tradição Hipermercados Anabela Domingues
GOURL Gourmet Lanchonetes André Fonseca
EASTC Eastern Connection Ann Devon
LAMAI La maison d'Asie Annette Roulet
Terlihat bahwa data telah diurutkan berdasarkan ContactName secara ascending (dari a ke z). Anda dapat membalik urutan menjadi dari z ke a dengan merubah klausa ORDER BY menjadi seperti berikut :
ORDER BY ContactName desc
Secara default urutan yang digunakan adalah ascending.
Selain itu dapat pula digunakan beberapa kriteria pengurutan. Artinya pengurutan dilakukan berdasarkan kolom yang disebut pertama, setelah itu kolom kedua, dan selanjutnya. Perintah diatas dapat ditambahkan sehingga menjadi sebagai berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
ORDER BY ContactName, CompanyName
Maka data akan diurutkan mengikuti ContactName, dan selanjutnya berdasarkan CompanyName.
Perintah ORDER BY juga dapat digabungkan dengan WHERE misalnya sebagai berikut :
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE City = 'London' OR
ContactName = 'Thomas Hardy'
ORDER BY ContactName
Perhatikan baik-baik bahwa ORDER BY harus diletakkan setelah WHERE. Apabila urutan tersebut terbalik maka statement SQL tidak dapat dijalankan dan menghasilkan pesan error berikut :
Server: Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'WHERE'.
Klausa GROUP BY
Fungsi agregat yang telah dijelaskan sebelumnya hanya menampilkan satu baris hasil. Sering dibutuhkan untuk menampilkan rangkuman hasil perhitungan beberapa kelompok data dalam satu kali tampilan.
Misalnya anda ingin menghitung rata-rata dan jumlah produk yang terjual untuk setiap jenis produk. Untuk melakukan ini digunakan klausa GROUP BY yang berfungsi mengelompokkan data yang memiliki kriteria sama. Dengan demikian dapat dihasilkan suatu rangkuman hasil perhitungan untuk tiap kategori data.
Tuliskan kode program berikut :
SELECT ProductID, SUM(Quantity)as Jumlah
from [Order Details]
GROUP BY ProductID
Perintah tersebut akan menghitung jumlah produk yang terjual untuk setiap ProductID dan mengelompokkan hasilnya berdasarkan ProductID tersebut. Hasil yang didapat sebagai berikut :
ProductID Jumlah
----------- -----------
23 580
46 548
69 714
77 791
31 1397
15 122
62 1083
Terlihat jelas bahwa SQL Server telah mengelompokkan barang berdasarkan ProductID dan menghitung jumlah di kolom (QTY) untuk tiap ProductID tersebut.
Hal yang perlu mendapatkan perhatian adalah pada baris terakhir kode program tersebut yaitu pada bagian :
Bagian ini berfungsi mengelompokkan barang berdasarkan ProductID nya. Sedangkan kolom ProductID sendiri telah disebutkan di dalam daftar SELECT. Ini merupakan aturan dasar apabila anda menggunakan GROUP BY dalam perhitungan dengan fungsi agregat. Kolom dalam daftar SELECT yang tidak dihitung dengan fungsi agregat harus dimasukkan dalam daftar GROUP BY. Pada contoh diatas kolom ProductID masuk dalam daftar SELCT tetapi tidak dihitung menggunakan fungsi SUM, sehingga harus dimasukkan dalam daftar GROUP BY.
Salah satu contoh pengembangan yang lebih kompleks dari perintah penggunaan GROUP BY ini adalah sebagai berikut :
SELECT ProductID, SUM(Quantity)as Jumlah,
AVG(Quantity) as Rataan,
SUM(Quantity*UnitPrice)as Nilai,
AVG(Quantity*UnitPrice)as AVGNilai
from [Order Details]
GROUP BY ProductID
ORDER BY Nilai DESC
Kode tersebut menghitung jumlah, rata-rata, serta nilai uang tiap kategori produk. Nilai uang dari tiap produk didapat dengan mengalikan Quantity dengan UnitPrice. Selanjutnya data diurutkan berdasarkan nilai uangnya dari yang terbesar hingga terkecil. Hasilnya adalah sebagai berikut :
ProductID Jumlah Rataan Nilai AVGNilai
----------- ----------- ----------- -------------------
38 623 25 149984.2000 6249.3416
29 746 23 87736.4000 2741.7625
59 1496 27 76296.0000 1412.8888
60 1577 30 50286.0000 986.0000
62 1083 22 49827.9000 1038.0812
56 1263 25 45121.2000 902.4240
51 886 22 44742.6000 1147.2461
17 978 26 35482.2000 958.9783
18 539 19 31987.5000 1184.7222
28 640 19 26865.6000 814.1090
Perhatikan baik-baik bahwa perintah ORDER BY harus selalu diletakkan setelah GROUP BY.
Inner Join
Penggabungan tabel dalam perintah SQL menggunakan keyword JOIN. Jenis penggabungan tabel yang pertama adalah INNER JOIN. INNER JOIN hanya menampilkan data yang benar-benar terdapat di dalam tabel yang saling dihubungkan.
Misalnya anda menggabungkan tabel Customers dengan Orders, maka field penghubung yang digunakan adalah CustomerID. Perhatikan diagram berikut :
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0gy284N9abSeZXK1rOCgbe1j9EjvLPyP5SgX7e_7qCQXj4i7hJ9quSIAlaXgMEcV0n8fm8HPB8NckwgavYYdKBvcZgYPkw40fo74wuO0Ch3QY66hZqgS72w4pFRx-hT5B62Z8Zlun-ew/s400/Untitled.png)
Pada gambar tersebut terlihat bahwa CustomerID merupakan Primary Key di tabel Customers dan menjadi Foreign Key di tabel Orders. Hubungan kedua tabel tersebut adalah One to Many, dimana satu customer dapat memiliki banyak order yang berulang.
Dalam teknik INNER JOIN maka hasil yang ditampilkan hanya record yang memiliki CustomerID sama di kedua tabel tersebut. Apabila terdapat customr yang CustomerID nya tidak ditemukan di tabel Orders maka data tersebut tidak ditampilkan.
Coba ketikkan perintah berikut di Query Analyser :
SELECT CompanyName, OrderID, OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
Dan perhatikan hasilnya sebagai berikut :
CompanyName OrderID OrderDate
---------------------------------------- ----------- ---------
Vins et alcools Chevalier 10248 1996-07-04 00:00:00.000
Toms Spezialitäten 10249 1996-07-05 00:00:00.000
Hanari Carnes 10250 1996-07-08 00:00:00.000
Victuailles en stock 10251 1996-07-08 00:00:00.000
Suprêmes délices 10252 1996-07-09 00:00:00.000
Hanari Carnes 10253 1996-07-10 00:00:00.000
…………………………………………………………
……………………………………………………….
(830 row(s) affected)
Perintah SQL tersebut mengambil field CompanyName dari tabel Customers, sedangkan field OrderID dan OrderDate diambil dari tabel Orders. Perhatikan baik baik diagram pada gambar 3.2.
Kunci utama penggabungan dua tabel tersebut adalah keyword INNER JOIN dengan kriteria CustomerID. Perhatikan bahwa nama tabel juga harus dituliskan sebelum nama field CustomerID tersebut.
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
Antara nama tabel dengan nama field dibatasi dengan tanda titik (.) misalnya Orders.CustomerID. Tujuan pencantuman nama tabel tersebut adalah menghindari ambiguitas yang mengakibatkan error apabila perintah tersebut dieksekusi. Karena CustomerID tersebut terdapat di kedua tabel maka nama tabel harus dicantumkan agar dapat diidentifikasi secara unik field mana yang dimaksud.
Untuk memberikan gambaran lebih kompleks mengenai penerapan penggabungan tabel ini anda dapat memodifikasi contoh perintah yang terdapat penggunaan GROUP BY. Pada perintah tersebut anda menghitung Jumlah dan rataan produk yang terjual, tetapi hanya ditampilkan ProductID saja sedangkan nama produknya tidak terlihat karena terdapat di tabel lain.
Anda dapat menggabungan tabel Order Details tersebut dengan tabel Products yang menyimpan nama produk. Dengan demikian dapat ditampilkan baik ProductID maupun nama produknya. Tuliskan baris perintah berikut :
SELECT Products.ProductID, Products.ProductName,
SUM([Order Details].Quantity) AS Jumlah,
AVG([Order Details].Quantity) AS Rataan,
SUM(Products.UnitPrice * [Order Details].Quantity)
AS Nilai,
AVG(Products.UnitPrice * [Order Details].Quantity)
AS AVGNilai
FROM Products
INNER JOIN [Order Details]
ON Products.ProductID = [Order Details].ProductID
GROUP BY Products.ProductID, Products.ProductName
Setelah dijalankan maka akan tampak hasilnya :
ProductID ProductName Jumlah Rataan Nilai AVGNilai
----------- ---------------------------------------- ---------
1 Chai 828 21 14904.0000 392.2105
2 Chang 1057 24 20083.0000 456.4318
3 Aniseed 328 27 3280.0000 273.3333
4 Chef Anton 453 22 9966.0000 498.3000
Pada perintah diatas anda dapat melihat bahwa semua nama field diawali dengan nama tabelnya. Hal ini menyebabkan penulisan kode program menjadi panjang, tetapi sisi positifnya adalah kita dapat langsung mengetahui posisi tabel dari tiap-tiap field yang ditampilkan.
Selain itu antara tabel Customers terdapat beberapa field yang namanya sama sehingga apabila tidak dituliskan nama tabelnya berakibat error pada perintah tersebut.
LEFT JOIN dan RIGHT JOIN
Berbeda dengan INNER JOIN yang hanya menampilkan irisan data dari tabel yang digabungkan maka LEFT JOIN akan menampilkan data dari tabel yang disebutkan terlebih dahulu.
LEFT JOIN
Misalkan pada diagram gambar 3.2 diatas digunakan perintah LEFT JOIN maka apabila tabel Customers disebutkan terlebih dahulu SQL Server akan menampilkan semua nama customer yang terdapat di tabel tersebut. Semua data customer ditampilkan walaupun CustomerID nya tidak terdapat di tabel Orders.
Penggunaan praktis perintah ini misalnya anda ingin mengetahui frekuensi order semua customer baik yang telah memiliki order maupun yang belum. Untuk kebutuhan tersebut maka ditampilkan semua customer berikut data frekuensi ordernya. Perhatikan contoh perintah berikut :
SELECT Customers.CustomerID, Customers.CompanyName,
COUNT(Orders.OrderID) AS Frekuensi
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerID, Customers.CompanyName
ORDER BY COUNT(Orders.OrderID)
Karena menggunakan perintah LEFT JOIN maka semua data di tabel Customers ditampilkan seluruhnya walaupun frekuensi ordernya 0. Hasil perintah tersebut adalah :
CustomerID CompanyName Frekuensi
---------- ---------------------------------------- ----------
PARIS Paris spécialités 0
FISSA FISSA Fabrica Inter. Salchichas S.A. 0
CENTC Centro comercial Moctezuma 1
LAZYK Lazy K Kountry Store 2
GROSR GROSELLA-Restaurante 2
LAUGB Laughing Bacchus Wine Cellars 3
……………
……………
(91 row(s) affected)
Anda dapat melihat terdapat 2 customer yang frekuensi 0 tetapi tetap ditampilkan. Di akhir tampilan hasil tersebut terlihat ada 91 baris yang ditampikan. Untuk melakukan pengecekan jalankan perintah berikut :
SELECT COUNT(*) from dbo.Customers
maka hasilnya adalah :
-----------
91
(1 row(s) affected)
Artinya terdapat 91customer di tabel Customers, yaitu sama dengan jumlah baris di perintah sebelumnya. Dengan demikian memang benar bahwa LEFT JOIN telah menampilkan seluruh Customer yang berjumlah 91.
RIGHT JOIN
Perintah RIGHT JOIN merupakan kebalikan dari LEFT JOIN, yaitu menampilkan semua isi tabel yang disebutkan kedua dalam perintah join. Dalam contoh di atas apabila LEFT JOIN diganti RIGHT JOIN maka semua isi tabel Orders akan ditampilkan semuanya.
Cobalah memodifikasi perintah diatas menjadi sebagai berikut :
SELECT Customers.CustomerID, Customers.CompanyName,
COUNT(Orders.OrderID) AS Frekuensi
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerID, Customers.CompanyName
ORDER BY COUNT(Orders.OrderID)
Setelah anda jalankan perintah tersebut lihatlah perbedaaanya dengan perintah LEFT JOIN sebelumnya. Maka terlihat hanya dihasilkan 89 baris, berarti terdapat 2 customer yang CustomerID nya tidak terdapat di tabel Orders atau frekuensi ordernya = 0.
Statement INSERT
Untuk mengisikan data ke dalam suatu tabel digunakan perntah INSERT yang memiliki syntax umum sebagai berkut :
INSERT table (column list)
VALUES (value list)
Misalnya untuk mengisikan data customer baru dituliskan perintah berikut :
INSERT Customers (CustomerID, CompanyName, ContactName)
VALUES ('MJTR', 'Majuterus', 'Lisha')
Perintah tersebut mengisikan data di tabel Customers untuk tiga kolom yaitu CustomerID, CompanyName dan ContactName. Sedangkan kolom lain yang tidak diisi maka terisi dengan nilai default sesuai dengan desain tabelnya. Apabila desain tabelnya tidak mengijinkan nilai NULL maka anda harus mengisikan nilainya dalam perintah INSERT tersebut.
Apabila anda menampilkan data tabel Customers maka tampak data yang telah diisikan tersebut sebagai berikut :
CustomerID CompanyName ContactName
---------------------------------------- ---------------------
MAISD Maison Dewey Catherine Dewey MEREP Mère
Paillarde Jean Fresnière
MJTR Majuterus Lisha
MORGK Morgenstern Gesundkost Alexander Feuer
Apabila perintah INSERT digunakan untuk mengisikan seluruh kolom yang terdapat di suatu tabel maka nama kolom tidak perlu disebutkan secara eksplisit. Cukup disebutkan nilai data yang akan dimasukkan saja. Misalnya untuk mengisikan data ke tabel Shippers yang hanya terdiri dari tiga kolom dilancarkan perintah berikut :
INSERT Shippers
VALUES ('Megah Shipping', '021-55568953')
Anda mungkin bertanya mengapa VALUES yang diisikan hanya dua kolom, sedangan tabel Shippers terdiri dari 3 kolom. Jawabannya adalah karena kolom pertama yang bernama ShippersID telah disetting desainnya sebagai autonumber. Dengan demikian kolom tersebut akan terisi secara otomatis dengan angka berurut setiap terdapat data baru yang dimasukkan sehingga tidak perlu lagi diinsert secara eksplisit.
INSERT dari Tabel Lain
Pengisian tabel juga dapat menggunakan data yang diperoleh dari tabel lain. Caranya adalah dengan menggunakan perintah SELECT v berisi daftar data yang akan dimasukkan setelah perintah INSERT.
Misalnya anda ingin memasukkan data di tabel Suppliers ke dalam tabel Customers maka digunakan perintah berikut :
INSERT Customers (CustomerID, CompanyName, ContactName)
SELECT SupplierID, CompanyName, ContactName
FROM Suppliers
WHERE Country = 'USA'
Apabila anda belum melakukan perubahan apapun di tabel Suppliers maka akan terdapat 4 supplier yang diisikan ke tabel Customers.
Perintah tersebut menggunakan kriteria WHERE Country = 'USA', sehingga hanya supplier yang berada di negara USA saja yang dimasukkan ke tabel Customers.
Prinsip utama dalam penggunaan perintah tersebut adalah jumlah kolom yang akan diisi harus sama dengan kolom yang diambil dalam daftar SELECT. Dengan demikian apabila dua buah tabel memiliki jumlah kolom yang sama maka anda dapat menggunakan perintah tersebut untuk mengisikan seluruh kolom dengan perintah sederhana tanpa menyebutkan kolmnya satu per satu.
Misalkan tabel Customers dan Suppliers memiliki jumlah kolom sama dan anda ingin memasukkan semua supplier ke tabel Customers maka dapat digunakan perintah sederhana sebagai berikut :
INSERT Customers
SELECT * FROM Suppliers
Statement DELETE
Statement DELETE merupakan kebalikan perintah INSERT. Perintah ini menghapus data yang terdapat di suatu tabel. Data dihapus per record atau per baris berdasarkan kriteria tertentu.
Penentuan kriteria record mana yang akan dihapus bisa dilakukan dengan menggunakan klausa WHERE. Misalkan anda ingin menghapus data semua customer yang berada di negara France.
Syntax umum statement ini adalah sebagai berikut :
DELETE FROM table_name
WHERE Condition
Untuk menghapus data customer yang berasal dari Mexico di tabel Customers maka perintahnya adalah :
DELETE FROM Customers
where Country= 'Mexico'
Atau anda bisa juga menghapus data berdasarkan CustomerID yang merupakan primary key di tabel tersebut.
DELETE FROM Customers
where CustomerID= ‘ALFKI’
Selain menggunakan WHERE, dapat juga digabungkan dengan operator LIKE dan BETWEEN untuk membuat kriteria yang lebih fleksible. Misalnya sebagai berikut :
DELETE FROM Orders
WHERE OrderDate BETWEEN '07/01/1996' AND '07/31/1996'
Perintah tersebut akan menghapus data di tabel order yang memiliki OrderDate antara 1 Juli 1996 sampai dengan 31 Juli 1996.
Menghapus Seluruh Tabel
Apabila anda ingin mengosongkan tabel dan menghapus semua data yang ada di dalamnya maka digunakan perintah DELETE tanpa menggunakan kondisi WHERE.
Contoh berikut adalah perintah untuk mengosongkan isi tabel Products :
DELETE Products
Perintah tersebut hanya mengosongkan isi tabel saja tetapi tidak menghapus tabelnya.
Perlu diperhatikan apabila data dalam suatu tabel ternyata memiliki hubungan referential integrity dengan tabel lain maka penghapusan tersebut tidak dapat dilakukan. Mislanya apabila anda ingin menghapus data customer yang telah memiliki data order di tabel Orders, sedangakan antara kedua tabel tersebut memiliki hubungan referential integrity.
Untuk menghapus semua data di suatu tabel yang tidak memiliki hubungan referential integrity dengan tabel lain dapat digunakan perintah TRINCATE.
TRUNCATE TABLE Customers
Maka perintah tersebut akan menghapus semua data customer yang tidak memiliki hubungan dengan tabel lain.
Statement UPDATE
Apabila anda ingin mengedit atau merubah suatu data tanpa menghapusnya maka digunakan perintah UPDATE . Perintah ini juga menggunakan kondisi tertentu dengan klausa WHERE sebagaimana perintah DELETE.
Syntax umum statement UPDATE adalah sebagai berikut :
UPDATE table_name
SET Column1 = Value1, Column2 = Value2, …..
WHERE condition
Perintah ini melakukan perubahan pada kolom tertentu sebagaimana yang disebutkan dalam perintah SET. Perubahan dilakukan terhadap record yang memenuhi kriteria di klausa WHERE.
Misalkan anda ingin menaikkan harga produk sebesar 10% untuk semua barang yang memiliki CategoryID = 2, maka digunakan perintah berikut :
UPDATE Products
SET UnitPrice = UnitPrice * 1.1
WHERE CategoryID = 2
Harga barang terdapat di kolom UnitPrice sehingga kolom tersebut dikalikan dengan 1.1. Perintah tersebut akan menaikkan harga semua barang yang terdapat di tabel Products sesuai dengan kriteria CategoryID.
Selain menggunakan kriteria WHERE perintah ini juga dapat digabungkan dengan operator LIKE dan BETWEEN sebagaiman statement DELETE diatas.
Contoh berikut menggambarkan penggunaan beberapa kriteria untuk mengupdate suatu data :
UPDATE Customers
SET Country = 'Indonesia',
ContactName = 'Lisha'
WHERE City = 'Jakarta'
OR City = 'Surabaya'
Perintah diatas berguna untuk merubah nama negara menjadi Indonesia dan nama ContactName menjadi Lisha apabila kolom City berisi Jakarta atau Surabaya.
Membuat tabel (Creating tables)
Syntax
CREATE TABLE (
()
[UNIQUE] [NOT NUL] [PRIMARY KEY] [DEFAULT]
[referential_constraint_defenition>] [CHECK],
()
[UNIQUE] [NOT NULL] [PRIMARY KEY] [DEFAULT]
[referential_constraint_defenition>] [CHECK],
. . .
);
keterangan
Unique; Pada kolom tersebut tidak boleh ada data yang sama.
Not Null; tidak boleh data pada kolom tersebut bernilai null,
Unique dan Not Null; kolom tersebut dapat dijadikan primary key.
Default; nilai default yang secara otomatis akan mengisi kolom dengan data default tersebut setiap operasi insert dilakukan.
Referential_Constraint_Definition; Bila kolom tersebut merupakan foreign key terhadap tabel lain. Dengan syntax FOREIGN KEY REFERENCES
Contoh :
CREATE TABLE Pelajar (
No_Induk CHAR(8),
Nama CHAR(20),
Tgl_Lahir DATE,
Kelas CHAR(2)
);
CREATE TABLE Mata_Pelajaran(
Kode CHAR(4),
Nama CHAR(20),
Kelas CHAR(2)
);
CREATE TABLE Nilai(
No_Induk CHAR(8),
Kode CHAR(4),
Nl_Angka Number
);
0 komentar:
Posting Komentar