Microsoft SQL Server: Amik Taruna
Microsoft SQL Server: Amik Taruna
*************************************************************
REFERENSI
1
PERTEMUAN 1
INTRODUCTION TO MICROSOFT SQL SERVER
Informasi berdasarkan atas satu atau beberapa kenyataan. Dalam beberapa kasus,
kenyataan ini dapat berasal dari sesuatu yang abstrak (kualitatif), sehingga sulit
direpresantasikan dalam angka atau simbol tertentu. Padahal kelangsungan hidup suatu
badan usaha atau organisasi tergantung dari data yang spesifik (kuantitatif).
Data menjadi bernilai jika akurat dan bersifat menyeluruh untuk menjawab kebutuhan
informasi suatu badan usaha atau organisasi. Sehingga aspek penting yang harus
diperhatikan adalah bagaimana data tersebut disimpan serta bagaimana mekanisme
menggunakannya pada saat diperlukan. Sistem Manajemen Basisdata (DBMS-Database
Management Systems) menyediakan sistem penyimpanan data yang reliable dan
kemudahan menggunakan data (flexible) apabila diperlukan.
MODEL BASISDATA
Agar tidak mudah rusak, data disimpan dalam media simpan fisik (physical storage
devices). Data tersebut disimpan dengan format tertentu sesuai dengan Sistem Manajemen
Basisdata yang dipakai. Ada beberapa model basisdata, antara lain:
• Flat files
• Hierarchical
• Networked
• Relational
• Object
• Object-relational
• Document
Flat files, Hierarchical dan Networked biasanya digunakan pada komputer mainframe,
sedangkan model basisdata lainnya digunakan pada personal computer (PC). SQL Server
termasuk kategori model basisdata Relational.
(Pembahasan model basisdata tidak diperdalam karena berada diluar materi SQL Server).
MODEL RELASIONAL
Pada model relasional, data disusun dalam satu atau beberapa tabel. Setiap tabel
merupakan gabungan beberapa kolom yang memetakan atribut suatu entitas. Data dari
berbagai tabel tersebut direlasikan dengan dengan suatu hubungan logis yang dinamis.
2
Model relasional ini didasarkan atas teori relasional yang ada di Aljabar maupun Kalkulus.
Teori ini pertama kali diperkenalkan oleh Dr. E. F. Codd, seorang matematikawan dari
perusahaan IBM. Dia menulis buku “A Relational Model of Data for Large Shared Data
Banks” (Communications of the ACM, vol. 3, No. 6, June 1970). Buku ini menetapkan
aturan-aturan tentang basisdata relasional.
Semua RDBMS menggunakan bahasa tertentu yang disebut SQL (Structured Query
Language) untuk mendapatkan informasi dari suatu basisdata. SQL merupakan bagian dari
standard ANSI sejak versi ANSI SQL 86. SQL yang digunakan untuk SQL Server dinamakan
Transact SQL (T-SQL) yang mengacu pada standar ANSI SQL 99.
Catatan :
3
ARSITEKTUR SQL SERVER
Komponen utama dari arsitektur SQL Server disebut Net Library, merupakan suatu layer
yang memungkinkan SQL Server dapat membaca dari dan menulis ke beberapa protokol
jaringan (misalnya : soket TCP/IP).
Net Library pada dasarnya merupakan suatu driver yang digunakan khusus untuk
berkomunikasi melalui jaringan dengan menggunakan mekanisme interprocess
communication (IPC). Semua kode SQL Server (termasuk Net Library) berkomunikasi ke
Microsoft Win32 subsystem (Win32 API) melalui Microsoft Open Data Services (ODS). ODS
berfungsi mengatur lalu lintas jaringan yang digunakan oleh Net Library.
Net Library
4
DESAIN APLIKASI CLIENT/SERVER
5 3
4 8
7
2
1. Akses langsung melalui HTTP dengan menggunakan halaman web (HTML maupun
ASP). Pada kasus ini, gunakan SQL ISAPI extension melalui virtual directory yang
ada pada Internet Information Server (IIS). SQL server mendukung penggunaan
Xpath sebagai suatu quey melalui HTP dan XML input/Output.
2. Akses menggunakan DB-Library (Native SQL Server). Ini tidak direkomendasikan,
karena beberapa fungsi SQL Server tidak kompatibel dengan DB-Library. Untuk
akses langsung ke ODBC API – menggunakan berbagai bahasa pemrograman yang
dikehendaki. Direkomendasikan menggunakan bahasa C atau C++.
3. Akses tidak langsung ke ODBC Library melalui Remote Data Objects (RDO). RDO
hanya kompatibel untuk aplikasi sebelum ditemukannya ActveX Data Objects (ADO).
Untuk aplikasi saat ini gunakan ADO daripada RDO.
4. Akses Langsung ke OLE DB Provider. Akses ini sangat direkomendasikan karena
segala fungsionalitas SQL Server dapat digunakan dengan baik.
5. Akses tidak langsung ke OLE DB Provider menggunakan ActiveX Data Objects (ADO)
– atau ADO.Net – pengembangan terbaru dari ADO. Akses ini lebih mudah dilakukan
daripada akses langsung ke OLE DB Provider serta sesuai dengan berbagai bahasa
pemrograman termasuk Visual Basic dan ASP.Net.
6. Akses tidak langsung ke ODBC driver melalui OLE DB Provider dengan atau tanpa
ADO Library tidak direkomendasikan karena membutuhkan langkah-langkah ekstra
untuk itu. Meskipun demikian jika telah terhubung, maka segala fungsionalitas
ODBC dapat dijalankan. Sebagai jalur alternatif adalah akses ke metadata basisdata
melalui ADOX dan OLE DB menggunakan perintah-perintah Data Definition
Language (DDL). Namun ini tidak direkomendasikan karena membutuhkan keahlian
khusus.
7. Akses sebagai administrator melalui SQL-DMO (Distributed Management Objects).
DMO adalah suatu Model Object Library yang digunakan oleh SQL Server Enterprise
Manager untuk terhubung ke SQL Server. Para pengembang dapat menggunakan
fungsi-fungsi yang ada pada SQL-DMO untuk membuat aplikasi kecil untuk
administrator, yang berfungsi selayaknya SQL Server Enterprise Manager.
8. Akses sebagai administrator melalui Windows Management Instrumentation (WMI).
WMI merupakan tool yang ada pada windows 2000, digunakan secara khusus untuk
mengontrol fungsi-fungsi yang ada pada SQL Server
Tip : Untuk aplikasi baru sebaiknya gunakan ADO untuk akses ke SQL Server, karena
mendukung teknologi ADO.Net
5
PERTEMUAN 2
ELEMEN-ELEMEN TRANSACT SQL (T-SQL)
Transact SQL (T-SQL) merupakan implementasi SQL Server terhadap standard ANSI SQL
92, yang merupakan pengembangan dari struktur SQL secara umum. Misalnya; T-SQL
menambahkan penulisan control flow seperti if ... else, while, break dan continue.
T-SQL merupakan bahasa basisdata yang bersifat set-operations, artinya proses grouping
data dilakukan serentak sehingga lebih efisien dibandingkan dengan operasi baris per baris
(row by row operations).
• Gunakan huruf besar untuk semua kata kunci yang digunakan sebagai perintah-
perintah T-SQL.
• Gunakan huruf besar sebagai karakter pertama untuk nama table, termasuk
semua obyek basisdata.
• Gunakan huruf kecil untuk nama scalar, misalnya nama kolom dan variabel, dsb.
• Buatlah nama yang unik, jangan gunakan nama yang sama untuk lebih dari satu
obyek basisdata.
• Berkenaan dengan kepemilikan obyek basisdata (object ownership), database
owner (dbo) haruslah merupakan pemilik semua obyek basisdata, untuk
memudahkan pengelolaannya. Jika karena satu atau lain hal, kepemilikan obyek
basisdata ini harus dirubah, gunakan sp_changeobjectowner yang ada di system
stored procedure. Namun jika ingin merubah kepemilikan suatu basisdata,
gunakan sp_changedbowner.
Pada saat membuat basisdata maupun obyek basisdata, penulisan nama identitas
(identifier) maksimal sebanyak 128 karakter dan maksimal sebanyak 116 karakter untuk
obyek temporer (temporary object).
Berikut ini daftar kata kunci yang dipakai sebagai perintah-perintah T-SQL (T-SQL reserved
keyword).
6
COLLATE FOR OPENXML TRAN
COLUMN FOREIGN OPTION TRANSACTION
COMMIT FREETEXT OR TRIGGER
COMPUTE FREETEXTTABLE ORDER TRUNCATE
CONSTRAINT FROM OUTER TSEQUAL
CONTAINS FULL OVER UNION
CONTAINSTABLE FUNCTION PERCENT UNIQUE
CONTINUE GOTO PLAN UPDATE
CONVERT GRANT PRECISION UPDATETEXT
CREATE GROUP PRIMARY USE
CROSS HAVING PRINT USER
CURRENT HOLDLOCK PROC VALUES
CURRENT_DATE IDENTITY PROCEDURE VARYING
CURRENT_TIME IDENTITY_INSERT PUBLIC VIEW
CURRENT_TIMESTAMP IDENTITYCOL RAISERROR WAITFOR
CURRENT_USER IF READ WHEN
CURSOR IN READTEXT WHERE
DATABASE INDEX RECONFIGURE WHILE
DBCC INNER REFERENCES WITH
DEALLOCATE INSERT REPLICATION WRITETEXT
DECLARE INTERSECT RESTORE
DEFAULT INTO RESTRICT
Semua identifier yang tidak termasuk dalam ketentuan diatas, harus diapit dengan kurung
siku [ ].
DDL digunakan untuk membuat dan mengelola basisdata, termasuk obyek basisdata
(database object) seperti table, stored procedure, user defined function, trigger, view,
default, index, rule dan statistic. Perintah yang digunakan adalah :
USE Master
GO
CREATE DATABASE Products
GO
=========================================== hasilnya :
7
Contoh 2 : membuat basisdata Sales dengan pengaturan tertentu.
USE Master
GO
CREATE DATABASE Sales ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql
server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'e:\program files\microsoft sql
server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO
=========================================== hasilnya :
Contoh : membuat default dengan nama phonedflt dengan nilai ‘unknown’ pada
basisdata Pubs.
USE Pubs
GO
CREATE DEFAULT phonedflt AS 'unknown'
============================================ hasilnya
4. CREATE INDEX (untuk membuat index baru pada suatu table atau view).
Index : merupakan kata kunci (keywords) yang digunakan untuk mempercepat
proses pencarian data).
Informasi index dapat dilihat pada system table – sysindexes -.
USE pubs
CREATE INDEX auid_ind
ON authors (au_id)
GO
=========================================== hasilnya
8
5. CREATE PROCEDURE (untuk membuat stored procedure baru).
Stored Procedure : set perintah T-SQL yang dapat meminta masukan dan
mengembalikan suatu parameter yang dibuat oleh user).
Contoh : membuat rule dengan nama range_rule yang membatasi nilai yang
dimasukkan dalam suatu kolom antara 1000 - 10000 (tergantung tabel mana
yang dipakai).
Contoh : membuat statistic dengan nama names pada tabel Customers (database:
Northwind).
USE Northwind
CREATE STATISTICS names
ON Customers (CompanyName, ContactName)
WITH SAMPLE 5 PERCENT
GO
============================================ hasilnya
Contoh : membuat table sederhana dengan nama jobs pada database: Northwind
dengan 2 kolom,
Job_id : tipe data smallint, auto_increement dan primary key.
Job_desc : tipe data varchar (50), nilai default ‘jalan jalan’
USE Northwind
9
10. CREATE TRIGGER (untuk membuat trigger baru).
Trigger: merupakan suatu bentuk stored procedure khusus yang dijalankan otomatis
ketika user malakukan perubahan data pada suatu tabel.
Catatan : sekali terhapus, maka basisdata tsb. akan dihapus dari Enterprise
Manager dan media simpan fisik (file *.mdf dan _log.ldf akan terhapus). Oleh
karena itu berhati hatilah menggunakan perintah ini. Sebaiknya basisdata di
back up secara rutin untuk menjaga kemungkinan terburuk akibat rusak atau
terhapusnya suatu basisdata.
2. DROP DEFAULT (untuk menghapus satu atau beberapa default dari basisdata yang
aktif saat itu, baik yang terhubung pada suatu tabel atau tidak).
Contoh 1 : menghapus default, jika tidak tergantung pada suatu table atau user-
defined data type. Perintah berikut ini akan menghapus default dengan nama
datedflt (database: Pubs).
USE Pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'datedflt'
AND type = 'D')
DROP DEFAULT datedflt
GO
================================================= hasilnya
The command(s) completed successfully.
Contoh 2 : menghapus default yang tergantung pada suatu table atau user-defined
data type. Perintah berikut ini akan menghapus default dengan nama
phonedflt (database: Pubs) yang bergantung pada kolom phone, tabel
author.
USE Pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'phonedflt'
AND type = 'D')
BEGIN
EXEC sp_unbindefault 'authors.phone'
DROP DEFAULT phonedflt
END
GO
================================================= hasilnya
The command(s) completed successfully.
10
3. DROP FUNCTION (untuk menghapus satu atau beberapa user defined function dari
basisdata yang aktif saat itu).
4. DROP INDEX (untuk menghapus satu atau beberapa index dari basisdata yang aktif
saat itu. Perintah ini tidak dapat menghapus index yang terbentuk pada
kolom yang bersifat primary key).
Contoh : menghapus index dengan nama auid_ind pada tabel author (databaase:
Pubs)
USE Pubs
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'auid_ind')
DROP INDEX authors.auid_ind
GO
================================================ hasilnya
The command(s) completed successfully.
5. DROP PROCEDURE (untuk menghapus satu atau beberapa stored procedure dari
basisdata yang aktif saat itu).
USE Pubs
DROP PROCEDURE byroyaly
GO
================================================ hasilnya
The command(s) completed successfully.
6. DROP RULE (untuk menghapus satu atau beberapa rule dari basisdata yang aktif saat
itu).
Contoh : menghapus rule yang tergantung pada suatu table atau user-defined data
type. Perintah berikut ini akan menghapus rule dengan nama pubid_rule
(database: Pubs) yang bergantung pada kolom pub_id, tabel publisher.
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'pubid_rule'
AND type = 'R')
BEGIN
EXEC sp_unbindrule 'publishers.pub_id'
DROP RULE pubid_rule
END
GO
================================================ hasilnya
The command(s) completed successfully.
7. DROP STATISTICS (untuk menghapus statistic dalam satu group –collection - atau
beberapa collection pada tabel tertentu dari basisdata yang aktif).
11
USE Pubs
DROP STATISTICS authors.anames, titles.tnames
GO
================================================ hasilnya
The command(s) completed successfully.
8. DROP TABLE (untuk menghapus semua data dari suatu table beserta definisinya –
termasuk: index, trigger, constraint dan hak akses (permission) - dari
basisdata yang aktif atau dari basisdata yang dipilih. View dan stored
procedure yang mengacu pada table tersebut harus dihapus juga dengan
perintah DROP VIEW atau DROP PROCEDURE).
USE Pubs
DROP TABLE titles1
GO
------------------------------------------------ atau
USE Nortwind
DROP TABLE Pubs.dbo.titles1
GO
================================================ hasilnya
The command(s) completed successfully.
9. DROP TRIGGER (untuk menghapus satu atau beberapa trigger dari basisdata yang
aktif).
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'employee_insupd' AND type = 'TR')
DROP TRIGGER employee_insupd
GO
================================================ hasilnya
The command(s) completed successfully.
10. DROP VIEW (untuk menghapus satu atau beberapa view dari basisdata yang aktif)
USE Pubs
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'titles_view')
DROP VIEW titles_view
GO
================================================ hasilnya
The command(s) completed successfully.
12
USE master
GO
CREATE DATABASE Test1 ON
( NAME = Test1dat1,
FILENAME = 'c:\Program Files\Microsoft SQL
Server\MSSQL\Data\t1dat1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB )
GO
ALTER DATABASE Test1
ADD FILE
( NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL
Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB )
GO
============================================= hasilnya
The CREATE DATABASE process is allocating 5.00 MB on disk 'Test1dat1'.
The CREATE DATABASE process is allocating 1.25 MB on disk 'Test1_log'.
Extending database by 5.00 MB on disk 'Test1dat2'.
2. ALTER FUNCTION (untuk memodifikasi user defined funcdion yang telah dibuat
dengan perintah CREATE FUNCTION, tanpa merubah hak akses (permission)
serta tidak berpengaruh pada dependent function, stored procedure dan
trigger).
3. ALTER PROCEDURE (untuk memodifikasi procedure yang telah dibuat dengan perintah
CREATE PROCEDURE, tanpa merubah hak akses (permission) serta tidak
berpengaruh pada dependent stored procedure atau trigger).
4. ALTER TABLE (untuk memodifikasi definisi suatu table, menambah atau menghapus
kolom dan constraint atau mengaktifkan dan menonaktifkan constraint dan
trigger).
Contoh : membuat tabel dengan nama test_table dengan 1 kolom (kolom_a, tipe
data INT), kemudian ditambahkan 1 kolom (kolom_b, tipe data VARCHAR
(20), setiap menambah data baru diperbolehkan NULL).
5. ALTER TRIGGER (untuk memodifikasi definisi suatu trigger yang telah diBuat dengan
perintah CREATE TRIGGER).
13
DATA MANIPULATION LANGUAGE (DML)
DML merupakan perintah-perintah T-SQL yang paling sering digunakan, antara lain untuk
menampilkan, menambah merubah dan menghapus informasi dari suatu basisdata.
Perintah-perintah tsb. adalah:
SELECT : untuk menampilkan data dari basisdata berupa pemilihan terhadap baris, kolom
dari satu atau beberapa table.
Contoh : berikut ini perintah untuk menampilkan data customerid dan companyname dari
tabel Customers (database: Northwind) dengan kriteria customerid = ‘ANTON’
USE Northwind
SELECT customerid,companyname
FROM Customers
WHERE customerid = 'ANTON'
GO
=================================================== hasilnya :
customerid companyname
---------- ----------------------------------------
ANTON Antonio Moreno Taquería
(1 row(s) affected)
INSERT : untuk menambah data baru pada suatu table atau view.
Contoh : berikut ini perintah untuk menambahkan data pada tabel Customers (database:
Northwind), customerid = ACME1
companyname = ACME Publishing
contactname = Fernando
conntact title = DBA
USE Northwind
Contoh : berikut ini perintah untuk merubah contactname = Fernando menjadi Fernando
Guerrero pada tabel Customers (database: Northwind).
USE Northwind
UPDATE Customers
SET contactname = 'Fernando Guerrero'
WHERE customerid = 'ACME1'
GO
=================================================== hasilnya :
(1 row(s) affected)
14
DELETE : untuk menghapus data dari suatu table.
Contoh : berikut ini perintah untuk menghapus data pada tabel Customers (database:
Northwind), dengan kriteria customerid = ‘ACME1’
USE Northwind
DELETE Customers
WHERE customerid = 'ACME1'
GO
=================================================== hasilnya :
(1 row(s) affected)
DCL merupakan bagian dari perintah-perintah T-SQL yang digunakan untuk mengatur
keamanan basisdata (database security), dengan mengatur hak akses permission dari
masing-masing obyek basisdata. Perintah-perintah tsb. antara lain:
Contoh : berikut ini perintah memperbolehkan user1 untuk menampilkan data pada tabel
Catetgories (database: Northwind).
USE Northwind
Contoh : berikut ini perintah memperbolehkan user1 untuk membuat table pada database
Northwind.
USE Northwind
15
Untuk setiap obyek basisdata dapat diatur jenis-jenis hak aksesnya, sehingga setiap obyek
basisdata dapat memiliki hak akses yang berbeda. Hak akses tersebut antara lain :
SELECT, INSERT, UPDATE, DELETE dan EXECUTE. Sedangkan hak akses REFERENCES, hanya
berlaku jika kita ingin membuat kunci tamu (foreign key) pada suatu table.
Jenis hak akses yang lain adalah berupa pernyataan (statement), yaitu user dapat
membuat obyek-obyek basisdata serta mem-back up file basisdata (*.mdf) maupun file
catatannya (_log.ldf). Pernyataan (statement) yang dipakai untuk hak akses antara lain :
BACKUP DATABASE, BACKUP LOG, CREATE DEFAULT, CREATE FUNCTION, CREATE
PROCEDURE, CREATE RULE, CREATE TABLE, dan CREATE VIEW.
Diantara beberapa pernyataan (statement) tsb, ada satu pernyataan yang hanya boleh
dibuat pada basisdata MASTER, yaitu : CREATE DATABASE.
Contoh : berikut ini dibuat sebuah login baru (login3), kemudian menambahkan user
(user3) untuk login yang baru dibuat tsb, serta memperbolehkannya untuk
membuat basisdata baru (dengan pernyataan CREATE DATABASE).
USE Master
============================================= hasilnya :
TIP
Untuk membuat basisdata maupun obyek-obyek basisdata dapat diakses oleh seluruh user,
gunakan klausa public.
Contoh : dengan menggunakan klausa public untuk membuat tabel (CREATE TABLE) pada
database: Northwind, menyebabkan semua user dapat membuat table pada
database: Nothwind.
USE Northwind
=========================================== hasilnya :
16
PERTEMUAN 3
TIPE DATA, VARIABEL, OPERATOR DAN FLOW KONTROL
TIPE DATA
Ada 27 macam tipe data yang digunakan dalam Transact SQL (T-SQL) yang dikelompokkan
sbb:
1. Limited Character
• CHAR
Karakter dengan panjang tetap, menyimpan data s/d 8.000 karakter.
• VARCHAR
Karakter dengan panjang dapat berubah, menyimpan data s/d 8.000 karakter.
• NCHAR
Karakter Unicode dengan panjang tetap, menyimpan data s/d 4.000 karakter.
• NVARCHAR
Karakter Unicode dengan panjang dapat berubah, menyimpan data s/d 4.000
karakter.
2. Unlimited Character
• TEXT
Karakter dengan panjang dapat berubah, menyimpan data s/d 2.147.483.647
karakter.
• NTEXT
Karakter Unicode dengan panjang dapat berubah, menyimpan data s/d
1.073.741.823 karakter.
3. Binary
• BINARY
Data biner dengan panjang tetap, menyimpan data s/d 8.000 bytes.
• VARBINARY
Data biner dengan panjang dapat berubah, menyimpan data s/d 8.000 bytes.
5. Integer
• BIGINT
Nilai integer dari -2^63 s/d 2^63 – 1, menyimpan 8 bytes untuk tiap nilai.
• INT
Nilai Integer dari -2.147.483.648 s/d 2.147.483.647, menyimpan 4 bytes untuk
tiap nilai.
• SMALLINT
Nilai integer dari -32.768 s/d 32.767
• TINYINT
Nilai integer dari 0 s/d 255
• BIT
Nilai integer dengan hanya 2 kemungkinan nilai, yaitu 0 atau 1.
6. Aproximate Numeric
• REAL
Angka presisi 1 s/d 7 digit, menyimpan 4 bytes setiap nilai.
• FLOAT
Angka presisi 8 s/d 15 digit, menyimpan 8 bytes setiap nilai.
7. Exac Numeric
• DECIMAL atau NUMERIC
Angka dengan presisi tetap, menyimpan data s/d 17 bytes
17
8. Date and Time
• DATETIME
Tanggal dan Waktu dari 1 Januari 1753 s/d 31 Desember 9999. Akurasi waktu
sampai dengan 1/300 detik.
• SMALLDATETIME
Tanggal dan Waktu dari 1 Januari 1900 s/d 6 Juni 2079. Akurasi waktu sampai
dengan menit.
9. Currency
• MONEY
Nilai mata uang dari -922.337.203.685.477,5808 s/d 922.337.203.685.477,5807
• SMALLMONEY
Nilai mata uang dari -214.748,3648 s/d 214.748,3647
10. Other
• UNIQUEIDENTIFIER
Berkaitan dengan tipe data sistem (NEWID()). Jika menggunakan tipe data ini,
anda dapat menggunakan NEWID() sebagai nilai default, menyimpan 16 byte
GUID.
Contoh : USE Northwind
• TABLE
Hampir sama seperti table, menyimpan data dalam bentuk baris (row) bersifat
sementara (temporary storage).
• SQL_VARIANT
Dapat menyimpan hampir semua nilai (integer, character, numeric, dll) kecuali
TEXT, NTEXT, IMAGE, TIMESTAMP dan SQL_VARIANT , meyimpan data s/d 8.016
bytes. Tipe data ini hampir sama dengan tipe data Variant pada Visual Basic.
• CURSOR
Hanya digunakan untuk nilai variabel dan nilai output parameter stored procedure.
Kita dapat membuat tipe data sendiri dengan menggunakan system stored procedure yang
disebut sp_addtype.
Contoh : membuat tipe data untuk menyimpan data no telpon (boleh NULL)
USE Northwind
Type added.
18
Informasi tentang UDDT tersimpan pada system table systypes, yang ada di semua
basisdata. Sedangkan untuk menampilkan properties UDDT yang telah dibuat, gunakan
system stored procedure sp_help seperti contoh berikut ini. Untuk menghapusnya gunakan
sp_droptype.
USE Northwind
TIP
UDDT tersimpan di database tertentu pada saat dibuat. Jika kita menginginkan semua user
juga dapat menggunakan UDDT yang kita buat, maka UDDT harus dibuat di database
Model. Karena semua database yang dibuat, merupakan turunan dari database Model.
Memilih tipe data yang sesuai dengan jenis data yang akan diolah merupakan sesuatu yang
penting. Oleh karena itu perhatikan hal-hal sbb :
1. Untuk data yang berbentuk teks, gukanan tipe data yang sesuai (Limited Character
atau Unlimited Character) dan pastikan bahwa panjangnya juga sesuai.
Misalnya : untuk menyimpan informasi kode pos, kita memilih tipe data
VARCHAR(100). Meskipun tipe data ini dapat menampung informasi kode pos, namun
terjadi pemborosan media simpan. Karena kode pos maksimal hanya berisi 5
karakter. Untuk data yang jumlahnya sedikit hal ini tidak begitu terasa, namun
bagaimana untuk data yang jumlahnya besar? Tentu akan menurunkan kinerja
database yang kita buat.
2. Untuk data yang berbentuk angka, carilah nilai minimum dan maksimumnya. Hal ini
untuk menghindari penggunaan tipe data yang terlalu besar sehingga menimbulkan
pemborosan media simpan.
Catatan:
Jika panjang data untuk tipe data karakter (CHAR, NCHAR, VARCHAR atau NVARCHAR)
atau tipe data biner (BINARY atau VARBINARY) tidak ditentukan, maka panjangnya
dianggap 1 oleh SQL Server. Meskipun pada saat menyimpan data tidak terjadi error,
namum data yang tersimpan hanya karakter pertama saja.
Contoh :
USE Northwind
19
3. Berhati-hatilah jika mendefinisikan panjang tipe data, apakah menggunakan panjang
yang tetap (fixed length) atau dapat berubah (variable length). Sebagai ilustrasi
perhatikan contoh berikut ini:
USE Northwind
Jika kolom nama diisi “Paimo” dan alamat diisi “Leces”, maka:
• SQL Server hanya menggunakan 5 byte untuk menyimpan “Paimo”, karena tipe
datanya adalah VARCHAR (variable length).
• SQL Server menggunakan 50 byte untuk menyimpan “Leces”, karena tipe datanya
adalah CHAR (fixed length).
4. Jika ingin menyimpan data yang lebih besar dari 8.000 byte, gunakan tipe data TEXT,
NTEXT atau IMAGE yang dapat menyimpan data s/d 2 GB. Namun untuk mengelola
data tsb. harus menggunakan perintah-perintah tertentu (WRITETEXT, READTEXT dan
UPDATETEXT).
TIP :
Perintah-perintah DML dapat juga digunakan untuk mengelola data tsb. namun hanya
sebagian data saja yang dapat diakses (dengan menggunakan fungsi SUBSTRING).
6. Tipe data TABLE tidak dapat digunakan sebagai tipe data suatu kolom dalam tabel,
karena tidak mungkin ada tabel di dalam tabel. Tipe data ini digunakan sebagi tabel
sementara (temporary table) karena hanya tersimpan di memory (lebih cepat diakses
daripada tabel sebenarnya yang tersimpan di media simpan – hard disk -). Sebagfai
ilustrasi perhatikan contoh berikut yang membuat sebuah variabel dengan tipe data
TABLE, kemudian ditambahkan 2 data baru sbb:
Contoh :
USE Northwind
nama alamat
-------------------- --------------------
Andi Probolinggo
Indra Leces
(2 row(s) affected)
7. Meskipun tipe data TIMESTAMP dan ROWVERSION identik, gunakan tipe data ROWVERSION
untuk keperluan yang tepat daripada menggunakan TIMESTAMP. Karena Microsoft
akan merubah tipe data TIMESTAMP berkenaan dengan standar ANSI SQL 92, dimana
tipe data TIMESTAMP digunakan untuk menyimpan data tanggal dan waktu.
20
VARIABEL
Variabel lokal dalam T-SQL digunakan di stored procedure, user defined function, trigger
dan script. Untuk definisi variabel gunakan perintah DECLARE.
Pada saat didefinisikan, variabel bernilai secara default bernilai NULL. Gunakan perintah SET
atau SELECT. Perhatikan contoh berikut:
(1 row(s) affected)
Nilai variabel dapat juga diambilkan dari perintah query. Perhatikan contoh berikut:
USE Northwind
(1 row(s) affected)
Variabel yang diawali dengan tanda @@ menunjukkan variabel global system function.
Variabel seperti ini tidak dapat kita ubah nilainya, karena digunakan oleh SQL Server untuk
tujuan tertentu. Berikut ini daftar system funtion yang diawali dengan @@.
SELECT @@VERSION
GO
============================================= hasilnya
Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
Aug 6 2000 00:57:48
Copyright (c) 1988-2000 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
(1 row(s) affected)
21
OPERATOR
Contoh :
SELECT 8/4
SELECT 9%4
SELECT -7
GO
================================================== hasilnya
-----------
2
(1 row(s) affected)
-----------
1
(1 row(s) affected)
-----------
-7
(1 row(s) affected)
Operator perbandingan dapat digunakan untuk semua tipe data kecuali TEXT, NTEXT
dan IMAGE.
Contoh :
USE Northwind
SELECT employeeid, lastname, firstname
FROM Employees
WHERE employeeid <= 3
GO
================================================== hasilnya
employeeid lastname firstname
----------- -------------------- ----------
1 Davolio Nancy
2 Fuller Andrew
3 Leverling Janet
(3 row(s) affected)
22
Contoh :
USE Northwind
(1 row(s) affected)
Contoh :
USE Northwind
(3 row(s) affected)
Contoh :
USE Northwind
(3 row(s) affected)
23
Contoh :
USE Northwind
firstname lastname
---------- --------------------
Anne Dodsworth
(1 row(s) affected)
firstname lastname
---------- --------------------
Michael Suyama
(1 row(s) affected)
Contoh :
USE Northwind
firstname lastname
---------- --------------------
Janet Leverling
Steven Buchanan
(2 row(s) affected)
firstname lastname
---------- --------------------
Nancy Davolio
(1 row(s) affected)
24
• Simbol : + (menggabungkan string)
Contoh :
(1 row(s) affected)
(1 row(s) affected)
FLOW KONTROL
Flow kontrol digunakan untuk mengontrol aliran eksekusi kode program dalam T-SQL. Ada
beberapa macam flow kontrol, yaitu:
1. IF … ELSE
Contoh :
USE Northwind
2. RETURN
Perintah ini digunakan untuk keluar dari script atau stored procedure. Jika digunakan
pada stored procedure, RETURN menunjukkan nilai parameter.
Contoh :
PRINT 'Kalimat Pertama'
RETURN
PRINT 'Kalimat Kedua'
GO
================================================= hasilnya
Kalimat Pertama
25
3. WAITFOR
Digunakan untuk :
• Memerintahkan SQL Server menunggu sampai jam yang ditentukan.
Syntax : WAITFOR TIME ‘jam’
• Memerintahkan SQL Server menunggu sampai waktu yang ditentukan.
Syntax : WAITFOR DELAY ‘waktu’
Contoh :
WAITFOR TIME '10:25:00'
SELECT getdate()
WAITFOR DELAY '00:00:10'
SELECT getdate()
GO
========================================== hasilnya
28/09/2007 10:25:00
(1 row(s) affected)
------------------------------------------------------
28/09/2007 10:25:10
(1 row(s) affected)
4. WHILE
Contoh :
DECLARE @a INT, @b INT, @hasil INT
SET @a = 3
SET @b = 4
SET @hasil = 0
WHILE @b > 0
BEGIN
SET @hasil = @hasil + @a
SET @b = @b - 1
END
SELECT @hasil
GO
================================================== hasilnya
12
(1 row(s) affected)
5. BREAK
Perintah ini digunakan di dalam pernyataan WHILE, untuk keluar dari perulangan.
6. CONTINUE
Sama seperti BREAK, digunakan untuk melanjutkan perulangan WHILE dari awal.
Contoh :
DECLARE @hitung INT
SET @hitung = 0
WHILE @hitung < 10
BEGIN
IF @hitung = 3
BREAK
SET @hitung = @hitung + 1
PRINT 'Looping ke '+ CAST(@hitung AS VARCHAR(10))
CONTINUE
PRINT 'Tidak dijalankan'
END
PRINT 'Selesai looping'
GO
================================================ hasilnya
Looping ke 1
Looping ke 2
Looping ke 3
Selesai looping
26
7. GOTO
Perintah ini mengarahkan SQL Server untuk menjalankan perintah tertentu. Perintah
ini sangat berguna untuk menangani kesalahan program (error handling).
Contoh :
USE Northwind
IF NOT EXISTS (SELECT * FROM Suppliers)
GOTO error1
GOTO selesai
error1:
PRINT 'Tabel Supplier tidak ada data'
selesai:
PRINT 'Program selesai dijalankan'
================================================ hasilnya
Batch
Merupakan satu atau beberapa perintah SQL Server yang diakhiri dengan pernyataan GO.
Batch dianggap sebagai satu unit program kecil (hampir seperti stored procedure). Namun
ada beberapa perintah yang tidak dapat ditulis dua kali dalam satu batch, yaitu CREATE
DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER, dan CREATE VIEW.
Script
Merupakan perintah-perintah SQL Server yang tersusun dari satu atau beberapa batch.
Srcipt dapat digunakan untuk menyimpan schema dari basisdata dalam satu file.
27
PERTEMUAN 4
TABLE
MEMBUAT TABLE
SQL Server dapat menampung s/d 2 milyar table dalam satu database, yang dalam setiap
table-nya terdapat s/d 1024 kolom/field. Ukuran table dan banyaknya baris/record yang
dapat disimpan tergantung dari kapasitas media simpannya (hard disk). Kapasitas
penyimpanan data per baris/record maksimal sebanyak 8060 byte.
Di dalam SQL Server ada 2 jenis tabel yang dapat dibuat, yaitu tabel permanen dan tabel
sementara. Tabel permanen adalah tabel yang tersimpan dalam media simpan (hard disk),
sedangkan tabel sementara adalah tabel yang dibuat di dalam memory.
CREATE TABLE
[ database_name.[ owner ] . | owner. ] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]
----------------------------------------------------------------------
28
< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}
1. Tabel nasabah.
2. Tabel cabang_bank
3. Tabel bagian
4. Tabel kota
29
MEMBUAT TABEL DENGAN CONSTRAINT
• Domain Constraint
Data yang dimasukkan dalam kolom/field harus sesuai dengan kriteria yang kita
inginkan (validasi data).
Yang termasuk constraint ini adalah FOREIGN KEY, CHECK dan DEFAULT.
• Entity Constraint
Data yang ada pada satu baris/record tidak boleh ada pada baris/record yang lainnya.
Jika kita mendefinisikan suatu Referential Integrity, SQL Server akan mencegah user
untuk :
Menambah baris/record pada satu tabel yang terhubung dengan relationship,
jika data tsb. tidak ada pada tabel master.
Merubah nilai pada tabel master, sehingga baris/record pada tabel yang lain
manjadi “yatim piatu”.
Menghapus baris/record pada tabel master, jika pada tabel lainnya terdapat
baris/record yang berhubungan.
Contoh :
Berikut ini adalah Referential Integrity yang terbentuk karena adanya relationship
antara tabel sales dan tabel titles. Relaionship yang dimaksud adalah antara
title_id (Foreign Key) pada tabel sales dan title_id (Primary Key) pada tabel
titles. Perhatikan gambar berikut :
30
CONSTRAINT CLASS
Contoh :
USE Northwind
CREATE TABLE tes (
id_tes INT PRIMARY KEY
)
GO
============================================== hasilnya
The command(s) completed successfully.
Contoh :
CREATE TABLE customer (
cust_id INT NOT NULL IDENTITY PRIMARY KEY,
cust_name VARCHAR(50) NOT NULL
)
Perintah REFERENCES pada tabel Orders diatas merupakan setting referential default
(NO ACTION), sehingga perintah tsb. dapat juga ditulis sbb :
Maka :
Kita tidak dapat menambah cust_id baru pada tabel Orders yang tidak ada pada
tabel Customer, karena dibatasi oleh klausa ON UPDATE NO ACTION. Sehingga akan
menimbulkan error.
Klausa ON DELETE akan mengontrol data yang akan dihapus.
• NO ACTION
Jika kita menghapus data langsung pada tabel Orders akan menimbulkan error.
• CASCADE
Data (cust_id) yang dihapus melalui tabel Customer, maka semua cust_id
pada tabel Orders yang bersesuaian akan ikut terhapus.
31
3. UNIQUE Constraint (ALTERNATE KEY)
Pada saat desain tabel, dimungkinkan ada beberapa kolom/field yang memiliki nilai
unik (tidak ada duplikasi data – disebut Candidate Key) yang salah satunya bisa
dijadikan sebagai Primary Key. Kolom/field yang tidak dijadikan sebagai Primary Key
(disebut Alternate Key) dapat dijadikan index dengan memberikan batasan UNIQUE.
Dalam satu tabel hanya boleh ada 1 Primary Key, namun bisa terdiri dari > 1
Alternate Key yang dijadikan index dengan memberikan batasn UNIQUE.
Contoh :
4. CHECK Constraint
CHECK Constraint memungkinkan kita untuk memberikan batasan tertentu pada suatu
kolom/field, sehingga data yang diterima hanyalah data yang benar-benar sesuai
dengan kriteria yang kita tentukan.
Contoh :
5. DEFAULT Constraint
DEFAULT akan menambahkan nilai tertentu ke dalam kolom/field yang tidak
didefinisikan melalui perintah INSERT. Nilai tersebut dapat kita tentukan dengan
menggunakan DEFAULT Constraint pada saat pembuatan (atau modifikasi) tabel.
Contoh :
1. Tabel rekening.
32
2. Tabel rekening_nasabah
3. tabel transaksi
Kita dapat merubah struktur tabel yang telah dibuat dengan menggunakan perintah ALTER
TABEL. Perintah ini dapat digunakan untuk menambah kolom/field baru, menghapus
kolom/field, merubah struktur kolom/field (misalnya: merubah tipe data, ukuran, dsb),
menambahkan Constaint baru, menghapus Constraint, Disable/Enable Constraint dan
Trigger.
Syntax :
---------------------------------------------------------------------
33
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ (seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ < column_constraint > ] [ ...n ]
Menambah Kolom/field
Syntax :
ALTER TABLE nama_tabel ADD nama_kolom tipe_data [NULL|NOT NULL]
USE Amik
ALTER TABLE mhs ADD hobby VARCHAR(20) NULL
GO
Menghapus kolom/field
Syntax :
ALTER TABLE nama_tabel DROP COLUMN nama_kolom
USE Amik
ALTER TABLE mhs DROP COLUMN alamat,hobby
GO
34
Merubah struktur kolom/field
Syntax :
ALTER TABLE nama_tabel ALTER COLUMN nama_kolom tipe_data_baru [NULL|NOT
NULL]
USE Amik
ALTER TABLE mhs ALTER COLUMN hobby VARCHAR(30) NULL
GO
USE Amik
ALTER TABLE mhs ADD alamat VARCHAR(20) NOT NULL CONSTRAINT cons_alamat
DEFAULT ‘Probolinggo’
GO
Menghapus Constraint
Syntax :
ALTER TABLE nama_tabel DROP nama_constraint
USE Amik
ALTER TABLE mhs DROP Adflt_alamat
GO
Disable Constarint
Syntax :
ALTER TABLE nama_tabel NOCHECK CONSTRAINT nama_constraint
Enable Constraint
Syntax :
ALTER TABLE nama_tabel CHECK CONSTRAINT nama_constraint
Contoh:
ALTER TABLE bagian ADD no_telp VARCHAR(15) NULL CONSTRAINT cek_telp CHECK
(no_telp LIKE '([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9]')
35
MENGHAPUS TABLE
Untuk menghapus satu atau beberapa view gunakan perintah DROP TABLE
Contoh :
USE Pubs
36
PERTEMUAN 5
VIEW
View pada hakekatnya merupakan suatu query untuk menampilkan data (dengan perintah
SELECT) yang tersimpan dengan nama tertentu pada database. Sehingga jika kita ingin
menampilkan data yang sama, cukup memanggil nama view ybs.
View sering disebut dengan virtual table (tabel semu), karena view tidak menyimpan data.
Data yang ditampilkan oleh view berasal dari satu atau beberapa tabel yang disebut base
tables.
View hanya dapat dibuat pada database tertentu, artinya base tables yang digunakan harus
berasal dari database yang sama. Sebuah view dapat menampilkan s/d 1.024 kolom/field.
FUNGSI VIEW
MEMBUAT VIEW
CREATE VIEW [ < database_name > . ] [ < owner > . ] view_name [ ( column [
,...n ] ) ]
[ WITH < view_attribute > [ ,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]
------------------------------------------------------------------
Contoh : buat view untuk menampilkan data pada tabel stores (database : Pubs) dengan
kriteria state=CA
USE Pubs
GO
37
---------------------------------------------------- hasilnya
(3 row(s) affected)
Suatu view dapat digunakan untuk membuat view lagi (nesting) dan view yang baru
terbentuk dapat juga digunakan untuk membuat view lagi (nesting), dst s/d 32 level
(maks).
VIEW PROPERTIES
• sp_help
Untuk menampilkan metadata suatu view.
USE Pubs
EXEC sp_help stores_CA
GO
----------------------------------------------------- hasilnya
Name Owner Type Created_datetime
------------ ----------- ----------- -----------------------
stores_CA dbo view 19/10/2007 15:24:52
RowGuidCol
-------------------------------------------------------------
No rowguidcol column defined.
38
• sp_helptext
Menampilkan definisi (source) pada suatu view.
Contoh :
USE Pubs
EXEC sp_helptext stores_CA
GO
--------------------------------------------------- hasilnya
Text
------------------------------------------------------
CREATE VIEW stores_CA
AS
SELECT * FROM stores WHERE state='CA'
• sp_depends
Menampilkan base table yang digunakan pada suatu view.
Contoh :
USE Pubs
EXEC sp_depends stores_CA
GO
-------------------------------------------------- hasilnya
In the current database, the specified object references the following:
• information_schema.views
Menampilkan metadata dari suatu view.
Contoh :
USE Pubs
SELECT * FROM INFORMATION_SCHEME.VIEWS WHERE table_name='stores_CA'
GO
---------------------------------------------------- hasilnya
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION
CHECK_OPTION IS_UPDATABLE
------------ ----------------- ----------- ----------------------- -----
------- ------------
Pubs dbo stores_CA CREATE VIEW stores_CA
AS
SELECT * FROM stores WHERE
state='CA'
NONE NO
(1 row(s) affected)
• sp_refreshview
Jika kita membuat view dengan perintah SELECT *, kemudian menambahkan
kolom/field baru pada base table nya, maka definisi view tsb. tidak akurat lagi. Untuk
itu gunakan sp_refreshview untuk mengupdate definisi view tsb.
Contoh :
USE Pubs
ALTER TABLE stores ADD status CHAR(2) NULL
GO
EXEC sp_depends stores_CA
GO
EXEC sp_refreshview stores_CA
GO
EXEC sp_depends stores_CA
GO
39
--------------------------------------------------- hasilnya
In the current database, the specified object references the following:
Name type updated selected column
------------ ----- ---------- ----------- -----------------
dbo.stores user table no yes city
dbo.stores user table no yes state
dbo.stores user table no yes zip
dbo.stores user table no yes stor_id
dbo.stores user table no yes stor_name
dbo.stores user table no yes stor_address
VIEW OPTION
• WITH ENCRYPTION
Definisi (source) suatu view tidak dapat dilihat oleh user.
Contoh :
USE Pubs
GO
• WITH SCHEMABINDING
Mengikat view dengan base table, sehingga base table tidak dapat dihapus begitu saja
(karena masih terkait dengan view ybs).
Contoh :
USE tes
GO
40
• WITH CHECK OPTION
Kita juga dapat memodifikasi data melalui view, namun hanya satu base table yang
dapat diupdate (kita tidak dapat mengupdate data sekaligus pada view dengan
banyak base table)
USE tes
GO
(4 row(s) affected)
(1 row(s) affected)
(4 row(s) affected)
USE tes
GO
(4 row(s) affected)
Server: Msg 550, Level 16, State 1, Line 1
The attempted insert or update failed because the target view either
specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK
OPTION and one or more rows resulting from the operation did not qualify
under the CHECK OPTION constraint.
The statement has been terminated.
41
MODIFIKASI VIEW
ALTER VIEW [ < database_name > . ] [ < owner > . ] view_name [ ( column [
,...n ] ) ]
[ WITH < view_attribute > [ ,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]
Pada saat memodifikasi view, definisi (source) harus ditulis ulang dan beberapa OPTION
yang sudah didefinisikan juga ditulis ulang. Karena SQL Server akan menimpa (overwrite)
definisi (source) view yang lama dengan definisi (source) view yang baru.
Contoh :
USE tes
GO
MENGHAPUS VIEW
Untuk menghapus satu atau beberapa view gunakan perintah DROP VIEW
Contoh :
USE Pubs
42
PERTEMUAN 6
QUERY I
SELECT Statement
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Klausa SELECT
Syntax :
USE northwind
(3 row(s) affected)
USE northwind
(3 row(s) affected)
43
Contoh 3 : Menampilkan data dengan konstanta tertentu pada tabel shippers.
USE northwind
SELECT 'Nama Perusahaan : ' + CompanyName + ' -- ' + Phone FROM shippers
GO
-------------------------------------------------- hasilnya
Nama Perusahaan : Speedy Express -- (503) 555-9831
Nama Perusahaan : United Package -- (503) 555-3199
Nama Perusahaan : Federal Shipping -- (503) 555-9931
(3 row(s) affected)
USE northwind
• [ ALL | DISTINCT ]
Klausa DISTINCT akan menampilkan data tunggal (data kembar akan ditampilkan satu
kali). Klausa ALL merupakan klausa default.
Contoh :
USE northwind
SELECT ALL title FROM employees
GO
SELECT DISTINCT title FROM employees
GO
-------------------------------------------- hasilnya
title
------------------------------
Sales Representative
Vice President, Sales
Sales Representative
Sales Representative
Sales Manager
Sales Representative
Sales Representative
Inside Sales Coordinator
Sales Representative
(9 row(s) affected)
title
------------------------------
Inside Sales Coordinator
Sales Manager
Sales Representative
Vice President, Sales
(4 row(s) affected)
44
• [ TOP n [ PERCENT ] [ WITH TIES ] ]
TOP n
Hanya n data pertama yang ditampilkan. n merupakan nilai integer 0 s/d
4294967295.
TOP n PERCENT
Hanya n persen data pertama yang ditampilkan. n merupakan nilai integer 0 s/d 100.
WITH TIES
Hanya dapat digunakan jika berpasangan dengan TOP n atau TOP n PERCENT dan
ORDER BY.
Jika baris tarakhir terdapat data yang sama dalam suatu kolom, maka data tersebut
akan ditampilan semua.
Contoh :
USE Northwind
SELECT EmployeeID, LastName, FirstName, Title
FROM employees
GO
(9 row(s) affected)
(3 row(s) affected)
(8 row(s) affected)
45
KOLOM ALIAS
Alias berfungsi untuk merubah tampilan nama kolom/field. Alias diperlukan karena :
• Dimungkinkan ada nama kolom/field yang sama pada saat kita menampilkan data dari
banyak tabel. Sehingga kita dapat membedakan kolom/field tsb.
• Kadangkala kita melakukan perhitungan terhadap suatu kolom/field. SQL Server tidak
akan memproses perhitungan tsb. jika kolom/field yang dihitung tidak menggunakan
alias.
Klausa AS bersifat opsional (bisa ditulis bisa tidak). Panjang alias yang diperbolehkan s/d
128 karakter. Jika alias terdapat spasi, gunakan tanda petik.
Contoh :
USE Northwind
Klausa INTO
Digunakan untuk membuat tabel baru beserta datanya.
Syntax :
[ INTO new_table ]
USE pubs
46
Klausa FROM
Mendefinisikan tabel-tabel yang dipakai sebagai acuan untuk menampilkan data.
Syntax :
USE Pubs
USE Northwind
47
TABLE ALIAS
Klausa AS bersifat opsional (bisa ditulis bisa tidak). Panjang alias yang diperbolehkan s/d
128 karakter. Jika alias terdapat spasi, gunakan tanda petik.
Contoh :
USE Pubs
Klausa WHERE
Digunakan untuk membatasi hasil query dengan kriteria yang diinginkan.
Syntax :
Contoh : menampilkan lastname, firstname dan hiredate dari karyawan yang tinggal di
Seattle.
USE Northwind
48
Contoh 1 : Daftar karyawan yang tinggal di luar kota London.
USE Northwind
USE Northwind
Contoh 3 : Daftar karyawan yang tidak tinggal di Seattle, Redmond atau Tacoma
USE Northwind
Contoh 4 : Daftar karyawan yang mulai bekerja antara 1/1/1993 dan 31/12/1993.
USE Northwind
49
Contoh 5 : Daftar order yang diterima tanggal 4/7/1996.
USE Northwind
USE Northwind
(9 row(s) affected)
50
PERTEMUAN 7
QUERY II
SELECT Statement
Syntax :
FUNGSI AGREGAT
Salah satu fungsi SQL adalah kemampuan untuk dapat menyajikan ringkasan data yang
tersimpan di database. Dalam T-SQL fungsi tersebut dikenal dengan Fungsi Agregat
(aggregate function).
Fungsi Keterangan
Agregat
AVG Untuk mencari nilai rata-rata dalam suatu kolom/field.
COUNT Untuk menghitung jumlah baris/record dalam sebuah tabel. Nilai yang
dihasilkan bertipe INT.
COUNT_BIG Untuk menghitung jumlah baris/record dalam sebuah tabel. Nilai yang
dihasilkan bertipe BIGINT.
MAX Untuk menampilkan nilai terbesar dalam suatu kolom/field.
MIN Untuk menampilkan nilai terkecil dalam suatu kolom/field.
SUM Untuk menjumlahkan nilai pada suatu kolom/field (tipe data harus berupa
integer).
51
Contoh 1 : menampilkan rata-rata stok barang, pada perusahaan Northwind
USE Northwind
SELECT AVG(unitsinstock)
FROM Products
GO
---------------------------------------------- hasilnya
40.00
(1 row(s) affected)
USE Northwind
SELECT COUNT(*)
FROM Employees
GO
--------------------------------------------- hasilnya
9.00
(1 row(s) affected)
USE Northwind
SELECT MAX(unitprice)
FROM Products
GO
--------------------------------------------- hasilnya
$263.50
(1 row(s) affected)
USE Northwind
SELECT MIN(birthdate)
FROM Employees
GO
------------------------------------------- hasilnya
9/19/1937 12:00:00 AM
(1 row(s) affected)
USE Northwind
SELECT SUM(unitsinstock)
FROM Products
GO
------------------------------------------- hasilnya
3,119.00
(1 row(s) affected)
USE Northwind
SELECT COUNT(DISTINCT title)
FROM Employees
GO
------------------------------------------ hasilnya
4,00
(1 row(s) affected)
52
Klausa GROUP BY
Digunakan untuk mengelompokkan data kembar dalam suatu field. Jika dalam perintah
SELECT menggunakan fungsi agregat, maka berfungsi untuk menghitung ringkasan masing-
masing kelompok.
Syntax :
USE Northwind
SELECT CategoryID, AVG(UnitPrice) "Harga Rata2"
FROM Products
GROUP BY CategoryID
GO
------------------------------------------ hasilnya
CategoryID Harga Rata2
----------- ---------------------
1.00 $37.98
2.00 $23.06
3.00 $25.16
4.00 $28.73
5.00 $20.25
6.00 $54.01
7.00 $32.37
8.00 $20.68
(8 row(s) affected)
USE Northwind
SELECT country, COUNT(*) AS [number of customers]
FROM Customers
WHERE country IN ('Spain','Venezuela')
GROUP BY country
GO
--------------------------------------------------- hasilnya
country number of customers
--------------- -------------------
Spain 5.00
Venezuela 4.00
(2 row(s) affected)
USE Northwind
SELECT CategoryID, AVG(UnitPrice) Rata2
FROM Products
WHERE CategoryID BETWEEN 2 AND 4
GROUP BY CategoryID
GO
---------------------------------------------- hasilnya
CategoryID Rata2
----------- ---------------------
2.00 $23.06
3.00 $25.16
4.00 $28.73
(3 row(s) affected)
---------------------------------------------------------
53
USE Northwind
SELECT CategoryID, AVG(UnitPrice) Rata2
FROM Products
WHERE CategoryID BETWEEN 2 AND 4
GROUP BY ALL CategoryID
GO
---------------------------------------------- hasilnya
CategoryID Rata2
----------- ---------------------
1.00 NULL
2.00 $23.06
3.00 $25.16
4.00 $28.73
5.00 NULL
6.00 NULL
7.00 NULL
8.00 NULL
(8 row(s) affected)
• ROLLUP
Klausa ROLLUP akan menampilkan ringkasan kolom/field pertama yang
dikelompokkan. Ringkasan ini ditandai dengan klausa NULL.
• CUBE
Klausa CUBE akan menampilkan ringkasan semua kolom/field yang dikelompokkan.
Ringkasan ini ditandai dengan klausa NULL.
Contoh :
USE Northwind
CREATE TABLE Stok (
nama VARCHAR(10),
supplier VARCHAR(10),
jumlah INT )
54
nama supplier Total
---------- ---------- -----------
Item 1 Sup A 10.00
Item 1 Sup B 4.00
Item 1 NULL 14.00
Item 2 Sup A 20.00 WITH CUBE
Item 2 Sup B 8.00
Item 2 NULL 28.00
NULL NULL 42.00
NULL Sup A 30.00
NULL Sup B 12.00
(9 row(s) affected)
Klausa HAVING
Klausa HAVING berguna untuk membatasai hasil query, seperti halnya klausa WHERE. Urutan
evaluasinya adalah WHERE – GROUP BY – HAVING.
USE Northwind
SELECT country, COUNT(*) AS [number of customers]
FROM Customers
GROUP BY country
HAVING COUNT(*) > 5
GO
----------------------------------------------------- hasilnya
country number of customers
--------------- -------------------
Brazil 9.00
France 11.00
Germany 11.00
UK 7.00
USA 13.00
(5 row(s) affected)
Klausa ORDER BY
Klausa ORDER BY digunakan untuk mengurutkan hasil query. Pengurutan dilakukan naik
dari kecil ke besar (ASC) atau turun dari besar ke kecil (DESC).
USE Northwind
SELECT lastname naik, firstname turun
FROM Employees
ORDER BY lastname ASC, firstname DESC
GO
------------------------------------------------------- hasilnya
naik turun
-------------------- ----------
Buchanan Steven
Callahan Laura
Davolio Nancy
Dodsworth Anne
Fuller Andrew
King Robert
Leverling Janet
Peacock Margaret
Suyama Michael
(9 row(s) affected)
55
Contoh 2 : Menampilkan harga barang > 20, diurutkan menurun.
USE Northwind
SELECT ProductName, UnitPrice
FROM Products
WHERE UnitPrice > 20
ORDER BY 2 DESC
GO
---------------------------------------------------- hasilnya
ProductName UnitPrice
---------------------------------------- ---------------------
Côte de Blaye $263.50
Thüringer Rostbratwurst $123.79
Mishi Kobe Niku $97.00
... dst
(37 row(s) affected)
Klausa COMPUTE
Syntax:
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM }
( expression ) } [ ,...n ]
[ BY expression [ ,...n ] ]
]
menggunakan COMPUTE
min
==========
$9.00
avg
==========
$21.88
max
===========
10.00
(5 row(s) affected)
56
menggunakan COMPUTE BY
min
==========
$9.00
avg
==========
$15.00
max
===========
0.00
min
==========
$19.50
avg
==========
$28.75
max
===========
10.00
(6 row(s) affected)
Klausa FOR
Syntax :
Keterangan :
• BROWSE
Menampilkan data pada mode cursor (temporary).
57
--------------------------------------------- hasilnya
ProductName UnitPrice
---------------------------------------- ---------------------
Chai $18.00
Chang $19.00
Aniseed Syrup $10.00
... dst
• XML
Menampilkan data dengan format XML (eXtensible Markup Language).
Contoh :
(1 row(s) affected)
AUTO : Menampilkan hasil query dalam format nested XML. Setiap kolom
dianggap sebagai suatu elemen XML.
Contoh :
USE Northwind
SELECT TOP 2 a.au_id, a.au_lname, t.title_id
FROM authors a, titleauthor ta, titles t
WHERE a.au_id = ta.au_id AND t.title_id = ta.title_id
FOR XML AUTO
GO
---------------------------------------------- hasilnya
XML_F52E2B61-18A1-11d1-B105-00805F49916B
--------------------------------------
<a au_id="238-95-7766" au_lname="Carson">
<t title_id="PC1035"/>
</a>
<a au_id="724-80-9391" au_lname="MacFeather">
<t title_id="PS1372"/>
</a>
(2 row(s) affected)
EXPLICIT : Menampilkan hasil query dalam format nested XML. Setiap kolom
dianggap sebagai suatu elemen XML, dengan pengaturan yang lebih
fleksibel dan kompleks. User dapat menentukan kolom/field mana
yang dijadikan element maupun sub elemen.
Contoh :
58
---------------------------------------------------- hasilnya
XML_F52E2B61-18A1-11d1-B105-00805F49916B
--------------------------------------
<authors author_id="238-95-7766">
<au_lname>Carson</au_lname>
<title_id>PC1035</title_id>
</authors>
<authors author_id="724-80-9391">
<au_lname>MacFeather</au_lname>
<title_id>PS1372</title_id>
</authors>
(2 row(s) affected)
Klausa OPTION
Klausa OPTION merupakan suatu tanda (hint) bagi SQL Server untuk menjalakan query
untuk keseluruhan hasil query. Setiap tanda (hint) hanya dapat ditulis satu kali.
Syntax :
USE Pubs
SELECT au_id, au_lname, au_fname
FROM authors
OPTION (FAST 5)
GO
------------------------------------------- hasilnya
au_id au_lname au_fname
----------- ---------------------------------------- -----------------
409-56-7008 Bennet Abraham
648-92-1872 Blotchet-Halls Reginald
238-95-7766 Carson Cheryl
722-51-5454 DeFrance Michel
712-45-1867 del Castillo Innes
... dst
59
Klausa UNION
Klausa UNION menggabungkan 2 query atau lebih menjadi satu set hasil query, dengan
syarat :
Syntax :
Klausa UNION akan menampilkan data tunggal (jika ada ada kembar akan ditampilkan satu
kali). Sedangkan UNION ALL akan menampilkan semua data.
Contoh :
(2 row(s) affected)
(5 row(s) affected)
60
PERTEMUAN 8
MODIFIKASI DATA
INSERT Statement
Syntax :
INSERT [ INTO]
{ table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}
{ [ ( column_list ) ]
{ VALUES
( { DEFAULT | NULL | expression } [ ,...n] )
| derived_table
| execute_statement
}
}
| DEFAULT VALUES
Urutan nilai yang dimasukkan harus sama dengan urutan kolom/field-nya. Klausa INTO
bersifat opsional (bisa ditulis bisa tidak).
Contoh 1 : menambahkan data baru pada tabel Teritories (dengan daftar kolom).
USE Northwind
INSERT Territories (TerritoryID,TerritoryDescription,Regionid)
VALUES ('77777','Fort Lauderdale',4)
GO
------------------------------------------------------ hasilnya
(1 row(s) affected)
Contoh 2 : menambahkan data baru pada tabel Teritories (tanpa daftar kolom).
USE Northwind
INSERT Territories VALUES ('88888','Miami',4)
GO
------------------------------------------------------ hasilnya
(1 row(s) affected)
Contoh 3 : kolom yang bersifat IDENTITY, tidak perlu diisi (ShipperID = IDENTITY)
SQL Server otomatis akan menambahkan nilai baru.
61
USE Northwind
INSERT Shippers (companyname, phone)
VALUES ('Super Fast Shipping','(503) 555-6493')
GO
------------------------------------------------- hasilnya
(1 row(s) affected)
USE Northwind
SET IDENTITY_INSERT Shippers ON
INSERT Shippers (shipperid,companyname, phone)
VALUES (20,'ACME Shipping','(503) 555-8888')
SET IDENTITY_INSERT Shippers OFF
GO
------------------------------------------------ hasilnya
(1 row(s) affected)
USE Northwind
INSERT Products (productname,supplierid,categoryid,quantityperunit,
reorderlevel,discontinued)
VALUES ('Donut',NULL,NULLx,'6 pieces',DEFAULT,DEFAULT)
GO
--------------------------------------------------------- hasilnya
(1 row(s) affected)
Perintah diatas akan menghasilkan hasil query yang sama dengan perintah pada contoh 5b
di bawah ini :
USE Northwind
INSERT Products (productname,quantityperunit)
VALUES ('Donut','6 pieces')
GO
--------------------------------------------------------- hasilnya
(1 row(s) affected)
USE Northwind
INSERT Orders DEFAULT VALUES
GO
------------------------------------------- hasilnya
(1 row(s) affected)
Agar nilai DEFAULT dan NULL dapat ditambahkan, maka tabel tsb. harus :
62
Contoh 7 : Menambahkan beberapa data dari suatu tabel dengan kriteria tertentu.
USE Northwind
INSERT #employees_in_wa
SELECT lastname,firstname
FROM Employees
WHERE region = 'WA'
(5 row(s) affected)
DELETE Statement
Syntax :
DELETE
63
< table_hint > ::=
{ INDEX ( index_val [ ,...n ] )
| FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITTED
| READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK
| SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK
}
Contoh :
USE MASTER
CREATE DATABASE mydb
GO
USE mydb
SELECT TOP 8 * INTO suppliers FROM Northwind..Suppliers
(8 row(s) affected)
ID Nama Kontak
------- ------------------------------------ ------------------
1,00 Exotic Liquids Charlotte Cooper
2,00 New Orleans Cajun Delights Shelley Burke
3,00 Grandma Kelly's Homestead Regina Murphy
4,00 Tokyo Traders Yoshi Nagase
5,00 Cooperativa de Quesos 'Las Cabras' Antonio del Valle Saavedra
6,00 Mayumi's Mayumi Ohno
7,00 Pavlova, Ltd. Ian Devling
8,00 Specialty Biscuits, Ltd. Peter Wilson
(8 row(s) affected)
64
Kode Nama Kontak
------ -------------------------------------- -----------------
1,00 Exotic Liquids Charlotte Cooper
3,00 Grandma Kelly's Homestead Regina Murphy
4,00 Tokyo Traders Yoshi Nagase
5,00 Cooperativa de Quesos 'Las Cabras' Antonio del Valle Saavedra
6,00 Mayumi's Mayumi Ohno
7,00 Pavlova, Ltd. Ian Devling
8,00 Specialty Biscuits, Ltd. Peter Wilson
(7 row(s) affected)
(3 row(s) affected)
USE Northwind
CREATE TABLE #shippers (
companyname NVARCHAR(20),
phone NVARCHAR(20)
)
(4 row(s) affected)
companyname phone
-------------------- --------------------
Speedy Express (503) 555-9831
United Package (503) 555-3199
Federal Shipping (503) 555-9931
ACME Shipping (503) 555-8888
(4 row(s) affected)
companyname phone
-------------------- --------------------
(0 row(s) affected)
Perintah TRUNCATE akan dieksekusi lebih cepat daripada DELETE, karena SQl Server
langsung menghapus dari physical storage. Sedangkan DELETE akan mencatat setiap
baris/row yang dihapus pada file .log (sehingga lebih lambat daripada TRUNCATE).
65
UPDATE Statement
Digunakan untuk memperbarui data pada baris/row suatu tabel. Perintah ini hanya dapat
memperbarui data untuk satu tabel saja. Jika diinginkan perubahan data pada banyak
tabel, maka perintah ini harus ditulis lagi.
Syntax :
UPDATE
{
table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}
SET
{ column_name = { expression | DEFAULT | NULL }
| @variable = expression
| @variable = column = expression } [ ,...n ]
[ WHERE
< search_condition > ] }
|
[ WHERE CURRENT OF
{ { [ GLOBAL ] cursor_name } | cursor_variable_name }
] }
[ OPTION ( < query_hint > [ ,...n ] ) ]
66
Namun secara sederhana syntax tsb. dapat ditulis :
UPDATE Table_name
SET column_1 = new_value, .. column_n = new_value
WHERE condition
USE mydb
SELECT * INTO Shippers_copy FROM Northwind..Shippers
SELECT * FROM Shippers_copy
GO
(3 row(s) affected)
(3 row(s) affected)
Contoh 2 :
USE mydb
SELECT * FROM Shippers_copy
GO
UPDATE Shippers_copy
SET CompanyName = CompanyName + ' Express', Phone = '(305) 555 8888'
WHERE ShipperID = 3
(3 row(s) affected)
(3 row(s) affected)
67
Contoh 3 :
UPDATE titles
SET ytd_sales = titles.ytd_sales + (SELECT SUM(s.qty) FROM sales s WHERE
s.title_id = titles.title_id )
(2 row(s) affected)
title_id ytd_sales
-------- -----------
BU1032 4.095,00
1 row(s) affected)
title_id ytd_sales
-------- -----------
BU1032 4.110,00
(1 row(s) affected)
68
PERTEMUAN 9
UJIAN TENGAH SEMESTER (UTS)
69
PERTEMUAN 10
JOIN ANTAR TABEL
Operasi JOIN digunakan untuk menampilkan data yang berasal lebih dari 2 tabel. Untuk
dapat menggunakan operasi JOIN ini, tabel tersebut harus terhubung dengan suatu relasi
(relationship). Masing – masing tabel yang terhubung dengan suatu relasi, menggunakan
kunci tamu (foreign key) dan atau kunci utama (primary key) sebagai penghubungnya
Ada 3 jenis operasi JOIN, yaitu : CROSS JOIN (CARTESIAN PRODUCT), INNER JOIN, OUTER
JOIN.
CROSS JOIN
Menghasilkan semua kombinasi baris terdapat pada tabel - tabel yang digabungkan. Pada
kenyataanya join jenis ini tidak akan pernah dipakai. Meskipun demikian, join jenis inilah
yang merupakan dasar dari join antar tabel.
Contoh :
USE mydb
CREATE TABLE A ( id_a INT NOT NULL IDENTITY PRIMARY KEY, nama VARCHAR(10))
CREATE TABLE B ( id_b INT NOT NULL IDENTITY PRIMARY KEY, hoby VARCHAR(10))
INSERT A VALUES ('andi')
INSERT A VALUES ('anto')
INSERT A VALUES ('affan')
INSERT B VALUES ('membaca')
INSERT B VALUES ('makan')
GO
SELECT * FROM A, B -– dapat ditulis SELECT * FROM A CROSS JOIN B
GO
SELECT * FROM B, A -– dapat ditulis SELECT * FROM B CROSS JOIN A
----------------------------------------------------------------------------- hasilnya
id_a nama id_b hoby
----------- ---------- ----------- ----------
1,00 andi 1,00 membaca
1,00 andi 2,00 makan
2,00 anto 1,00 membaca
2,00 anto 2,00 makan
3,00 affan 1,00 membaca
3,00 affan 2,00 makan
(6 row(s) affected)
INNER JOIN
Join jenis ini hanya akan menghasilkan output berupa kombinasi baris-baris yang
berpasangan saja. Kombinasi baris yang bukan pasangannya akan dieliminasi. Baris-baris
yang tidak memiliki pasangan pada tabel lainnya juga tidak akan dimunculkan.
Contoh 1 : menampilkan informasi produk dan nama suplier untuk tiap produk.
USE Northwind
SELECT ProductID, ProductName, CompanyName
FROM Products INNER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID
GO
------------------------------------------------------------------------------ hasilnya
ProductID ProductName CompanyName
----------- ---------------------------------------- -----------------------------------
1,00 Chai Exotic Liquids
2,00 Chang Exotic Liquids
3,00 Aniseed Syrup Exotic Liquids
4,00 Chef Anton's Cajun Seasoning New Orleans Cajun Delights
5,00 Chef Anton's Gumbo Mix New Orleans Cajun Delights
... dst
70
Catatan :
Syntax pada contoh diatas dapat ditulis sbb : (hasilnya sama saja)
USE Northwind
SELECT ProductID, ProductName, CompanyName
FROM Products JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID
GO
--------------------------------------------------------------- atau
USE Northwind
SELECT ProductID, ProductName, CompanyName
FROM Products, Suppliers WHERE Products.SupplierID = Suppliers.SupplierID
GO
Prinsip kerja INNER JOIN dapat dilihat pada gambar berikut ini.
Contoh 3 : JOIN lebih dari 2 tabel, menampilkan informasi semua Region yang
berkaitan dengan masing-masing Employee.
USE Northwind
SELECT E.FirstName + ' ' + E.LastName FullName, T.TerritoryDescription, R.RegionDescription
FROM Employees E JOIN EmployeeTerritories ET ON E.EmployeeID = ET.EmployeeID
JOIN Territories T ON ET.TerritoryID = T.TerritoryID
JOIN Region R ON T.RegionID = R.RegionID
GO
----------------------------------------------------------------------------- hasilnya
FullName TerritoryDescription RegionDescription
---------------------- --------------------- ------------------------------------
Nancy Davolio Wilton Eastern
Nancy Davolio Neward Eastern
Andrew Fuller Westboro Eastern
Andrew Fuller Bedford Eastern
... dst
71
Contoh 4 : UPDATE dengan menggunakan operasi JOIN, menaikkan harga produk
sebesar $5 yang disuplai oleh “Exotic Liquids”
USE Northwind
SELECT P.ProductID, P.UnitPrice, S.CompanyName
FROM Products P JOIN Suppliers S ON P.SupplierID = S.SupplierID
WHERE S.CompanyName = 'Exotic Liquids'
(3 row(s) affected)
Dengan cara yang sama, perintah DELETE juga dapat digunakan bersama dengan operasi
JOIN untuk menghapus data tertentu.
SELF JOIN
Operasi SELF JOIN merupakan operasi JOIN khusus yang sebenarnya sama dengan operasi
INNER JOIN. Operasi ini menghubungkan satu tabel dengan dirinya sendiri.
USE Northwind
SELECT E1.EmployeeID NIK, E1.Firstname + ' ' + E1.LastName Karyawan,
E2.FirstName + ' ' + E2.LastName Atasan
FROM Employees E1 JOIN Employees E2 ON E1.ReportsTo = E2.EmployeeID
GO
--------------------------------------------------------------------------- hasilnya
NIK Karyawan Atasan
----------- ------------------------------- -------------------------------
1.00 Nancy Davolio Andrew Fuller
3.00 Janet Leverling Andrew Fuller
4.00 Margaret Peacock Andrew Fuller
5.00 Steven Buchanan Andrew Fuller
6.00 Michael Suyama Steven Buchanan
7.00 Robert King Steven Buchanan
8.00 Laura Callahan Andrew Fuller
9.00 Anne Dodsworth Steven Buchanan
(8 row(s) affected)
OUTER JOIN
Join jenis ini hampir sama dengan INNER JOIN, hanya saja baris yang tidak memiliki
pasangan tetap akan dimunculkan. OUTER JOIN dibagi lagi menjadi :
72
RIGHT OUTER JOIN
Operasi Right Outer Join akan menghasilkan output berupa kombinasi baris-baris yang
berpasangan DAN baris-baris pada tabel sebelah kanan yang tidak berpasangan dengan
baris-baris pada tabel sebelah kiri. Output baris yang tidak perpasangan pada tabel sebelah
kiri akan diberi nilai NULL.
Contoh : menampilkan informasi Region, baik yang memiliki Territory ataupun tidak.
USE Northwind
(1 row(s) affected)
(1 row(s) affected)
Catatan : RIGHT OUTER JOIN dapat juga ditulis dengan RIGHT JOIN saja, sehingga
syntax pada contoh diatas dapat juga ditulis sbb:
USE Northwind
SELECT T.TerritoryID, T.TerritoryDescription,
R.RegionID, R.RegionDescription
FROM Territories T RIGHT OUTER JOIN Region R ON
T.RegionID = R.RegionID
73
----------------------------------------------------------------------------- hasilnya
TerritoryID TerritoryDescription RegionID RegionDescription
-------------- --------------------- -------------- ------------------------------------
01581 Westboro 1.00 Eastern
01730 Bedford 1.00 Eastern
01833 Georgetow 1.00 Eastern
... dst
NULL NULL 5.00 Europe
NULL NULL 6.00 Latin America
NULL NULL 7.00 Asia
(56 row(s) affected)
Catatan : seperti halnya pada operasi RIGHT OUTER JOIN, syntax LEFT OUTER
JOIN dapat juga ditulis dengan LEFT JOIN saja, sehingga syntax pada
contoh diatas dapat juga ditulis sbb:
Operasi FULL OUTER JOIN merupakan gabungan dari operasi LEFT OUTER JOIN dan RIGHT
OUTER JOIN. Sehingga outputnya akan menghasilkan :
USE Northwind
SELECT S.CompanyName Nama_Supp, S.Country Kota_Supp, C.CompanyName Nama_Pelg, C.Country
Kota_Pelg
FROM Suppliers S FULL OUTER JOIN Customers C ON S.Country = C.Country
GO
----------------------------------------------------------------------------- hasilnya
Nama_Supp Kota_Supp Nama_Pelg Kota_Pelg
---------------------------- -------------- ---------------------- -------------
... dst
Catatan : seperti halnya pada operasi RIGHT OUTER JOIN dan LEFT OUTER JOIN,
Syntax FULL OUTER JOIN dapat juga ditulis dengan FULL JOIN saja,
sehingga syntax pada contoh diatas dapat juga ditulis sbb:
74
PERTEMUAN 11
STORED PROCEDURE
Stored Procedure merupakan obyek basisdata yang tersusun dari satu atau beberapa
pernyataan T-SQL. Sehingga jika ingin menghasilkan output yang sama dari suatu
pernyataan T-SQL, cukup memanggil nama stored procedurenya.
Fungsi utama system stored procedure adalah sebagai sarana berinteraksi dengan system
table SQL Server untuk keperluan administratif. System stored procedure secara default
ikut terinstall pada saat intsalasi SQL Server.
Nama system stored procedure selalu dimulai dengan awalan sp_, sehingga dapat
dieksekusi dara basisdata manapun.
EXEC sp_helpdb
------------------------------------------------------------------------------ hasilnya
Name db_size owner dbid created
-------------- -------------- -------------- -------------- -----------
master 12.19 MB sa 1,00 Aug 6 2000
model 1.13 MB sa 3,00 Aug 6 2000
msdb 13.25 MB sa 4,00 Aug 6 2000
Northwind 3.94 MB sa 6,00 Aug 6 2000
Pubs 2.13 MB sa 5,00 Aug 6 2000
Tempdb 8.50 MB sa 2,00 Dec 7 2007
75
USER-DEFINED STORED PROCEDURE
Stored procedure jenis ini, digunakan untuk menyelesaikan permasalahan dalam aplikasi
bisnis. Masing-masing permasalahan dapat didefinisikan melalui stored procedure ini, mulai
dari yang sederhana sampai dengan permasalahan yang kompleks.
Untuk membuat user-defined stored procedure ini, digunakan perintah CREATE PROCEDURE.
Stored procedure ini hampir sama dengan user-defined stored procedure dalam arti bahwa
stored procedure ini digunakan juga untuk menyelesaikan permasalahan dalam aplikasi
bisnis. Namun tempat penyimpanannya berbeda. User-defined stored procedure akan
tersimpan di media simpan (device storage / hard disk) yaitu di database dimana user-
defined stored procedure tsb. dibuat. Sedangkan temporary stored procedure akan
tersimpan di memory yaitu di database tempdb. Karena tersimpan di memory, sehingga
ketika aplikasi kita tutup maka temporary stored procedure ini akan otomatis akan
terhapus.
Untuk membuat temporary stored procedure ini, digunakan perintah CREATE PROCEDURE
dan namanya diawali dengan karakter #.
Extended stored procedure merupakan program DLL (Dynamic Link Library) ditulis dengan
bahasa C/C++ yang digunakan untuk memperluas kemampuan SQL Server. SQL Server
sendiri memiliki beberapa extended stored procedure yang tersimpan di master database
dengan nama berawalan xp_. Fungsi utama extended stored procedure bawaan SQL Server
adalah untuk tujuan administratif.
Extended stored procedure digunakan untuk mengakses Microsoft Win32 subsystem (Win32
API) melalui Microsoft Open Data Services (ODS). (Lihat kembali pertemuan 1 tentang
Arsitektur SQL Server).
PERINGATAN :
Meskipun kita dapat membuat sendiri extended stored procedure, namun jika kita belum
menguasai tentang struktur SQL Server dengan baik, sebaiknya tidak dilakukan karena
extended stored procedure yang kita buat nantinya akan dijalankan di alamat memory
yang sama dengan SQL Server. Sehingga jika extended stored procedure yang kita buat
terdapat error akan mengakibatkan SQL Server juga akan error.
Syntax :
AS sql_statement [ ...n ]
USE mydb
76
Untuk menjalankannya ada beberapa cara :
• Menggunakan reserved word EXECUTE atau EXEC + nama stored procedure
Contoh : EXEC proc1
• Langsung menyebutkan nama store procedure nya jika merupakan perintah awal
suatu batch.
PARAMETER INPUT
77
Contoh 2 : Menampilkan Lastname yang huruf pertamanya diinputkan oleh user.
USE mydb
GO
(2 row(s) affected)
EXEC emp_LN_default
EXEC emp_LN_default 'D'
GO
----------------------------------------------------------------------------- hasilnya
EmployeeID LastName
----------- --------------------
5,00 Buchanan
(1 row(s) affected)
EmployeeID LastName
----------- --------------------
1,00 Davolio
9,00 Dodsworth
(2 row(s) affected)
Contoh 4 : Membuat Database Object sebagai parameter serta membuat query pada
saat runtime
USE mydb
GO
78
Contoh 5 : menambahkan data baru ke tabel Categories
USE mydb
GO
PARAMETER OUTPUT
USE mydb
GO
(1 row(s) affected)
Catatan :
Jika kata OUTPUT tidak dicantumkan pada saat definis stored procedure, maka parameter
yang didefinisikan dianggap sebagai parameter INPUT.
79
MODIFIKASI STORED PROCEDURE
Syntax :
USE mydb
GO
(9 row(s) affected)
Contoh 2 : Modifikasi stored procedure sehingga source code –nya tidak dpt dilihat
USE mydb
GO
ALTER PROC db_obj
@tablename NVARCHAR(256),
@columname NVARCHAR(256)
WITH ENCRYPTION
AS
BEGIN
DECLARE @query NVARCHAR(1000)
SET @query = 'SELECT ' + @columname + ' FROM '+ @tablename
EXEC (@query)
END
GO
USE mydb
GO
80
81