with
SQL Server
Oleh
Ir.Hartono
Konsep Database
Data
Informasi
Database
Sistem informasi
Sistem Database
Database Relasional
DBMS
RDBMS
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)
Character (huruf)
Character
3
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
Desktop
Personal
Standard
Developer
Enterprise
12
Logical Database
Database yang tersimpan di dalam physical database
(table, view)
13
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
MSDB
Menyimpan data-data yang digunakan MS SQL Agent
Model
Database model untuk membuat database baru
TempDB
Menyimpan sementara hasil query yang kompleks
15
Table
Constraint
Rule
Default
View
Stored Procedure
Trigger
User Defined Data Types
16
SELECT
INSERT
UPDATE
DELETE
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
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
24
FILEGROWTH
25
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
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
31
Tabel
nama_kolomn tipe_data )
32
Bilangan
Pasti
Bilangan
Biner
Bilangan
Desimal
Int
SmallInt
TinyInt
0 s/d 255
Bit
0 atau 1
Decimal
Numeric
idem
Money
Uang
Bilangan
Approksimasi
Bilangan
Pecahan
SmallMoney
Real
Float
SmallDateTime
Waktu
DateTime
Non
Unicode
Char
VarChar
Text
Karakter /
String
Unicode
NChar
NVarChar
NText
33
January 1, 1753 s/d December 31, 9999 dengan akurasi 3/100 detik (3.33 millidetik)
Binary
VarBinary
Image
cursor
sql_variant
Tipe Lain
table
timestamp
uniqueidentifier
34
Char(5)
disimpan
VarChar(5)
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
sp_help nama_tabel
37
pemilik
tipe tabel
tgl. dibuat
struktur tabel
kolom identity
rowGUIDcol
filegroup
index
constraint
referensi FK
--menghapus tabel
DROP TABLE pelanggan
--mengubah nama kolom
SP_RENAME pelanggan.alamat, domisili, COLUMN
38
Input Data
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
Select Data
Filtering
Filtering : Where
46
Logical Operators
47
Operator BETWEEN
48
Operator LIKE
%
: 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
Arti
Contoh
Sama dengan
<> atau !=
>
Lebih dari
<
kurang dari
50
Arti
Contoh
IS [NOT] NULL
[NOT] LIKE
Apakah sString
cocok dengan pola
51
Arti
Contoh
expr1 [NOT] IN
(val1, val2, ...)
ANY (SOME)
ALL
[NOT] EXISTS
Apakah subquery
mendapatkan data
atau
expr1 [NOT] IN
(subquery)
52
Fungsi String
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
FUngsi Konversi
CONVERT( )
SOUNDEX( )
STR( )
58
Pengurutan
59
Fungsi Agregat
GROUP BY
61
Fungsi IsNull()
62
Manfaat IsNull()
titles
63
titles
titles
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
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
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
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
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
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
72
Orders
Customers
Employees
Latihan Join #2
73
Orders
Customers
Employees
Order Details
Products
Constraint
74
Primary key
Foreign key
Unique
Default
Check
Integritas Data
Identity column
Unique
Default
Check
75
Primary key
Foreign key
Primary Key
76
Menambah constraint PK
NOTE: sebuah Primary Key hanya dapat dihapus jika tidak ada
Foreign Key yang mengacu pada Primary Key tersebut
sp_helpconstraint nama_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
79
Unique
nmpelanggan VARCHAR(25),
nomor_ktp VARCHAR(20) UNIQUE,
kota VARCHAR(15)
)
80
Check
tgllahir SMALLDATETIME )
81
Default
82
83
View
Kompleksitas query
Masalah keamanan
CREATE VIEW nama_view AS query_select
84
Contoh View
CREATE VIEW vw_customers AS
SELECT customerid, companyname, contactname,
address, city, country
FROM customers
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
86
87
Batch
T-SQL Scripts
89
90
91
Variabel
92
Sintaks deklarasi :
DECLARE @<nama_variabel> <tipe data>
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()
96
If Then
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
>=
<=
<>
!=
!<
!>
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
102
103
While
Declare @count int
Set @count = 0
While (@count < 10)
Begin
Print @count
Set @count = @count + 1
End
104
Transaction (1/2)
BEGIN TRANSACTION
BEGIN TRANS
105
Transaction (2/2)
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
108
Melalui Transac-SQL
Melalui fungsi-fungsi DB API (Application
Programming Interface)
109
Deklarasikan cursor
Jalankan query untuk membentuk cursor
Retrieve row dari cursor
Gunakan row
Tutup cursor
110
111
sp_cursor_list
sp_describe_cursor
sp_describe_cursor_columns
sp_describe_cursor_tables
112
Perintah FETCH
113
FETCH NEXT
FETCH PRIOR
FETCH FIRST
FETCH LAST
FETCH ABSOLUTE
FETCH RELATIVE
@@fetch_status
114
0 fetch sukses
-1 fetch gagal
-2 record hilang (didelete user lain)
@@cursor_rows
115
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
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
exec pr_UpdCust
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
131
Catatan
<function_body> adalah sekumpulan perintah TSQL yang digunakan untuk mengevaluasi nilai
skalar.
<scalar_expression> adalah nilai skalar yang
dikembalikan oleh function.
132
Catatan
134
135
136
Mengubah Function
/*Mengubah function, drop function dahulu lalu
menulis ulang semua isi function*/
137
Menghapus Function
Sintaks :
Contoh :
138
Trigger
139
Jenis Trigger
Trigger INSERT
Trigger UPDATE
Trigger DELETE
atau gabungan dari trigger-trigger tersebut.
140
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
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
146
147
Menghapus Trigger
Sintaks :
DROP TRIGGER <trigger_name>
Contoh :
Drop Trigger tg_ins_Cust
148
INSTEAD OF Trigger
149
Sintaks
CREATE TRIGGER <trigger_name>
ON { <table> | <view> }
INSTEAD OF { INSERT | UPDATE | DELETE }
AS
<sql_statement> [ ...n ]
150
151
152
153
154
Contoh Subquery
155