Computer Science, University of Brawijaya Putra Pandu Adikara, S.Kom Data Manipulation Language Basis Data 2
DML
Data Manipulation Language Pada aplikasi database, konsep CRUD: Create Insert Read (Retrieve) Select Update (Edit) Update Delete Delete sama seperti konsep pada programming untuk user interface, Misalnya juga untuk user-permission level aplikasi (user-group/role)
Select SELECT Untuk mendapatkan baris-baris record dari suatu tabel atau beberapa tabel sekaligus dengan kondisi tertentu SELECT-INTO digunakan untuk membuat tabel baru hasil dari query Select select * into ProductTemp from Products UNION digunakan untuk menggabungkan 2 query dengan definisi kolom yang sama DISTINCT digunakan untuk mencegah duplikasi sesuai kolom
Select SELECT dengan kolom kalkulasi USE AdventureWorks2008R2; GO SELECT p.Name AS ProductName, NonDiscountSales = (OrderQty * UnitPrice), Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount) FROM Production.Product AS p INNER JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID ORDER BY ProductName DESC; GO
Select SELECT dengan subquery USE AdventureWorks2008R2; GO SELECT DISTINCT Name FROM Production.Product AS p WHERE EXISTS (SELECT * FROM Production.ProductModel AS pm WHERE p.ProductModelID = pm.ProductModelID AND pm.Name LIKE 'Long- Sleeve Logo Jersey%'); GO SELECT DISTINCT p.LastName, p.FirstName FROM Person.Person AS p JOIN HumanResources.Employee AS e ON e.BusinessEntityID = p.BusinessEntityID WHERE IN (SELECT Bonus FROM Sales.SalesPerson AS sp WHERE e.BusinessEntityID = sp.BusinessEntityID); GO
Select SELECT dengan menggunakan ROW_NUMBER (ISO SQL:2003) SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY ProductID ASC) AS row_number, ProductID,SaleDate,SalePrice FROM SalesHistory ) foo WHERE row_number <= 200 Bisa digunakan sebagai limit
Select Baca lebih lanjut: Baca juga tentang JOIN
Insert Insert Untuk menambah baris pada suatu tabel Menambahkan data langsung isinya (urut dengan kolomnya) INSERT INTO table_name VALUES (value1, value2, value3,...) Menambahkan data dimana isi sesuai kolomnya (bisa tidak urut dengan kolomnya, atau hanya kolom tertentu saja) INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
Insert Menambahkan baris pada suatu tabel melalui seleksi INSERT california_authors (au_id, au_lname, au_fname) SELECT au_id, au_lname, au_fname FROM authors WHERE State = 'CA‘ Baca lebih lanjut lagi: us/library/aa933206(SQL.80).aspx
Delete Delete Digunakan untuk menghapus record atau himpunan record (sesuai kondisi yang ditentukan) USE AdventureWorks2008R2; GO DELETE FROM Production.ProductCostHistory WHERE StandardCost > ; GO
Delete: Subquery SQL-2003 Standard subquery USE AdventureWorks2008R2; GO DELETE FROM Sales.SalesPersonQuotaHistory WHERE BusinessEntityID IN (SELECT BusinessEntityID FROM Sales.SalesPerson WHERE SalesYTD > ); GO Transact-SQL extension USE AdventureWorks2008R2; GO DELETE FROM Sales.SalesPersonQuotaHistory FROM Sales.SalesPersonQuotaHistory AS spqh INNER JOIN Sales.SalesPerson AS sp ON spqh.BusinessEntityID = sp.BusinessEntityID WHERE sp.SalesYTD > ; GO
Baca lebih lanjut
Update Update Digunakan untuk mengubah record atau himpunan record (sesuai kondisi yang ditentukan) UPDATE authors SET state = 'PC', city = 'Bay City' WHERE state = 'CA' AND city = 'Oakland'
Baca lebih lanjut us/library/aa260662(SQL.80).aspx us/library/aa260662(SQL.80).aspx
Constraint
Konsep Dasar Constraint Entity Integrity memastikan tidak ada entitas yg sama (duplikasi record/row) dalam satu tabel Primary Key constraint Referential Integrity Memastikan record tidak dapat dihapus, apabila digunakan di tabel lain Foreign Key constraint Entity dan Referential Integrity bersamaan membentuk key integrity
Konsep Dasar Constraint Domain Integrity memastikan isi dari suatu kolom terbatas sesuai tipe, format, dan rentang yang dimungkinkan CHECK, UNIQUE, DEFAULT constraint Contoh: –Nama produk tidak boleh NULL. –Nama produk harus unik (unique). –Tanggal pemesanan tidak boleh hari esok. –Jumlah pemesanan produk harus lebih dari nol (0). User-Defined Integrity Digunakan untuk business-rule yang tidak masuk di entity, domain, referential integrity
Referential Integrity (lanjutan) Referential Integrity Constraints Mendefinisikan suatu aksi yang dilakukan apabila user menghapus atau memperbaharui primary key (dalam relationship primary key-foreign key) Digunakan untuk menjaga konsistensi baris-baris data antara dua tabel yang saling mempunyai relasi
Referential Integrity (lanjutan) Referential Integrity Constraints NO ACTION aksi default bila tidak didefinisikan, bila ada penghapusan/ pengubahan maka akan dibatalkan dan error akan dibangkitkan CASCADE Semua baris foreign key akan dihapus sesuai baris primary key yang dihapus SET NULL Semua baris foreign key, nilainya akan berubah menjadi NULL. Syaratnya kolom foreign key harus memperbolehkan nilai NULL SET DEFAULT Semua baris foreign key, nilainya akan berubah menjadi nilai default Syaratnya kolom foreign key harus mempunyai nilai default
Contoh CREATE TABLE Products ( ProductID TINYINT, ProductDescription VARCHAR(100), CONSTRAINT pk_ProductID PRIMARY KEY (ProductID) ) CREATE TABLE SalesHistory ( SaleID int IDENTITY(1,1) NOT NULL, ProductID TINYINT, SaleDate datetime NULL, SalePrice money NULL, CONSTRAINT pk_SaleID PRIMARY KEY (SaleID) CONSTRAINT fk_SalesHistoryProductID FOREIGN KEY (ProductID) REFERENCES Products(ProductID) ON DELETE CASCADE ON UPDATE CASCADE )
Contoh INSERT INTO Products (ProductID, ProductDescription) SELECT 1, 'BigScreen' UNION ALL SELECT 2, 'Computer' UNION ALL SELECT 3, 'PoolTable' GO SMALLINT = 1 WHILE <=100) BEGIN INSERT INTO SalesHistory(ProductID, SaleDate, SalePrice) VALUES(1, '3/11/1919'), DATEPART(ms, GETDATE()) )) INSERT INTO SalesHistory(ProductID, SaleDate, SalePrice) VALUES(2, '3/11/1927'), DATEPART(ms, GETDATE()) )) INSERT INTO SalesHistory(ProductID, SaleDate, SalePrice) VALUES(3, '3/11/1908'), DATEPART(ms, GETDATE()) )) + 1 END
Contoh Apa yang terjadi bila pada tabel Products, baris dengan ProductID=1 diganti menjadi ProductID=4? Apa yang terjadi bila pada tabel Products, baris dengan ProductID=4 dihapus? Bila ON DELETE CASCADE diubah menjadi ON DELETE SET NULL atau SET DEFAULT atau NO ACTION apa yang terjadi?
Domain Integrity: Unique Constraint Unique constraint menggunakan index untuk memastikan suatu kolom (atau himpunan kolom) tidak mempunyai isi yang sama (terduplikasi) Column constraint CREATE TABLE Products_2 ( ProductID int PRIMARY KEY, ProductName nvarchar (40) Constraint IX_ProductName UNIQUE ) Table constraint CREATE TABLE Products_2 ( ProductID int PRIMARY KEY, ProductName nvarchar (40), CONSTRAINT IX_ProductName UNIQUE(ProductName) )
Domain Integrity: Unique Constraint Untuk menambahkan constraint menggunakan alter table: CREATE TABLE Products_2 ( ProductID int PRIMARY KEY, ProductName nvarchar (40) ) ALTER TABLE Products_2 ADD CONSTRAINT IX_ProductName UNIQUE (ProductName) Contoh error ketika ada pelanggaran constraint Server: Msg 1505, Level 16, State 1, Line 1 CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID 2. Most significant primary key is 'Hamburger'. Server: Msg 1750, Level 16, State 1, Line 1 Could not create constraint. See previous errors. The statement has been terminated.
Domain Integrity: Check Constraint Check Constraint berisi ekspresi yang akan dievaluasi ketika menambah atau mengubah suatu record Jika evaluasi ekspresi bernilai false, maka record tidak akan disimpan dalam database Membuat check constraint sama seperti dlm membuat klausa WHERE Dapat menggunakan operator (, =,<>,=) serta BETWEEN, IN, LIKE, NULL dan kombinasi AND, OR Terdiri dari dua bagian: Name nama dari constraint Predicate kondisi aktual yang digunakan dalam pengecekan
Domain Integrity: Check Constraint Column constraint CREATE TABLE Products_2 ( ProductID int PRIMARY KEY, UnitPrice money CHECK(UnitPrice > 0 AND UnitPrice < 100) ) Table constraint CREATE TABLE Customers_2 ( CustomerID int, Phone varchar(24), Fax varchar(24), CONSTRAINT CK_PhoneOrFax CHECK(Fax IS NOT NULL OR PHONE IS NOT NULL) )
Batasan Check Constraint Ada batasan dalam check constraint: Tidak bisa mereferensi/merujuk ke row yang berbeda dalam satu tabel Tidak bisa mereferensi/merujuk ke kolom pada tabel yang berbeda
Domain Integrity: Default Constraint Default constraint digunakan sebagai nilai default pada suatu kolom ketika dalam statement INSERT isi nilainya tidak ditetapkan CREATE TABLE Orders_2 ( OrderID int IDENTITY NOT NULL, EmployeeID int NOT NULL, OrderDate datetime NULL DEFAULT(GETDATE()), Freight money NULL DEFAULT (0) CHECK(Freight >= 0), ShipAddress nvarchar (60) NULL DEFAULT('NO SHIPPING ADDRESS'), EnteredBy nvarchar (60) NOT NULL DEFAULT(SUSER_SNAME()) ) INSERT INTO Orders_2 (EmployeeID, Freight) VALUES(1, NULL) ???