MODUL II SQL MENGGUNAKAN SQL SERVER 2000 ------------------------- SUBSTRING SUBQUERY AGGREGATE FUNCTION STORED PROCEDURE STORED FUNCTION DAN VIEW by Abdul Malik Ikhsan samsonasik@gmail.com http://samsonasik.wordpress.com
/* membuat database modul2 create database modul2 /* menggunakan database yang telah dibuat, dalam hal ini, modul2 use modul2 /* membuat table pegawai create table pegawai(nip char(7) not null primary key, nama_pegawai char(50), alamat_pegawai char(100),gapok float) /* describe table pegawai sp_columns pegawai /* membuat table absensi create table absensi(tgl datetime,nip char(7),keterangan char(5)) /* inputkan data pegawai ke tabel pegawai insert into pegawai(nip,nama_pegawai,alamat_pegawai,gapok) values('p001','abdul Malik Ikhsan','Jalan Jakarta No. 28',1000000) insert into pegawai(nip,nama_pegawai,alamat_pegawai,gapok) values('p002','helmi Faisal Muttaqin','Jalan Labuhan No. 122',2000000) insert into pegawai(nip,nama_pegawai,alamat_pegawai,gapok) values('p003','moh. Jakaria','Jalan Plesiran 31',3000000) /* sekarang, inputkan data absensi ke tabel absensi insert into absensi(tgl,nip,keterangan) values('2007-01- 01','p003','hadir') insert into absensi(tgl,nip,keterangan) values('2007-01- 01','p002','izin') insert into absensi(tgl,nip,keterangan) values('2007-12- 13','p001','sakit') insert into absensi(tgl,nip,keterangan) values('2007-10- 12','p002','izin') insert into absensi(tgl,nip,keterangan) values('2007-11- 12','p002','hadir') /* seleksi absensi pegawai yang hadir select * from absensi where keterangan = 'hadir'
/* seleksi absensi pegawai yang izin select * from absensi where keterangan = 'izin' /* seleksi absensi pegawai yang sakit select * from absensi where keterangan = 'sakit' /* seleksi absensi pegawai yang izin dan tanggal tertentu select * from absensi where keterangan = 'izin' and tgl= '2007-11-12' /* seleksi antara tanggal tertentu sampai tanggal tertentu penggunaan between ini juga berlaku untuk yang lain... select * from absensi where tgl between '2007-01-01' and '2007-11-12' /* seleksi absensi pegawai yang TIDAK hadir select * from absensi where keterangan!='hadir' /* seleksi absensi tabel tertentu dengan like atau = select tgl,nip,keterangan from absensi where tgl like '%2007%' select tgl,nip,keterangan from absensi where tgl = '2007-01-01' /* seleksi tanggal dengan format dd/mm/yy SELECT CONVERT(VARCHAR(8), tgl, 3) AS tgl from absensi /* seleksi tanggal dengan format dd/mm/yyyy SELECT CONVERT(VARCHAR(10), tgl, 103) AS tgl from absensi /* seleksi tanggal dengan format mm/dd/yy SELECT CONVERT(VARCHAR(8), tgl, 1) AS tgl from absensi /* seleksi tanggal dengan format mm/dd/yy SELECT CONVERT(VARCHAR(10), tgl, 101) AS tgl from absensi /* SUBSTRING = adalah pengambilan beberapa karakter dari field dengan panjang tertentu select substring(nama_pegawai,1,5) as subnama from pegawai select substring(convert(varchar(10),tgl,103),1,5) as tgl from absensi
select substring(convert(varchar(10),tgl,103),4,2) as tgl from absensi /* dengan substring,kita bisa tahu absensi untuk bulan tertentu di bawah ini, tidak menampilkan tahun, semua yang substring bulan = '01' diseleksi :) select * from absensi where substring(convert(varchar(10),tgl,103),4,2)='01' /* ----------------------------------------- Sekarang, kita akan coba tampilkan data pegawai yang tidak hadir dengan format sebagai berikut /* Tgl --- Nama Pegawai --- Keterangan (-- mencari yang tidak hadir --) select a.tgl,b.nama_pegawai, a.keterangan from absensi a, pegawai b where b.nip=a.nip and a.keterangan!='hadir' /* Tgl --- Nama Pegawai --- Keterangan (-- mencari yang hadir dan izin saja --) select a.tgl,b.nama_pegawai, a.keterangan from absensi a, pegawai b where b.nip=a.nip and a.keterangan in('hadir','izin') /* SUBQUERY menampilkan query dalam query /* contoh : menampilkan data pegawai yang tidak melakukan absen /bolos/tidak ada keterangan select * from pegawai where nip<>all(select nip from absensi where tgl='2007-01-01') select * from pegawai where nip!=all(select nip from absensi where tgl='2007-01-01')
/* menampilkan data pegawai yang melakukan absen nip ada dalam record2 yang ada dalam table absensi select * from pegawai where nip=any(select nip from absensi where tgl='2007-01-01') /* AGGREGATE FUNCTION Berfungsi sebagai fungsi matematis dalam SQL /* =======COUNT========== Menghitung jumlah record select count(*) as jumlah from pegawai select count(*) as jumlah from pegawai where nip='p001' /* ========MAX DAN MIN======== -------biasanya max digunakan untuk menghitung nilai tertinggi yang tipe datanya INTEGER atau FLOAT --------- /* menghitung nilai tertinggi untuk tipe string/char select max(nip) as nipteratas from pegawai /* menghitung nilai terah untuk tipe string/char select min(nip) as nipterbawah from pegawai /* CONTOH REAL MAX DAN MIN select max(gapok) as maxgaji,min(gapok) as min_gaji from pegawai /* =========AVG========= Digunakan untuk menghitung rata-rata select avg(gapok) as rata2gaji from pegawai /* ==========SUM======== Digunakan untuk menjumlahkan nilai select sum(gapok) from pegawai
select sum(gapok) from pegawai where nama_pegawai like '%sa%' /*STORED PROCEDURE /* Stored Procedure dapat dikatakan instruksi yang dilakukan untuk menyingkat statement query yang sering diulang2 create proc qpeg as select * from pegawai /* panggil procedure exec qpeg /* membuat procedure dengan memasukkan parameter create proc peg_nip @nip char(7) as select * from pegawai where nip=@nip exec peg_nip 'p001' /* memberi nilai default pada parameter create proc peg_nip2 @nip char(7)='p002' as select * from pegawai where nip=@nip /* kita tidak perlu menambahkan parameter karena sudah diberi nilai default exec peg_nip2 create proc peg_nip3 @nip char(7)='%p00%' as select * from pegawai where nip like @nip exec peg_nip3 /* Dengan deklarasi create proc peg_ket @nip char(7) as declare @nama char(20),@keterangan char(50) select @nama=nama_pegawai from pegawai where nip=@nip if (@nama='abdul Malik Ikhsan') set @keterangan='ganteng' else set @keterangan='biasa aja tuh' print @nama+' orangnya '+@keterangan
exec peg_ket 'p001' /* STORED FUNCTION hampir sama dengan stored procedure,hanya saja dia mengembalikan nilai yang kita inginkan :) /* contoh --> mengembalikan nilai dari tabel create function getnama(@nip char(7)) returns table as return (select nama_pegawai from pegawai where nip=@nip) /* cara panggil select * from getnama('p001') /* mengembalikan nilai dengan parameter create function getnamalagi(@nip char(7)) returns char(50) as declare @nama char(50) set @nama=(select nama_pegawai from pegawai where nip=@nip) return @nama /* jika kita meklarasikan parameter, berarti untuk memanggilnya, kita harus memanggil dbo-nya(database objecknya) select dbo.getnamalagi('p001') as nama create function getalamat(@nip char(7)) returns char(50) as declare @alamat char(50) set @alamat=(select alamat_pegawai from pegawai where nip=@nip) return @alamat select dbo.getalamat('p002') /* MENGGABUNGKAN STORED PROCEDURE DAN STORED FUNCTION misalkan, kita punya procedure tampilkan alamat berdasarkan nip
yang diinputkan dalam parameter procedure tersebut... --------- kita tampilkan keterangan dengan function :) create proc ambilketerangan @nip char(7) as select alamat_pegawai from pegawai where nama_pegawai=(select * from getnama(@nip)) exec ambilketerangan 'p001' /* VIEW view adalah pandangan yang diciptakan agar proses pengambilan tidak langsung ke tabel, tetapi melalui object view yang kita create hanya saja, ia tidak bisa passing parameter create view speg_view as select * from pegawai where nip!=all(select nip from absensi where keterangan='izin') select * from speg_view /* CONTOH KASUS AGGREGATE FUNCTION UNTUK HITUNG TOTAL GAJI ANGGAP SAJA SETIAP KALI ABSENSI DENGAN KETERANGAN 'HADIR' BERARTI ADA TAMBAHAN 30000 YANG NANTINYA DIKALIKAN JUMLAH HARI DAN DITAMBAHKAN GAJI POKOK create proc hitunggajitotal @nip char(7) as declare @gapok int,@jmlhari int,@gatot int set @jmlhari=(select count(*) as jmlhari from absensi where keterangan='hadir' and nip=@nip) set @gapok=(select gapok from pegawai where nip=@nip) set @gatot=@gapok+(@jmlhari*30000) print @gatot exec hitunggajitotal 'p002'