[go: up one dir, main page]

Academia.eduAcademia.edu

SQL Server R2 2008

This file may be able to help you, sorry my english suck :"D

SQL Server By Sapta MH 1. 2. 3. Installasi SQL Server 2008 R2 Double klik sql server 2008 r2.exe Kemudian akan muncul semacam bar yang menandakan bahwa sql server sedang mengekstrak beberapa file ke komputer kita Lalu akan muncul seperti gambar di bawah ini,pilih menu installation kemudian pilih new installation or add features to an existing installation 4. Setelah itu tunggu beberapa saat 5. Lalu akan muncul gambar seperti dibawah ini, pilih new installation or add shared features, kemudian klik Next> 6. Kemudian selanjutnya chek list I accept the license terms. kemudian klik Next> 7. Klik next sampai muncul gambar seperti di bawah ini, pilih defaul instance, kemudian klik Next-> 8. Kemudian trus klik Next sampai instalasinya selesai. 9. Maka Sql Server 2008 R2 siap di jalankan NB: kalo mau liat dimana programnya ada di start->all program->microsoft sql server 2008 R2->Sql Server Management Studio. di sana anda bisa mengutak ngatik query buat databasenya. Data Konsep Database 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 Database Relasional DBMS RDBMS sinergi unsur-unsur penyimpanan dan pengelolaan data model database yang tabel-tabelnya memiliki hubungan dengan definisi tertentu DataBase Management System adalah perangkat lunak untuk mengelola sistem database Relational DataBase Management System adalah DBMS untuk database realsional Hirarki Data Nilai Dosen Mahasiswa file NIM database phrase 5 4 Nama 110011 Salma Hayek 1-Mar-1970 110012 Laetita Casta 21-Des-1974 110013 Arnold Sgarbuger 5-Jun-1960 word field File Database Phrase (kalimat) 1 Character (huruf) Word (kata) Nama field karakter 3 2 Tgl. Lahir Table Record (Row) Item Field (Column) Character 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. 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. 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 11 1-Tier (Client-Server) User Interface Presentation service Application service Business service Data service 12 2-Tier (Client-Server) Clients Tier I User Interface Presentation service Application service Tier II Application service Business service Data service Server 13 3-Tier Tier I User Interface Presentation service Tier II Application service Business service Data service Tier III Data service 14 N-Tier (Multi-Tier) Tier I User Interface Presentation service Tier II Application service Business service Tier IV Web service Tier III Data service 15 Pengenalan • SQL Server adalah perangkat lunak sistem management database relasional (Relational DataBase Management System [RDBMS]) • SQL Server menggunakan perintah TransactSQL (T-SQL) untuk melakukan proses pada database • T-SQL menggunakan ANSI SQL-92 sebagai fondasinya 16 Komponen Penyusun Database • Physical Database – File database secara fisik (.mdf, .ndf, .ldf) • Logical Database – Database yang tersimpan di dalam physical database (table, view) 17 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 .ldf  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 18 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 19 Objek-objek Database SQL Server • • • • • • • • Table Constraint Rule Default View Stored Procedure Trigger User Defined Data Types 20 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 21 SQL Server Management Studio Adalah program bantu dalam MS SQL Server 2008 R2 untuk menjalankan perintah-perintah SQL Login Window Tampilan Awal SQL Server Management Studio Tampilan SQL Server Management Studio Contoh CREATE DATABASE latihan • Membuat database latihan tanpa spesifikasi, menggunakan default CREATE DATABASE latihan ON ( NAME = filedata1, FILENAME = ‘ d:\filedata1.mdf’, SIZE = 10 mb, MAXSIZE = UNLIMITED, FILEGROWTH = 20% ) • Membuat database latihan dengan satu file data berukuran 10MB dan pertumbuhan 20% tidak terbatas 27 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%. 28 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 29 Contoh CREATE DATABASE latihan 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 latihan dengan dua buah file data, yaitu: FileData1 dan FileData2. 30 Contoh CREATE DATABASE latihan 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 latihan dengan sebuah file data (FileData1) dan sebuah log file (FileLog1). NOTE: spesifikasi Size, Maxsize, dan Filegrowth tidak wajib diberikan 31 Contoh Modifikasi Spec ALTER DATABASE latihan 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 32 Contoh ALTER DATABASE latihan ADD FILE ( NAME = filedata2, FILENAME = ‘d:\filedata2.ndf’, SIZE = 1, MAXSIZE = 500 mb )  menambahkan sebuah file data ke dalam database latihan ALTER DATABASE latihan ADD LOG FILE ( NAME = filelog2, FILENAME = ‘d:\filelog2.ldf’, SIZE = 640 kb, MAXSIZE = UNLIMITED )  menambahkan sebuah file log ke dalam database latihan, 33 Contoh ALTER DATABASE latihan REMOVE FILE filelog2 • Perintah ini untuk menghapus file dari database latihan (berlaku untuk file data maupun log). NOTE : file yang dihapus menggunakan nama file logical DROP DATABASE latihan • Perintah ini untuk menghapus database latihan. NOTE : database aktif harus MASTER (use master dahulu sebelum melakukan drop database) 34 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 ) 35 Tipe Data (1/2) BigInt Bilangan Bulat Bilangan Pasti Bilangan Biner Bilangan Desimal Uang Bilangan Approksimasi Bilangan Pecahan Int SmallInt Bit 0 atau 1 Decimal -10^38 +1 s/d 10^38 –1 Numeric idem Money Unicode -2^63 (-922,337,203,685,477.5808) s/d 2^63 - 1 (+922,337,203,685,477.5807) dgn akurasi 1/1000 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. January 1, 1900 s/d June 6, 2079 dg akurasi 1 menit January 1, 1753 s/d December 31, 9999 dengan akurasi 3/100 detik (3.33 millidetik) Char maximum length of 8,000 characters VarChar maximum length of 8,000 characters Text Karakter / String 2^15 (-32,768) s/d 2^15 - 1 (32,767). 0 s/d 255 DateTime Non Unicode -2^31 (-2,147,483,648) s/d 2^31 - 1 (2,147,483,647). TinyInt SmallDateTime Waktu -2^63 (-9.223.372.036.854.775.808) s/d 2^63-1 (9.223.372.036.854.775.807) 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 maximum length of 2^30 - 1 (1,073,741,823) characters. 36 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 37 Perbedaan Char dan Varchar  Char memiliki panjang tetap  Varchar memiliki panjang sesuai panjang datanya Char(5) b o b VarChar(5) b o b disimpan b o b b o b  Catatan : direkomendasikan menggunakan tipe data Char untuk kolom Primary Key dari pada Varchar 38 Contoh CREATE TABLE pelanggan ( kode_pelangan CHAR(5), nama_pelanggan VARCHAR(25), alamat VARCHAR(50), telepon VARCHAR(15), umur TINYINT, tgl_lahir SMALLDATETIME ) 39 Informasi tentang Tabel  Perintah untuk mendapatkan informasi tentang database yang ada adalah :  sp_help nama_tabel  Informasi yang dapat diperoleh adalah :           pemilik tipe tabel tgl. dibuat struktur tabel kolom identity rowGUIDcol filegroup index constraint referensi FK 40 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 --mengubah nama kolom SP_RENAME ‘ pelanggan.alamat’, ‘ domisili’,COLUMN’ ‘ --menghapus tabel DROP TABLE pelanggan 41 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 . 42 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. 43 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) 44 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. 45 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. 46 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 [ ]. 47 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 48 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. 49 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. 50 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 51 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 52 Operator Perbandingan (1/3) Operator Arti = Sama dengan <> atau != Tidak sama dengan > Lebih dari < kurang dari >= atau !< Lebih atau sama dengan <= atau !> Kurang atau sama dengan Contoh SELECT fname, lname FROM employees WHERE lname = 'Smith' SELECT fname, lname FROM employees WHERE status <> 'Active' SELECT fname, lname FROM employees WHERE hire_date > '12/31/90' SELECT fname, lname FROM employees WHERE job_lvl < 100 SELECT au_lname FROM authors WHERE au_lname >= 'T' SELECT fname, lname FROM employees WHERE hire_date <= '01/01/95' 53 Operator Perbandingan (2/3) Operator Arti BETWEEN expr1 AND expr2 jangkauan IS [NOT] NULL Apakah berisi NULL [NOT] LIKE Apakah sString cocok dengan pola Contoh SELECT fname, lname FROM employees WHERE hire_date BETWEEN '12/31/90' AND '12/31/91' SELECT fname, lname FROM employees WHERE photo_on_file IS NULL SELECT fname, lname FROM employees WHERE lname LIKE ('MAC%') 54 Operator Perbandingan (3/3) Operator Arti expr1 [NOT] IN (val1, val2, ...) Apakah ada di dalam daftar atau Contoh 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')) expr1 [NOT] IN (subquery) ANY (SOME) Hasil subquery sesuai dengan kriteria ALL Apakah semua hasil subquery sesuai dengan kriteria [NOT] EXISTS Apakah subquery mendapatkan data SELECT au_lname, au_fname FROM authors where city <> any (SELECT city FROM publishers) SELECT title FROM titles where advance > all (SELECT advance FROM publishers,titles where titles.pub_id = publishers.pub_id AND pub_name = 'Alogdata Infosystems') SELECT product_name FROM products WHERE EXISTS (SELECT * FROM orders, products WHERE orders.prod_id = products.prod_id) 55 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 56 ASCII NCHAR SOUNDEX CHAR PATINDEX SPACE CHARINDEX REPLACE STR QUOTENAME STUFF REPLICATE SUBSTRING DIFFERENCE LEN REVERSE UNICODE LOWER RIGHT UPPER LTRIM RTRIM LEFT 57 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 58 Fungsi Matematika ABS LOG10 ASIN POWER ACOS ATAN ATN2 PI RADIANS RAND CEILING ROUND COT SIN COS DEGREES EXP FLOOR LOG SIGN SQUARE SQRT TAN 59 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 60 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. SOUNDEX( ) Returns the Soundex code for the specified expression, which you can use to create "sounds like" searches. STR( ) Converts numeric data into a character string so you can manipulate it with text operators. 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. SELECT au_lname, au_fname FROM authors WHERE SOUNDEX(au_fname) = 'M240' Searches for names that sound like "Michael". SELECT str(job_id) + ' ' + str(job_lvl) FROM employee Displays the job_id and job_lvl columns (both numeric) in a single string. 61 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 62 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 63 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. 64 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 65 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 titles SELECT SUM(price), SUM(ISNULL(price,0)) FROM titles 66 Join  Join adalah operasi untuk menampilkan data dari dua atau lebih database yang memiliki relationship  Jenis Join  Inner join  Outer join  Left join  Right join  Full join  Cross join  Self join 67 Join Tabel_A NIP Nama Tabel_B 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 68 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 69 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 70 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 71 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 72 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 73 Tabel Pegawai NIP Nama Bos 001 Joni 001 002 Budi 001 003 Tuti 001 004 Amir 002 Self Join SELECT a.nip, a.nama, b.nama AS ‘ Nama Bos‘ FROM pegawai a INNER JOIN pegawai b ON a.bos = b.nip Hasil query NIP 001 002 003 004 Nama Joni Budi Tuti Amir Nama Bos Joni Joni Joni Budi 74 Latihan Join #1 • Gunakan database Northwind untuk menampilkan data pemesanan barang yang terdiri dari OrderID, ContactName, nama pegawai, dan OrderDate • Petunjuk : – Tabel yang dipergunakan : • Orders • Customers • Employees 75 Latihan Join #2 • Tampilkan data pemesanan yang dihasilkan pada Latihan Join #1 yang khusus memesan produk Singaporean Hokkien Fried Mee • Petunjuk : – Tabel yang dipergunakan : • • • • • Orders Customers Employees Order Details Products 76 Constraint • Constraint merupakan objek yang dipergunakan untuk menjaga integritas data • Jenis constraint : – Primary key – Foreign key – Unique – Default – Check 77 Integritas Data • Entity integrity (table level) : – Identity column – Unique • Domain integrity (column level) – Default – Check • Referential integrity (relational level) : – Primary key – Foreign key 78 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) ) 79 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 80 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 ) 81 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 82 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) ) 83 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 ) 84 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’ ) 85 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 86 View  View adalah objek untuk menampilkan data yang dibaca dari satu atau beberapa tabel  View bertindak sebagai tabel virtual read only  Alasan penggunaan view :  Kompleksitas query  Masalah keamanan  Sintaks pembuatan view :  CREATE VIEW nama_view AS query_select  Sintaks pemakaian view :  SELECT * FROM nama_VIEW 87 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 88 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 89 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 90 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 91 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 92 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 */ 93 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 94 Variabel • Variabel adalah representasi tempat penyimpanan data dalam memori • Jenis Variabel : – User defined variable – Global variable • Sebelum dapat digunakan, variabel harus dideklarasikan lebih dahulu 95 Deklarasi & Pengisian Variabel • Sintaks deklarasi : DECLARE @<nama_variabel> <tipe data> • Sintaks pengisian variabel : SET @<nama_variabel> = <nilai> Atau SELECT @<nama_variabel> = <nilai> 96 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 97 Contoh Error declare @nama varchar(30) declare @usia int, @tinggi int set @nama = ‘ Britney’ set @usia = 20 print ‘ Nama ‘ +@nama go print @usia 98 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) 99 If Then • Control flow  pengecekan suatu kondisi • Sintaks penulisan : if <kondisi> begin statement(s) end 100 Contoh Declare @a int, @b int Set @a = 3 Set @b = 5 If @a > @b Begin Print a > b end 101 Operator Perbandingan Operator = > < >= <= <> != !< !> 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) 102 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 103 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 104 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 105 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 106 While Declare @count int Set @count = 0 While (@count < 10) Begin Print @count Set @count = @count + 1 End 107 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 : – COMMIT TRANSACTION atau – ROLLBACK TRANSACTION 108 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 109 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 110 Cursor • Cursor adalah hasil suatu query yang : – 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 111 Metode Permintaan Cursor • Melalui Transac-SQL • Melalui fungsi-fungsi DB API (Application Programming Interface) 112 Langkah Umum Proses Cursor • • • • • Deklarasikan cursor Jalankan query untuk membentuk cursor Retrieve row dari cursor Gunakan row Tutup cursor 113 Proses Cursor dengan T-SQL • Deklarasikan variabel untuk menampung cursor • Asosiasikan variabel dengan perintah SQL • Buka cursor • Gunakan cursor • Tutup cursor 114 Perintah untuk Memantau Cursor • • • • sp_cursor_list sp_describe_cursor sp_describe_cursor_columns sp_describe_cursor_tables 115 Perintah FETCH • FETCH adalah perintah untuk menggerakkan pointer pada cursor • Jenis FETCH : – FETCH NEXT – FETCH PRIOR – FETCH FIRST – FETCH LAST – FETCH ABSOLUTE – FETCH RELATIVE 116 @@fetch_status • Mengetahui status perintah fetch terakhir dijalankan • Status : – 0  fetch sukses – -1  fetch gagal – -2  record hilang (didelete user lain) 117 @@cursor_rows • Mengetahui banyaknya row dalam suatu cursor 118 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) 119 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 120 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 121                      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 122 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. 123 Sintaks CREATE PROC[EDURE] <procedure_name> [ { <@parameter> <data_type> } [ = <default> ] ] [,..n] AS <sql_statement> [ ...n ] 124 Cara Mengekskusi EXEC PR_CUSTOMER ATAU PR_CUSTOMER 125 Contoh #1 -- membuat sp CREATE PROCEDURE pr_customers AS SELECT companyname, contactname, city, country FROM customers -- menjalankan sp EXEC pr_customers -- atau pr_customers 126 Contoh #2 CREATE PROC pr_inscust AS INSERT customers (customerid, companyname, contactname, contacttitle) VALUES (‘zchan’, ‘zhao chan corp.', ‘zhao chan', 'owner') 127 Melihat Kode SP • sp_helptext nama_stored_procedure 128 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 129 Eksekusi Procedure Berparameter • exec pr_UpdCust • exec pr_UpdCust 'MCHAN', 'Jakarta', 'Indonesia' 130 Mengubah Procedure ALTER Procedure pr_UpdCust (@id char(5)) AS Delete Customers Where CustomerID = @id 131 Menghapus Procedure DROP PROCEDURE <procedure_name> DROP PROCEDURE pr_UpdCust 132 Function • Function adalah sekumpulan perintah T-SQL yang di-optimasi 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: – Function yang mengembalikan nilai skalar dan – Function yang mengembalikan table. 133 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 134 Catatan • <function_body> adalah sekumpulan perintah T-SQL yang digunakan untuk mengevaluasi nilai skalar. • <scalar_expression> adalah nilai skalar yang dikembalikan oleh function. 135 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 136 Catatan • Untuk Function yang mengembalikan table, yang dikembalikan adalah sebuah perintah SELECT. 137 Function Returning Table CREATE FUNCTION <function_name> ( [ { @parameter_name [AS] <data_type> [ = default ] } [ ,...n ] ] ) RETURNS TABLE [ AS ] RETURN ( <select-stmt> ) 138 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 () 139 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 140 Menghapus Function • Sintaks : – DROP FUNCTION <function_name> • Contoh : – drop function fc_Selisih 141 Trigger • Trigger adalah suatu jenis stored procedure yang dijalankan secara otomatis ketika pengguna melakukan perintah untuk merubah data pada table tertentu. 142 Jenis Trigger • • • • Trigger INSERT Trigger UPDATE Trigger DELETE atau gabungan dari trigger-trigger tersebut. 143 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. 144 Sintaks Trigger CREATE TRIGGER <trigger_name> ON <table> { FOR | AFTER } { INSERT | UPDATE | DELETE } AS <sql_statement> [ ...n ] 145 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') 146 • • • • • • • Perintah Tidak Boleh Untuk Trigger Create database Create procedure Create default Create index Alter table Alter view Drop table • • • • • • • Create table Create rule Create view Alter database Alter procedure Drop database Drop procedure 147 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 148 Contoh Trigger Mengupdate Tabel Lain 149 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 150 Menghapus Trigger • Sintaks : DROP TRIGGER <trigger_name> • Contoh : Drop Trigger tg_ins_Cust 151 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. 152 Sintaks CREATE TRIGGER <trigger_name> ON { <table> | <view> } INSTEAD OF { INSERT | UPDATE | DELETE } AS <sql_statement> [ ...n ] 153 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 154 Contoh Penggunaan (2/4) -- Membuat view create view v_geography as select countryName, cityName from country inner join city on country.countryID = city.countryID 155 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 156 Contoh Penggunaan (4/4) select * from v_geography select * from country select * from city insert v_geography select select select select select select 'England', 'London' UNION 'England', 'Manchester' UNION 'Japan', 'Tokyo' UNION 'Japan', 'Osaka' UNION 'USA', 'Washington DC' UNION 'USA', 'New York' 157 Contoh Subquery 158