Anda di halaman 1dari 155

Database Server Programming

with
SQL Server
Oleh
Ir.Hartono

Konsep Database
Data

nilai yang memiliki suatu arti

Informasi

data yang berguna

Database

kumpulan data yang terorganisasi

Sistem informasi

sinergi unsur-unsur pengelolaan database untuk


menyediakan informasi

Sistem Database

sinergi unsur-unsur penyimpanan dan pengelolaan


data

Database Relasional

model database yang tabel-tabelnya memiliki


hubungan dengan definisi tertentu

DBMS

DataBase Management System adalah perangkat


lunak untuk mengelola sistem database

RDBMS

Relational DataBase Management System adalah


DBMS untuk database realsional

Hirarki Data
Nilai
Dosen
file

Mahasiswa

NIM

Nama

Tgl. Lahir

Nama field

database
phrase

110011

Salma Hayek

1-Mar-1970

110012

Laetita Casta

21-Des-1974

110013

Arnold Sgarbuger

5-Jun-1960

word

field

karakter

Database

File

Table

Phrase (kalimat)

Record (Row)

Word (kata)

Item Field (Column)

Character (huruf)

Character
3

Tipe-file File (1/2)


File Induk (master file)
File Induk Acuan (reference master file)
file induk yang recordnya relatif statis, jarang berubah nilainya.
Misalnya file daftar gaji, file mata pelajaran.

File Induk Dinamik (dynamic master file)


file induk yang nilai dari record-recordnya sering berubah atau
sering dimutakhirkan (update) sebagai hasil dari suatu
transaksi. Misalnya file induk data barang, yang setiap saat
harus di up-date bila terjadi transaksi.

File Transaksi (transaction file)


File ini bisa disebut file input; digunakan untuk
merekam data hasil dari transaksi yang terjadi. Misalnya
file penjualan yang berisi data hasil transaksi
penjualan.
4

Tipe-file File (2/2)


File Laporan (report file)
File ini bisa disebut output file, yaitu file yang berisi
informasi yang akan ditampilkan.

File Sejarah (history file)


File ini bisa disebut file arsip (archival file), merupakan
file yang berisi data masa lalu yang sudah tidak aktif
lagi, tetapi masih disimpan sebagai arsip.

File Pelindung (backup file)


File ini merupakan salinan dari file-file yang masih aktif
di dalam database pada suatu saat tertentu. File ini
digunakan sebagai pelindung atau cadangan bila
filedatabase yang aktif mengalami kerusakan atau
hilang.
5

Sistem Database Terkoneksi


Sistem database terkoneksi dibangun dengan adanya
service dan arsitektur sistem yang digunakan
Jenis service
User service : presentasi, antar-muka, validasi, aturan
Business service : aturan bisnis
Data service : penyimpanan dan pengaksesan data, aturan

Arsitektur sistem
Single tier (host) : semua service berada dalam satu komputer
2-tier (client/server) : service dibagi pada komputer-komputer
yang berbeda yang saling terhubung
3-tier
N-tier

1-Tier (Client-Server)

User Interface
Presentation service
Application service
Business service
Data service

2-Tier (Client-Server)
Clients
Tier I
User Interface
Presentation service
Application service

Tier II
Application service
Business service
Data service

Server

3-Tier

Tier I
User Interface
Presentation service

Tier II
Application service
Business service
Data service

Tier III
Data service

N-Tier (Multi-Tier)

Tier I
User Interface
Presentation service

Tier II
Application service
Business service

Tier IV
Web service

Tier III
Data service

10

Pengenalan
SQL Server adalah perangkat lunak sistem
management database relasional (Relational
DataBase Management System [RDBMS])
SQL Server menggunakan perintah Transact-SQL
(T-SQL) untuk melakukan proses pada database
T-SQL menggunakan ANSI SQL-92 sebagai
fondasinya

11

Edisi MS SQL Server 2000

Desktop
Personal
Standard
Developer
Enterprise

12

Komponen Penyusun Database


Physical Database
File database secara fisik (.mdf, .ndf, .ldf)

Logical Database
Database yang tersimpan di dalam physical database
(table, view)

13

File-file Physical Database


Primary Data File (.mdf)
Satu database hanya memiliki satu .mdf
Sebagai file utama penyimpan data user dan data sistem

Secondary Data Files (.ndf)


Opsional : boleh ada, boleh tidak
Boleh lebih dari satu file
Sebagai file tambahan penyimpan data user

Log Files (.ldf)


Satu database minimal memiliki satu .mdf
Sebagai penyimpan log aktivitas yang terjadi pada database

Catatan ;
saat database logical dibuat, secara default akan terdiri dari satu
file .mdf dan satu file .ldf
Ekstensi file .mdf, .ndf, .ldf dapat diganti
14

Database Default SQL Server


Master
Menyimpan data-data sistem
Tidak boleh rusak

MSDB
Menyimpan data-data yang digunakan MS SQL Agent

Model
Database model untuk membuat database baru

TempDB
Menyimpan sementara hasil query yang kompleks

15

Objek-objek Database SQL Server

Table
Constraint
Rule
Default
View
Stored Procedure
Trigger
User Defined Data Types

16

Kelompok Perintah-Perintah SQL


Data Definition Language (DDL)
CREATE
ALTER
DROP

Data Manipulation Language (DML)

SELECT
INSERT
UPDATE
DELETE

Data Control Language (DCL)


GRANT
DENY
REVOKE
17

Query Analyzer
Query Analyzer adalah program bantu dalam Ms
SQL Server untuk menjalankan perintah-perintah
SQL

18

Login Window

19

Tampilan Awal QA

20

Tampilan QA

21

Penulisan Perintah SQL pada QA


Huruf besar dan huruf kecil tidak berpengaruh
Nama objek seperti nama tabel, kolom, view dsb.
disarankan jangan mengandung spasi. Gunakan
garis bawah (under score) sebagai pengganti spasi
Perintah boleh ditulis satu baris. Disarankan dibagi
menjadi beberapa baris untuk mempermudah
pembacaan

22

Membuat Database
Perintah SQL untuk membuat database adalah
CREATE
Sintaks :
CREATE DATABASE nama_tabel (
Spesifikasi_kolom1,
,
Spesifikasi_kolomn
)

23

Contoh
CREATE DATABASE binuscenter
Membuat database FTI tanpa spesifikasi, menggunakan default

CREATE DATABASE FTI


ON
( NAME = filedata1,
FILENAME = d:\filedata1.mdf,
SIZE = 10 mb,
MAXSIZE = UNLIMITED,
FILEGROWTH = 20% )
Membuat database FTIr dengan satu file data berukuran 10MB dan
pertumbuhan 20% tidak terbatas

24

Tentang SIZE dan FILEGROWTH


Nilai SIZE dan FILEGROWTH harus bilangan bulat
SIZE
Satuannya KB, MB (default), TB.
Nilai minimal 512 KB.
Jika tidak ditentukan, default 1 MB

FILEGROWTH

Satuannya KB, MB (default), TB, %.


Nilai minimal 64 KB.
Nilai 0 digunakan untuk tidak mengadakan penambahan
Jika tidak ditentukan, default 10%.

25

Informasi tentang Database


Perintah untuk mendapatkan informasi tentang database
yang ada adalah :
sp_helpdb nama_database

Informasi yang dapat diperoleh adalah :

Nama database
Ukuran database
Pemilik
Tanggal pembuatan
Status
File-file data logical & physical
Filegroup
Ukuran file
Ukuran maksimum
Pertumbuhan
Pemakaian
26

Contoh
CREATE DATABASE binuscenter
ON
( NAME = filedata1,
FILENAME = d:\filedata1.mdf,
SIZE = 10 mb,
MAXSIZE = UNLIMITED,
FILEGROWTH = 20% ),
( NAME = filedata2,
FILENAME = d:\filedata2.ndf,
SIZE = 1,
MAXSIZE = 250 mb,
FILEGROWTH = 514 kb )
membuat sebuah database baru dengan nama FTI dengan dua buah
file data, yaitu: FileData1 dan FileData2.

27

Contoh
CREATE DATABASE FTI
ON
( NAME = filedata1,
FILENAME = d:\filedata1.mdf,
SIZE = 2,
MAXSIZE = 1 gb,
FILEGROWTH = 20% )
LOG ON
( NAME = filelog1,
FILENAME = d:\filelog1.ldf,
SIZE = 640 kb )
membuat sebuah database baru dengan nama FTI dengan sebuah
file data (FileData1) dan sebuah log file (FileLog1). NOTE:
spesifikasi Size, Maxsize, dan Filegrowth tidak wajib diberikan
28

Contoh Modifikasi Spec


ALTER DATABASE FTI
MODIFY FILE
( NAME = filedata1,
SIZE = 3,
MAXSIZE = 500 mb )

mengubah spesifikasi salah satu file dari sebuah database. Yang


dapat diubah hanya untuk size, maxsize dan filegrowth. NOTE:
nama file fisik tidak boleh ditulis. Size dan Maxsize tidak boleh lebih
kecil dari ukuran file saat perubahan

29

Contoh
ALTER DATABASE FTI
ADD FILE
( NAME = filedata2,
FILENAME = d:\filedata2.ndf,
SIZE = 1,
MAXSIZE = 500 mb )
menambahkan sebuah file data ke dalam database FTI
ALTER DATABASE FTI
ADD LOG FILE
( NAME = filelog2,
FILENAME = d:\filelog2.ldf,
SIZE = 640 kb,
MAXSIZE = UNLIMITED )
menambahkan sebuah file log ke dalam database FTI

30

Contoh
ALTER DATABASE FTI
REMOVE FILE filelog2

Perintah ini untuk menghapus file dari database FTI (berlaku untuk
file data maupun log). NOTE : file yang dihapus menggunakan nama
file logical

DROP DATABASE FTI

Perintah ini untuk menghapus database FTI. NOTE : database aktif


harus MASTER (use master dahulu sebelum melakukan drop
database)

31

Tabel

Tabel adalah objek untuk menyimpan data yang


terdiri dari row (record) dan column (field)
Sintaks untuk membuat tabel :
CREATE TABLE nama_tabel
( nama_kolom1 tipe_data,

nama_kolomn tipe_data )

32

Tipe Data (1/2)


BigInt
Bilangan
Bulat

Bilangan
Pasti

Bilangan
Biner
Bilangan
Desimal

Int
SmallInt

-2^63 (-9.223.372.036.854.775.808) s/d 2^63-1 (9.223.372.036.854.775.807)


-2^31 (-2,147,483,648) s/d 2^31 - 1 (2,147,483,647).
2^15 (-32,768) s/d 2^15 - 1 (32,767).

TinyInt

0 s/d 255

Bit

0 atau 1

Decimal

-10^38 +1 s/d 10^38 1

Numeric

idem

Money

-2^63 (-922,337,203,685,477.5808) s/d 2^63 - 1 (+922,337,203,685,477.5807) dgn akurasi 1/1000

Uang

Bilangan
Approksimasi

Bilangan
Pecahan

SmallMoney

-214,748.3648 s/d +214,748.3647

Real

-214,748.3648 s/d +214,748.3647

Float

-1.79E + 308 s/d 1.79E + 308.

SmallDateTime

January 1, 1900 s/d June 6, 2079 dg akurasi 1 menit

Waktu
DateTime

Non
Unicode

Char

maximum length of 8,000 characters

VarChar

maximum length of 8,000 characters

Text

Karakter /
String
Unicode

maximum length of 2^31 - 1 (2,147,483,647) characters

NChar

maximum length of 4,000 characters

NVarChar

maximum length of 4,000 characters

NText

33

January 1, 1753 s/d December 31, 9999 dengan akurasi 3/100 detik (3.33 millidetik)

maximum length of 2^30 - 1 (1,073,741,823) characters.

Tipe Data (2/2)


Biner

Binary

maximum length of 8,000 bytes

VarBinary

maximum length of 8,000 bytes

Image

2^31 - 1 (2,147,483,647) bytes

cursor
sql_variant
Tipe Lain

table
timestamp
uniqueidentifier

34

Perbedaan Char dan Varchar

Char memiliki panjang tetap


Varchar memiliki panjang sesuai panjang datanya

Char(5)

disimpan
VarChar(5)

Catatan : direkomendasikan menggunakan tipe data


Char untuk kolom Primary Key dari pada Varchar

35

Contoh
CREATE TABLE pelanggan
( kode_pelangan CHAR(5),
nama_pelanggan VARCHAR(25),
alamat VARCHAR(50),
telepon VARCHAR(15),
umur TINYINT,
tgl_lahir SMALLDATETIME
)

36

Informasi tentang Tabel

Perintah untuk mendapatkan informasi tentang database


yang ada adalah :

sp_help nama_tabel

Informasi yang dapat diperoleh adalah :

37

pemilik
tipe tabel
tgl. dibuat
struktur tabel
kolom identity
rowGUIDcol
filegroup
index
constraint
referensi FK

Modifikasi Definisi Tabel


--menambah kolom
ALTER TABLE pelanggan
ADD hobi VARCHAR(250)
--mengubah spec kolom
ALTER TABLE pelanggan
ALTER COLUMN hobi VARCHAR(100)
--menghapus kolom
ALTER TABLE pelanggan
DROP COLUMN hobi

--menghapus tabel
DROP TABLE pelanggan
--mengubah nama kolom
SP_RENAME pelanggan.alamat, domisili, COLUMN
38

Input Data

Sintaks perintah penginputan data ke tabel :


INSERT [INTO] nama_tabel [( nama_kolom1[, , nama_kolomn] )]
VALUES ( nilai1[, , nilain] )

Data bertipe karakter (char, varchar, text) dan datetime


(smalldatetime, datetime) harus diapit dengan tanda petik
satu.
Format standard yang digunakan untuk datetime adalah
31 May 2005 atau 05/31/2005.

39

Contoh
INSERT INTO pelanggan
VALUES( P0001,
Mitra Budiaji Chan,
Kemanggisan Ilir,
08128149909,
20,
28 Nov 2005 )
Memasukkan sebuah record ke dalam table Pelanggan dimana semua
column diisi.
INSERT INTO pelanggan (kode_pelanggan, nama_pelanggan)
VALUES(P0002,Julyana Anggreini)
Memasukkan sebuah record ke dalam table Pelanggan dimana hanya
column Kode_Pelanggan dan Nama_Pelanggan yang diisi. NOTE:
selain column yang diisi oleh perintah INSERT, akan berisi data NULL.
40

Contoh
INSERT INTO pelanggan
VALUES(NULL, NULL, NULL, NULL, NULL, NULL)
Memasukkan sebuah record ke dalam table Pelanggan dimana
semua column diisi dengan data NULL
INSERT INTO pelanggan
VALUES(, , , , , )
Memasukkan sebuah record ke dalam table Pelanggan dimana
semua column diisi dengan EMPTY STRING. Column bertipe
karakter akan berisi karakter kosong. Column bertipe bilangan akan
berisi nilai NOL. Column bertipe tanggal akan berisi tanggal awal,
yaitu: 1 Jan 1753 (untuk datetime) dan 1 Jan 1900 (untuk
smalldatetime)

41

Update Data
UPDATE pelanggan SET kode_pelanggan = P0003
WHERE kode_pelanggan =
mengubah data pada column Kode_Pelanggan menjadi P0003 bila
column Kode_Pelanggan berisi karakter kosong. Perintah tersebut
untuk
UPDATE pelanggan SET Nama_pelanggan = Hengky
WHERE kode_pelanggan IS NULL
mengubah data pada column Nama_Pelanggan menjadi Hengky
bila column Kode_Pelanggan berisi data NULL.
UPDATE pelanggan SET umur = 21
mengubah SEMUA data pada column Umur menjadi 21. NOTE: bila
perintah UPDATE tidak memiliki WHERE clause, maka semua
record akan diubah sesuai dengan nilai baru pada SET.
42

Delete Data
DELETE FROM pelanggan
WHERE kode_pelanggan IS NULL

menghapus record bila column Kode_Pelanggan berisi data NULL.

DELETE FROM pelanggan


WHERE kode_pelanggan = P0003
AND nama_pelanggan =

menghapus record bila column Kode_Pelanggan berisi data P0003


dan column Nama_Pelanggan berisi karakter kosong.

DELETE FROM pelanggan

menghapus SEMUA record dari table Pelanggan. NOTE: bila


perintah DELETE tidak memiliki WHERE clause, maka semua
record akan di-HAPUS.
43

Select Data

SELECT * FROM customers


Menampilkan semua data & semua column dari table Customers.

SELECT contactname, contacttitle FROM customers


Menampilkan column ContactName dan ContactTitle dari table Customers.
Tanda koma setelah select menunjukkan pergantian column.
SELECT contactname AS Name, contacttitle AS Title FROM
customers
Menampilkan column ContactName dengan judul Name dan column
ContactTitle dengan judul Title dari table Customers.
SELECT Name = contactname, Title = contacttitle FROM
customers
SELECT contactname AS Contact Name, contacttitle AS
[Contact Title] FROM customers
Menampilkan column ContactName dengan judul Contact Name dan
column ContactTitle dengan judul Contact Title dari table Customers. Jadi,
bila kita ingin menggabungkan dua kata, dapat menggunakan tanda atau
[ ].
44

Filtering

SELECT TOP 10 * FROM customers


Menampilkan hanya 10 record teratas dari table Customers.
SELECT TOP 30 PERCENT * FROM customers
Menampilkan hanya 30 percent record teratas dari table Customers.
SELECT contacttitle FROM customers
Menampilkan hanya column ContactTitle dari table Customers. Data
yang ditampilkan akan berulang karena ada beberapa record dimana
column ContactTitle tersebut berisikan data yang sama. Bila hanya
ingin ditampilkan data yang berbeda saja, maka dapat digunakan
keyword DISTINCT.
SELECT DISTINCT contacttitle FROM customers
menampilkan column ContactTitle yang berisikan data berbeda dari
table Customers
45

Filtering : Where

SELECT * FROM customers WHERE region IS NOT NULL


Menampilkan record dari table Customers dimana column Region
tidak berisikan NULL.
SELECT * FROM customers WHERE region <>
Menampilkan record dari table Customers dimana column Region
tidak berisikan empty string.
SELECT * FROM customers WHERE country = Germany
Menampilkan record dari table Customers yang memenuhi kondisi
tersebut, yaitu: colum country berisikan Germany.
SELECT * FROM products WHERE unitprice > 10
Menampilkan record dari table Products dimana column UnitPrice
berisikan data lebih besar dari 10.

46

Logical Operators

SELECT * FROM products WHERE unitprice > 10 AND


UNITSINSTOCK < 10
Menampilkan record dari table Products dimana column UnitPrice
berisikan data lebih besar dari 10 dan column UnitsInPrice kecil dari
10. NOTE: Operator AND hanya bersifat BENAR bila kedua
syarat/kondisi yang ada bernilai BENAR.
SELECT * FROM products WHERE unitprice > 10 OR
unitsinstock < 10
Menampilkan record dari table Products dimana column UnitPrice
berisikan data lebih besar dari 10 atau column UnitsInPrice kecil dari
10. NOTE: Operator OR hanya bersifat BENAR bila salah satu atau
kedua syarat/kondisi bersifat BENAR.

47

Operator BETWEEN

Operator BETWEEN dapat digunakan untuk membuat kondisi/syarat


yang bersifat range atau suatu jangkauan.

SELECT * FROM products WHERE unitprice BETWEEN 10


AND 20
Menampilkan record dari table Products dimana column UnitPrice
bernilai antara 10 sampai 20. Perintah sinonim :
SELECT * FROM products WHERE unitprice >= 10 AND
unitprice <= 20

SELECT * FROM products WHERE unitprice NOT BETWEEN


10 AND 20
Menampilkan record dari table Products dimana column UnitPrice
tidak bernilai antara 10 sampai 20. Perintah sinonim :
SELECT * FROM products WHERE unitprice < 10 OR
unitprice > 20

48

Operator LIKE

Karakter wildcard yang dapat digunakan adalah:

%
: sembarang karakter, banyaknya minimal 0
_
: sembarang karakter, banyaknya harus 1
[ ] : sembarang karakter di dalam tanda kurung tersebut
[^ ] : sembarang karakter selain yang terdapat dalam tanda kurung tersebut

SELECT * FROM customers WHERE custname LIKE MAR%S%


Menampilkan record dari table Customers dimana column CustName berisi
data yang sesuai dengan pola Mar%s%
SELECT * FROM customers WHERE custname LIKE __A%
Menampilkan record dari table Customers dimana column CustName berisi
data yang sesuai dengan pola __a%, yaitu: karakter ketiga adalah huruf a.

SELECT * FROM customers WHERE custname LIKE [STUV]%


Menampilkan record dari table Customers dimana column CustName berisi
data yang sesuai dengan pola [STUV]%, yaitu: karakter pertama adalah S,
T, U, atau V
49

Operator Perbandingan (1/3)


Operator

Arti

Contoh

Sama dengan

SELECT fname, lname FROM employees WHERE


lname = 'Smith'

<> atau !=

Tidak sama dengan

SELECT fname, lname FROM employees WHERE


status <> 'Active'

>

Lebih dari

SELECT fname, lname FROM employees WHERE


hire_date > '12/31/90'

<

kurang dari

SELECT fname, lname FROM employees WHERE


job_lvl < 100

>= atau !<

Lebih atau sama dengan

SELECT au_lname FROM authors WHERE


au_lname >= 'T'

<= atau !>

Kurang atau sama dengan

SELECT fname, lname FROM employees WHERE


hire_date <= '01/01/95'

50

Operator Perbandingan (2/3)


Operator

Arti

Contoh

BETWEEN expr1 AND expr2 jangkauan

SELECT fname, lname FROM employees


WHERE hire_date BETWEEN '12/31/90'
AND '12/31/91'

IS [NOT] NULL

Apakah berisi NULL

SELECT fname, lname FROM employees


WHERE photo_on_file IS NULL

[NOT] LIKE

Apakah sString
cocok dengan pola

SELECT fname, lname FROM employees


WHERE lname LIKE ('MAC%')

51

Operator Perbandingan (3/3)


Operator

Arti

Contoh

expr1 [NOT] IN
(val1, val2, ...)

Apakah ada di dalam daftar

SELECT fname, lname FROM employees WHERE


sales_region IN ('SW', 'SE') SELECT product_name
FROM products WHERE supplier_id IN (SELECT
supplier_id FROM supplier WHERE (country = 'Sweden'))

ANY (SOME)

Hasil subquery sesuai


dengan kriteria

SELECT au_lname, au_fname FROM authors where city


<> any (SELECT city FROM publishers)

ALL

Apakah semua hasil


subquery sesuai dengan
kriteria

SELECT title FROM titles where advance > all (SELECT


advance FROM publishers,titles where titles.pub_id =
publishers.pub_id AND pub_name = 'Alogdata
Infosystems')

[NOT] EXISTS

Apakah subquery
mendapatkan data

SELECT product_name FROM products WHERE EXISTS


(SELECT * FROM orders, products WHERE
orders.prod_id = products.prod_id)

atau
expr1 [NOT] IN
(subquery)

52

Fungsi String

SELECT * FROM customers WHERE LEFT(custname,2) = MI


Menampilkan record dari table Customers dimana dua karakter paling
kiri dari column CustName adalah Mi
SELECT contacttitle, RIGHT(contacttitle,3) AS KANAN
FROM customers
Menampilkan column ContactTitle dan tiga karakter paling kanan
column ContactTtile dari table Customers.

SELECT * FROM customers WHERE SUBSTRING(custname,2,3)


= sam

SELECT * FROM customers WHERE LEN(custname) = 10


Menampilkan record dari table Customers dimana column CustName
berisikan 10 karakter

53

REPLICATE

ASCII

SUBSTRING

NCHAR

DIFFERENCE

SOUNDEX

LEN

REVERSE
UNICODE
LOWER

RIGHT
UPPER
LTRIM
54
RTRIM

CHAR
PATINDEX
SPACE
CHARINDEX
REPLACE
STR
QUOTENAME
STUFF
LEFT

Fungsi Waktu

SELECT GETDATE()
Menampilkan tanggal yang tersimpan pada SQL Server dengan
format datetime.
SELECT * FROM employees WHERE DATEDIFF(YEAR,
birthdate, GETDATE()) > 50)
Menampilkan record dari table Employees dimana selisih column
BirthDate dan sekarang lebih besar dari 50 tahun.
SELECT LASTNAME, DAY(birthdate), MONTH(birthdate)
FROM employees
Menampilkan column LastName, tanggal dari column BirthDate dan
bulan dari column BirthDate

55

Fungsi Matematika
ABS

LOG10

ACOS

PI

ASIN

POWER

ATAN

RADIANS

ATN2

RAND

CEILING

ROUND

COS

SIGN

COT

SIN

DEGREES

SQUARE

EXP

SQRT

FLOOR

TAN

LOG
56

Contoh

select round(129.93547, 2) -- 129.94000


select round(129.4357, 2) -- 129.4400
select round(129.1,0) -- 129.0
select round(129.9,0) -- 130.0
select floor(129.93547) -- 129
select floor(129.4357) -- 129
select ceiling(129.93547) -- 130
select ceiling(129.4357) -- 130
57

FUngsi Konversi

CONVERT( )

Converts data from one data type into another.


Useful to format data or to use the contents
of a data column as an argument in a
function that requires a different data type.

SELECT 'Hired: ' +


CONVERT(char (11),
hire_date) FROM employee
Displays a date with a caption in
front of it; the CONVERT( )
function creates a string out
of the date so that it can be
concatenated with a literal
string.

SOUNDEX( )

Returns the Soundex code for the specified


expression, which you can use to create
"sounds like" searches.

SELECT au_lname, au_fname


FROM authors WHERE
SOUNDEX(au_fname) =
'M240'
Searches for names that sound
like "Michael".

STR( )

Converts numeric data into a character string so


you can manipulate it with text operators.

SELECT str(job_id) + ' ' +


str(job_lvl) FROM employee
Displays the job_id and job_lvl
columns (both numeric) in a
single string.

58

Pengurutan

SELECT * FROM customers ORDER BY contactname

Menampilkan record table Customers diurutkan berdasarkan column


ContactName

SELECT * FROM customers ORDER BY contactname DESC

Menampilkan record table Customers diurutkan berdasarkan column


ContactName secara menurun

59

Fungsi Agregat

SELECT MAX(contactname), MIN(contactname) FROM


customers
Menampilkan nilai maksimum dan minimum column ContactName
dari table Customers. NOTE: Fungsi Max() dan Min() berlaku untuk
column bertipe apa saja.
SELECT SUM(unitinstock), AVG(unitinstock) FROM
products
Menampilkan total dan rata-rata column UnitInStock dari table
Products. NOTE: Fungsi Sum() dan Avg() hanya berlaku untuk
column bertipe bilangan, seperti: integer, decimal, dan money.
SELECT COUNT(*) FROM customers
Menampilkan jumlah record dari table Customers
SELECT COUNT(region) FROM customers
Menampilkan jumlah data column REGION dari table Customers.
NOTE: Data NULL tidak dihitung
60

GROUP BY

SELECT country FROM customers GROUP BY country


Menampilkan column Country dengan pengelompokkan berdasarkan
column Country
SELECT country, COUNT(*) FROM customers GROUP BY
country
Menampilkan column Country dan jumlah record dengan
pengelompokkan berdasarkan column Country
SELECT country, MAX(contactname) FROM customers
GROUP BY country ORDER BY MAX(contactname)
Menampilkan column Country dan maksimum ContactName dengan
pengelompokkan berdasarkan column Country yang diurutkan
berdasarkan ContactName.

61

Fungsi IsNull()

IsNull adalah fungsi untuk mengecek apakah tidak


ada data (NULL) atau ada, kemudian jika tidak ada
data maka pada hasil query ditampilkan data
penggantinya
Contoh :
SELECT title, type, price FROM titles
SELECT title, type, ISNULL(price,0) FROM titles

62

Manfaat IsNull()

Soal : buatlah rata-rata harga (price) dari tabel titles


pada database Pubs
Jawaban : SELECT AVG(price) FROM titles
Bandingkan dengan hasil query di bawah ini :

SELECT AVG(price), AVG(ISNULL(price,0)) FROM

titles

SELECT COUNT(price), COUNT(ISNULL(price,0)) FROM


SELECT SUM(price), SUM(ISNULL(price,0)) FROM

63

titles

titles

Join

Join adalah operasi untuk menampilkan data dari


dua atau lebih database yang memiliki relationship
Jenis Join

Inner join
Outer join

64

Left join
Right join

Full join
Cross join
Self join

Join
Tabel_A

Tabel_B

NIP

Nama

NIP

Gaji

001

Ali

001

1000000

002

Budi

002

2000000

003

Buce

003

3000000

004

Cici

004

4000000

005

Dedi

007

5000000

006

Fifi

008

6000000

65

Inner Join

Menampilkan data dari tabel-tabel yang data dari satu


tabel dengan tabel lainnya memiliki relasi

SELECT tabel_a.nip,
tabel_a.nama,
tabel_b.gaji
FROM tabel_a
INNER JOIN tabel_b
ON tabel_a.nip = tabel_b.nip

66

Left Join

Menampilkan semua data pada semua tabel sebelah kiri


Data pada tabel kanan yang tidak memiliki relasi dengan
data pada tabel kiri akan ditampilkan dengan NULL

SELECT tabel_a.nip,
tabel_a.nama,
tabel_b.gaji
FROM tabel_a
LEFT JOIN tabel_b
ON tabel_a.nip = tabel_b.nip

67

Right Join

Menampilkan semua data pada semua tabel sebelah


kanan
Data pada tabel kiri yang tidak memiliki relasi dengan
data pada tabel kanan akan ditampilkan dengan NULL

SELECT tabel_a.nip,
tabel_a.nama,
tabel_b.gaji
FROM tabel_a
RIGHT JOIN tabel_b
ON tabel_a.nip = tabel_b.nip
68

Full Join

Menampilkan semua data pada semua tabel


Data yang tidak memiliki relasi akan ditampilkan dengan
NULL

SELECT tabel_a.nip,
tabel_a.nama,
tabel_b.gaji
FROM tabel_a
FULL JOIN tabel_b
ON tabel_a.nip = tabel_b.nip

69

Cross Join

Menghasilkan cartesian product dan jarang dipergunakan


Setiap data pada semua tabel akan dipetakan satu per
satu

SELECT tabel_a.nip,
tabel_a.nama,
tabel_b.gaji
FROM tabel_a
CROSS JOIN tabel_b

70

Tabel Pegawai
Self
Join Bos
NIP Nama
001 Joni 001
002 Budi 001
003 Tuti 001
004 Amir 002
SELECT a.nip,
a.nama,
b.nama AS Nama Bos
FROM pegawai a
INNER JOIN pegawai b ON a.bos = b.nip

Hasil query

71

NIP
001
002
003
004

Nama
Joni
Budi
Tuti
Amir

Nama Bos
Joni
Joni
Joni
Budi

Latihan Join #1

Gunakan database Northwind untuk menampilkan


data pemesanan barang yang terdiri dari OrderID,
ContactName, nama pegawai, dan OrderDate
Petunjuk :

Tabel yang dipergunakan :

72

Orders
Customers
Employees

Latihan Join #2

Tampilkan data pemesanan yang dihasilkan pada Latihan


Join #1 yang khusus memesan produk Singaporean
Hokkien Fried Mee
Petunjuk :

Tabel yang dipergunakan :

73

Orders
Customers
Employees
Order Details
Products

Constraint

Constraint merupakan objek yang dipergunakan


untuk menjaga integritas data
Jenis constraint :

74

Primary key
Foreign key
Unique
Default
Check

Integritas Data

Entity integrity (table level) :

Domain integrity (column level)

Identity column
Unique
Default
Check

Referential integrity (relational level) :

75

Primary key
Foreign key

Primary Key

Primary Key adalah satu atau gabungan beberapa


kolom yang datanya unik
Dalam satu table maksimal ada satu primary key
Kolom yang menjadi PK harus NOT NULL
Contoh pembuatan tabel dengan kolom dijadikan
primary key :

CREATE TABLE pelanggan(


kdpelanggan CHAR(10) CONSTRAINT pk_kdpelanggan PRIMARY
KEY,
nmpelanggan VARCHAR(25),
nomor_ktp VARCHAR(20),
kota VARCHAR(15)
)

76

Menambah dan Menghapus PK


ALTER TABLE pelanggan
ADD CONSTRAINT pk_kdpelanggan PRIMARY KEY
(kdpelanggan)

Menambah constraint PK

ALTER TABLE pelanggan


DROP CONSTRAINT pk_kdpelanggan

NOTE: sebuah Primary Key hanya dapat dihapus jika tidak ada
Foreign Key yang mengacu pada Primary Key tersebut

sp_helpconstraint nama_tabel

Melihat informasi constraint pada suatu tabel

77

Foreign Key
Foreign Key adalah satu atau gabungan beberapa kolom
yang datanya ada di dalam dalam kolom primary key
pada tabel lain
Foreign key datanya tidak unik
Foreign key menghubungkan tabel anak ke tabel induk
Tipe data antara PK dan FK harus sama

CREATE TABLE transaksi(


kdtransaksi CHAR(6),
kdpelanggan CHAR(10) CONSTRAINT fk_trplg FOREIGN KEY
REFERENCES pelanggan(kdpelanggan),
tgltransaksi DATETIME
)
78

Menambah dan Menghapus FK


-- menambah foreign key
ALTER TABLE transaksi
ADD CONSTRAINT fk_trans_pelanggan
FOREIGN KEY (kdpelanggan)
REFERENCES pelanggan(kdpelanggan)

-- menghapus foreign key


ALTER TABLE transaksi
DROP CONSTRAINT fk_trans_pelanggan

79

Unique

Unique digunakan agar tidak ada data yang sama


(unik) pada kolom-kolom yang bukan Primary Key

CREATE TABLE pelanggan(


kdpelanggan CHAR(10) CONSTRAINT pk_kdpelanggan PRIMARY
KEY,

nmpelanggan VARCHAR(25),
nomor_ktp VARCHAR(20) UNIQUE,
kota VARCHAR(15)
)

80

Check

Check digunakan untuk memvalidasi data yang


diinput pada tabel
Satu check dapat digunakan beberapa kolom, dapat
juga satu kolom memiliki lebih dari satu Check

CREATE TABLE pegawai


( kdpegawai CHAR(10),
nmpegawai VARHAR(25),
kota VARCHAR(15) CONSTRAINT ck_kota CHECK (LEN(kota)>=
5),

tgllahir SMALLDATETIME )

81

Default

Default digunakan jika ingin memberikan suatu nilai


tertentu jika pada suatu kolom datanya tidak diisi

CREATE TABLE pegawai


( kdpegawai CHAR(10),
nmpegawai VARHAR(25),

kota VARCHAR(15) CONSTRAINT df_kota DEFAULT Jakarta )

82

Menambah dan Menghapus Default


-- MENAMBAH CONSTRAINT
ALTER TABLE pegawai
ADD CONSTRAINT df_kota DEFAULT JAKARTA FOR kota
-- MENGHAPUS CONSTRAINT
ALTER TABLE pegawai
DROP CONSTRAINT df_kota

83

View

View adalah objek untuk menampilkan data yang


dibaca dari satu atau beberapa tabel
View bertindak sebagai tabel virtual read only
Alasan penggunaan view :

Sintaks pembuatan view :

Kompleksitas query
Masalah keamanan
CREATE VIEW nama_view AS query_select

Sintaks pemakaian view :

84

SELECT * FROM nama_VIEW

Contoh View
CREATE VIEW vw_customers AS
SELECT customerid, companyname, contactname,
address, city, country

FROM customers

membuat sebuah view dengan nama vw_Customers dimana hanya


ditampikan column CustomerID, CompanyName, ContactName, Address,
City dan Country dari table Customers.

CREATE VIEW vw_custorder AS


SELECT * FROM customers INNER JOIN orders
ON customers.customerid = orders.customerid

Membuat sebuah view bernama vw_custorder menampilkan semua kolom


dari data pemesanan barang yang dilakukan oleh customer

85

Contoh
CREATE VIEW VW_COMPPRODUCT
AS
SELECT COMPANYNAME, PRODUCTID, SUM(QUANTITY), SUM(QUANTITY*UNITPRICE)

FROM CUSTOMERS
INNER JOIN ORDERS ON CUSTOMERS.CUSTOMERID = ORDERS.CUSTOMERID
INNER JOIN [ORDER DETAILS] ON [ORDER DETAILS].ORDERID = ORDERS.ORDERID
WHERE PRODUCTID = 1 GROUP BY COMPANYNAME, PRODUCTID

Perintah tersebut juga akan menghasilkan ERROR dimana semua


column dalam view harus memiliki nama. Pada perintah SELECT
tersebut, column ke-tiga dan ke-empat tidak memiliki nama column.

SELECT * FROM VW_CUSTOMERS

Perintah tersebut akan menampilkan isi dari view vw_Customer

86

Mengubah dan Menghapus View


ALTER VIEW vw_customers
AS
SELECT companyname, contactname, city, country
FROM customers

mengubah view vw_Customers dimana hanya column


CompanyName, ContactName, City dan Country yang akan
ditampilkan

DROP VIEW vw_customers

Perintah tersebut akan menghapus view vw_Customers

87

Batch

Sekelompok perintah T-SQL yang dikirimkan oleh suatu


program aplikasi untuk dijalankan oleh SQL Server untuk
melakukan tugas tertentu dalam suatu waktu tertentu
Perintah-perintah dalam batch akan dikompilasi menjadi
satu executable unit yang disebut execution plan
Aturan pada batch :

CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE,


CREATE TRIGGER, dan CREATE VIEW tidak dapat
dikombinasikan dengan statement lain. Statement CREATE di
awal batch dan semua statement setelahnya dianggap bagian dari
definisi statement CREATE.
Sebuah tabel tidak dapat diubah dan kolom-kolom baru yang
direferensikan dalam satu batch.
Statement EXECUTE tidak perlu ditulis jika berada pada awal
batch.

Dalam suatu batch diakhiri dengan perintah GO


Dalam suatu file dapat terdiri dari beberapa batch
88

T-SQL Scripts

Merupakan urutan-urutan perintah T-SQL yang


disimpan dalam sebuah file
Dapat terdiri dari satu batch atau lebih
Perintah Go menandakan akhir suatu batch
Jika perintah Go tidak ada, maka script dianggap
memiliki satu batch saja

89

Contoh Batch Dalam Script


USE pubs
GO /* akhir batch */
CREATE VIEW auth_titles
AS SELECT * FROM authors
GO /* akhir batch */
SELECT * FROM auth_titles
GO /* akhir batch */

90

Manfaat T-SQL Script

Digunakan sebagai dokumentasi permanen dari


perintah-perintah untuk mengakses database
Transfer perintah-perintah dari satu komputer ke
komputer lainnya bila perlu
Dapat mempercepat pengajaran untuk menemukan
problem dalam kode, mengerti kode, dan mengubah
kode

91

Variabel

Variabel adalah representasi tempat penyimpanan


data dalam memori
Jenis Variabel :

User defined variable


Global variable

Sebelum dapat digunakan, variabel harus


dideklarasikan lebih dahulu

92

Deklarasi & Pengisian Variabel

Sintaks deklarasi :
DECLARE @<nama_variabel> <tipe data>

Sintaks pengisian variabel :


SET @<nama_variabel> = <nilai>
Atau
SELECT @<nama_variabel> = <nilai>

93

Contoh
-- Deklarasi variabel
DECLARE @A INT
DECLARE @B INT, @KATA VARCHAR(5)
-- Pemberian nilai (assignment)
SET @A = 10
SET @B = 5
SELECT @KATA = HELLO
-- Pemakaian variabel
PRINT @A
PRINT @B
PRINT @A + @B
GO
94

Contoh Error
declare @nama varchar(30)
declare @usia int, @tinggi int
set @nama = Britney
set @usia = 20
print Nama +@nama
go
print @usia

95

Fungsi cast()

Fungsi cast() berfungsi untuk mengubah tipe data


suatu variabel
Contoh :
declare @a int, @b int, @c int
set @a = 9
set @b = 4
set @c = @a + @b
print a + b = + cast(@c as char)

96

If Then

Control flow pengecekan suatu kondisi


Sintaks penulisan :
if <kondisi>
begin
statement(s)

end

97

Contoh
Declare @a int, @b int
Set @a = 3
Set @b = 5
If @a > @b
Begin
Print a > b
end

98

Operator Perbandingan
Operator

99

Arti

Sama dengan

>

Lebih besar

<

Lebih kecil

>=

Lebih besar atau sama dengan

<=

Lebih kecil atau sama dengan

<>

Tidak sama dengan

!=

Tidak sama dengan (not SQL-92 standard)

!<

Tidak lebih kecil dengan (not SQL-92 standard)

!>

Tidak lebih besar dengan (not SQL-92 standard)

If Then Else
Declare @a int, @b int
Set @a = 3
Set @b = 5
If @a > @b
Begin
Print a > b
End
Else
Print a < b

100

Contoh
Declare @a int, @b int
Set @a = 3
Set @b = 5
If @a > @b
Begin
Print a > b
End
Else
if @a < @b
Begin
Print a < b
End
Else
Print a = b

101

Case When Then


DECLARE @NAMA CHAR(10)
DECLARE @KET CHAR(30)
SET @NAMA = BRITNEY
SET @KET =
CASE @NAMA
WHEN TUKUL THEN KEMBALI KE LAPTOP
WHEN BRITNEY THEN OOPS I DID IT AGAIN
WHEN BULLDOG THEN GUK! GUK!
END
PRINT @KET

102

Case When Then Else


use northwind
select Nama = contactname, Posisi=
case
when ContactTitle like '%owner%' then 'Boss besar'
when ContactTitle like '%manager%' then 'Boss kecil'
else 'Kroco'
end,
Jabatan=contacttitle
from Customers

103

While
Declare @count int
Set @count = 0
While (@count < 10)
Begin
Print @count
Set @count = @count + 1
End

104

Transaction (1/2)

Transaction adalah urut-urutan operasi yang


dijalankan sebagai suatu unit kerja tunggal
Transaction selalu diawali dengan perintah :

BEGIN TRANSACTION
BEGIN TRANS

Dan dapat diakhiri dengan :

105

COMMIT TRANSACTION atau


ROLLBACK TRANSACTION

Transaction (2/2)

Perubahan data dengan menggunakan transaction,


tidak akan disimpan secara permanen jika belum
mengeksekusi perintah COMMIT TRANSACTION
Perubahan data dengan menggunakan transaction
masih dapat dibatalkan dengan menggunakan
ROLLBACK TRANSACTION dengan syarat; belum
melakukan COMMIT TRANSACTION

106

Contoh
SELECT * FROM [order details] WHERE productid=14
BEGIN TRAN
DELETE FROM [order details] WHERE productid=14
SELECT * FROM [order details] WHERE productid=14
ROLLBACK
SELECT * FROM [order details] WHERE productid=14

107

Cursor

Cursor adalah hasil suatu query yang :

108

Row-nya dapat dinavigasi


Me-retrieve data mulai dari posisi row saat ini
Datanya dapat dimodifikasi
Level visibility untuk user dapat diatur
Dikombinasikan dengan script, sp, dan trigger

Metode Permintaan Cursor

Melalui Transac-SQL
Melalui fungsi-fungsi DB API (Application
Programming Interface)

109

Langkah Umum Proses Cursor

Deklarasikan cursor
Jalankan query untuk membentuk cursor
Retrieve row dari cursor
Gunakan row
Tutup cursor

110

Proses Cursor dengan T-SQL

Deklarasikan variabel untuk menampung cursor


Asosiasikan variabel dengan perintah SQL
Buka cursor
Gunakan cursor
Tutup cursor

111

Perintah untuk Memantau Cursor

sp_cursor_list
sp_describe_cursor
sp_describe_cursor_columns
sp_describe_cursor_tables

112

Perintah FETCH

FETCH adalah perintah untuk menggerakkan pointer


pada cursor
Jenis FETCH :

113

FETCH NEXT
FETCH PRIOR
FETCH FIRST
FETCH LAST
FETCH ABSOLUTE
FETCH RELATIVE

@@fetch_status

Mengetahui status perintah fetch terakhir dijalankan


Status :

114

0 fetch sukses
-1 fetch gagal
-2 record hilang (didelete user lain)

@@cursor_rows

Mengetahui banyaknya row dalam suatu cursor

115

SDK untuk Cursor


use latihan
create table msbarang (
kdbarang varchar(5),
nmbarang varchar(50),
satuan varchar(12),
hgsatuan int,
jumstock int
)

insert into msbarang values ('ar002','disket fuji film','box',44000,20)


insert into msbarang values ('ar001','disket evrbatim','box',40000,10)
insert into msbarang values ('cr002','keyboard 104 keys','lusin',200000,20)
insert into msbarang values ('br001','monitor svga samsung
14"','buah',100000,12)
insert into msbarang values ('br002','scanner umax','buah',200000,4)
insert into msbarang values ('cr001','disket fuji film','box',44000,20)
116

Cursor Forward Only


Declare @kode varchar(5)
Declare @nama varchar(50)
Declare cursor_gw cursor for Select kdbarang, nmbarang from
msbarang Where satuan =Box
Open cursor_gw
Fetch next from cursor_gw into @kode, @nama
While(@@fetch_status=0)
Begin
print @kode + + @nama
fetch next from cursor_gw into @kode, @nama
End
Close cursor_gw
Deallocate cursor_gw

117

Cursor Scroll
declare @kode varchar(5)
declare @nama varchar(50)
-- declare @count int
declare cursor1 cursor scroll for select kdbarang, nmbarang from msbarang
where satuan='box'
open cursor1
fetch first from cursor1 into @kode, @nama
-- set @count = 0
while (@@fetch_status=0) -- and (@count<5)
begin
print @kode + ' ' + @nama
fetch next from cursor1 into @kode, @nama
-- set @count = @count + 1
end
close cursor1
deallocate cursor1

118

USE AdventureWorks
GO
-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Contact ORDER BY LastName, FirstName
-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR SELECT LastName, FirstName FROM
Person.Contact ORDER BY LastName, FirstName
OPEN contact_cursor
-- Fetch the last row in the cursor.
FETCH LAST FROM contact_cursor
-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM contact_cursor
-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM contact_cursor
-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM contact_cursor
-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM contact_cursor
CLOSE contact_cursor
DEALLOCATE contact_cursor
GO
119

Stored Procedure

Procedure adalah sekumpulan perintah T-SQL


(Transact-SQL) yang dapat mengambil dan
mengembalikan parameter.
Sebuah procedure hanya dapat dibuat pada
database yang aktif.
Sebuah procedure dapat memiliki parameter atau
tidak. Bila tidak ada parameter, maka akan dianggap
NULL.

120

Sintaks
CREATE PROC[EDURE] <procedure_name>
[ { <@parameter> <data_type> } [ = <default> ] ]
[,..n]
AS <sql_statement> [ ...n ]

121

Cara Mengekskusi
EXEC PR_CUSTOMER

ATAU
PR_CUSTOMER

122

Contoh #1
-- membuat sp
CREATE PROCEDURE pr_customers
AS
SELECT companyname, contactname, city, country
FROM customers

-- menjalankan sp
EXEC pr_customers
-- atau
pr_customers

123

Contoh #2
CREATE PROC pr_inscust
AS
INSERT customers (customerid, companyname,
contactname,
contacttitle) VALUES (zchan', zhao chan corp.',
zhao
chan', 'owner')

124

Melihat Kode SP

sp_helptext nama_stored_procedure

125

Procedure Berparameter
CREATE PROCEDURE pr_updcust
(@ID CHAR(5), @CITY VARCHAR(15), @CTRY VARCHAR(15))
AS
UPDATE customers
SET CITY = @CITY, COUNTRY = @CTRY
WHERE customerid = @ID

126

Eksekusi Procedure Berparameter

exec pr_UpdCust

exec pr_UpdCust 'MCHAN', 'Jakarta', 'Indonesia'

127

Mengubah Procedure
ALTER Procedure pr_UpdCust
(@id char(5))
AS
Delete Customers
Where CustomerID = @id

128

Menghapus Procedure
DROP PROCEDURE <procedure_name>
DROP PROCEDURE pr_UpdCust

129

Function

Function adalah sekumpulan perintah T-SQL yang dioptimasi dan di-compile dan dapat dipanggil untuk
bekerja sebagai unit tunggal.
Function tidak dapat digunakan untuk melakukan
perubahan terhadap keadaan global database.
Function dapat digunakan di dalam suatu query. Function
juga dapat dijalankan melalui perintah EXECUTE, seperti
halnya stored procedure.
Ada dua tipe Function, yaitu:

130

Function yang mengembalikan nilai skalar dan


Function yang mengembalikan table.

Function Returning Scalar


CREATE FUNCTION <function_name>
( [ { <@parameter_name> [AS] <data_type> [=
default] }
[ ,...n ] ] )
RETURNS <scalar_return_data_type>
[ AS ]
BEGIN
<function_body>
RETURN <scalar_expression>
END

131

Catatan

<function_body> adalah sekumpulan perintah TSQL yang digunakan untuk mengevaluasi nilai
skalar.
<scalar_expression> adalah nilai skalar yang
dikembalikan oleh function.

132

Contoh Function Returning Scalar


CREATE FUNCTION Fc_Selisih
(@tglawal DATETIME, @tglakhir DATETIME)
RETURNS int
AS
BEGIN
DECLARE @temp INT
SET @temp = DATEDIFF(DAY, @tglawal, @tglakhir)
RETURN @temp
END
--Penggunaan
Select LastName, dbo.Fc_Selisih(BirthDate,
getdate())
From Employees
133

Catatan

Untuk Function yang mengembalikan table, yang


dikembalikan adalah sebuah perintah SELECT.

134

Function Returning Table


CREATE FUNCTION <function_name>
( [ { @parameter_name [AS] <data_type> [ =
default ] }
[ ,...n ] ] )
RETURNS TABLE
[ AS ]
RETURN ( <select-stmt> )

135

Contoh Function Returning Table


-- Pembuatan function
Create Function Fc_Customers ()
Returns TABLE
AS
Return (Select CompanyName, ContactName,
ContactTitle
From Customers)
-- Pemakaian function
Select * From Fc_Customers ()

136

Mengubah Function
/*Mengubah function, drop function dahulu lalu
menulis ulang semua isi function*/

Create Function Fc_Selisih


(@tglawal datetime, @tglakhir datetime)
Returns int
AS
Begin
Declare @temp int
Set @temp = datediff(year, @tglawal, @tglakhir)
Return @temp
End

137

Menghapus Function

Sintaks :

DROP FUNCTION <function_name>

Contoh :

138

drop function fc_Selisih

Trigger

Trigger adalah suatu jenis stored procedure yang


dijalankan secara otomatis ketika pengguna
melakukan perintah untuk merubah data pada table
tertentu.

139

Jenis Trigger

Trigger INSERT
Trigger UPDATE
Trigger DELETE
atau gabungan dari trigger-trigger tersebut.

140

Catatan Tentang Trigger

SQL Server mengijinkan untuk membuat beberapa


trigger bagi setiap perintah INSERT, UPDATE dan
DELETE.

Jika pada table yang mengandung trigger terdapat


constraint, maka constraint dicek setelah INSTEAD OF
trigger berjalan dan sebelum AFTER trigger berjalan. Jika
constraint dilanggar, maka INSTEAD OF trigger
dibatalkan dan AFTER trigger tidak dijalankan.

141

Sintaks Trigger
CREATE TRIGGER <trigger_name>
ON <table>
{ FOR | AFTER } { INSERT | UPDATE | DELETE }
AS
<sql_statement> [ ...n ]

142

Contoh
Create Trigger tg_ins_Cust
ON Customers For insert
AS
Select * From Customers
Select * From inserted
Select * From deleted
Insert Customers (CustomerID, CompanyName,
ContactName) values ('MCHAN', 'Mitra Chan Corp.',
'Mitra Chan')

143

Perintah Tidak Boleh Untuk Trigger

Create database
Create procedure
Create default
Create index
Alter table
Alter view
Drop table

144

Create table
Create rule
Create view
Alter database
Alter procedure
Drop database
Drop procedure

Contoh
-- trigger untuk membatasi penghapusan row
-- lebih dari satu
Create Trigger tg_del_Cust
ON Customers For delete
AS
IF ((Select count(*) From deleted) > 1)
Begin
Rollback Tran
Print 'Tidak boleh menghapus lebih dari 1 record'
End

145

Contoh Trigger Mengupdate Tabel Lain

146

Contoh Memodifikasi Trigger


ALTER Trigger tg_ins_Cust
ON Customers For insert
AS
Declare @name varchar(30)
Set @name = (Select ContactName From inserted)
IF ((@name is null) or (@name = ''))
Begin
Rollback Tran
Print 'Column ContactName Harus Terisi'
End

147

Menghapus Trigger

Sintaks :
DROP TRIGGER <trigger_name>

Contoh :
Drop Trigger tg_ins_Cust

148

INSTEAD OF Trigger

INSTEAD OF trigger memungkinkan untuk


memperhatikan data yang akan dimasukkan ke
dalam table atau view dan memutuskan apa yang
akan dilakukan sebelum data dimasukkan secara
fisik.
INSTEAD OF trigger lebih banyak digunakan untuk
view dimana akan dilakukan manipulasi data
sebelum data tersebut dimasukkan ke table.

149

Sintaks
CREATE TRIGGER <trigger_name>
ON { <table> | <view> }
INSTEAD OF { INSERT | UPDATE | DELETE }
AS
<sql_statement> [ ...n ]

150

Contoh Penggunaan (1/4)


/* Membuat tabel country dan city */
create table country (
countryID int identity,
countryName varchar(32)
)
go
create table city (
cityID int identity ,
CityName varchar(32),
countryID int
)
go

151

Contoh Penggunaan (2/4)


-- Membuat view
create view v_geography
as
select countryName, cityName
from country
inner join city
on country.countryID = city.countryID

152

Contoh Penggunaan (3/4)


create trigger tr_v_geography_io
on v_geography
instead of insert as
BEGIN
insert country (countryName)
select distinct inserted.countryName
from inserted left join country on inserted.countryName = country.countryName
where country.countryName IS NULL /*** Exclude countries already in the table ***/
insert city (cityName, countryID)
select distinct inserted.cityName, country.countryID
from inserted inner join country on inserted.countryName = country.countryName
left join city on inserted.cityName = city.cityName
where city.cityName IS NULL
/*** Exclude cities already in the table ***/
END

153

Contoh Penggunaan (4/4)


select * from v_geography
select * from country
select * from city
insert v_geography select
select
select
select
select
select

154

'England', 'London' UNION


'England', 'Manchester' UNION
'Japan', 'Tokyo' UNION
'Japan', 'Osaka' UNION
'USA', 'Washington DC' UNION
'USA', 'New York'

Contoh Subquery

155

Anda mungkin juga menyukai