Anda di halaman 1dari 64

SISTEM BASIS DATA

C31040311

SQL – DDL & DML


Week 09
WIDYA SULIYANTI
widya@sttpln.ac.id
TOPIK BAHASAN

• Tipe data SQL


• Integrity Enhancement Feature
• Integrity Constraints
SQL

1. DDL (Data Definition Language)


Untuk mendefinisikan struktur basis data
2. DML (Data Manipulation Language)
Untuk mengambil dan memperbarui data
Penulisan SQL Commands

1. Reserved words adalah bagian dari SQL yang


penulisannya tidak dapat dipisahkan.
Ditulis dengan huruf besar
2. User-defined words ditentukan oleh user untuk
menyatakan obyek basis data seperti relasi, kolom dan
view.
Ditulis dengan huruf kecil
Penulisan SQL Commands

• Garis vertical (I) menyatakan pilihan


• { } : elemen yang diperlukan
• (…) : pengulangan 0 atau lebih
Contoh:
{a|b} (,c…)
Berarti a atau b diikuti pengulangan 0 atau lebih dari c
LITERALS

• Literal adalah konstan yang dipergunakan pada SQL


statement
• Semua literal non-angka harus menggunakan tanda
kutip tunggal (contoh: ‘London’)
• Semua literal angka tidak perlu menggunakan tanda
kutip tunggal (contoh: 650)
TIPE DATA SQL MENURUT ISO
TIPE DATA SQL

• CHAR : fixed-length character


• VARCHAR: varying-length character
• NUMBER [precision, [scale]]
• DECIMAL [precision, [scale]]
• Default scale: 0
• NUMBER (6,2) sampai dengan 9,999.99
INTEGRITY ENHANCEMENT FEATURE

• Lima tipe integrity constrains:


➢Required data (mandatory) : atribut yang harus memiliki
nilai (NOT NULL)
➢Domain constraint : nilai-nilai yang diperbolehkan untuk satu
atau lebih atribut
➢Entity integrity: Primary Key tidak boleh NULL (NOT NULL)
dan harus unik
REQUIRED DATA

• Mandatory (wajib) : atribut harus diisi dengan suatu


nilai → NOT NULL
CREATE TABLE STAFF
(

position VARCHAR(10) NOT NULL,
)
DOMAIN CONSTRAINT

• CHECK
CREATE TABLE STAFF (
sex CHAR NOT NULL
C1CHECK (sex in (‘M’, ‘F’)),

)
INTEGRITY ENHANCEMENT FEATURE -
ENTITY INTEGRITY
CREATE TABLE staff(

staffNo VARCHAR(5) PRIMARY KEY,

)
CREATE TABLE staff(

staffNo VARCHAR(5) NOT NULL,
PRIMARY KEY (staffNo)

);
INTEGRITY ENHANCEMENT FEATURE -
ENTITY INTEGRITY

CREATE TABLE VIEWING (


clientNo VARCHAR(5) NOT NULL,
propertyNo VARCHAR(5) NOT NULL,

PRIMARY KEY(clientNo, propertyNo),

)
INTEGRITY ENHANCEMENT FEATURE -
REFERENTIAL INTEGRITY

• Foreign Key (FK) adalah kolom atau kolom-kolom


yang menghubungkan setiap baris pada tabel anak
yang berisi FK ke baris pada table orang tua yang
berisi Primary Key (PK) yang sesuai
• Referential Integrity berarti jika FK mempunyai nilai,
nilai tersebut harus mengacu pada baris yang ada
pada tabel orang tua
INTEGRITY ENHANCEMENT FEATURE -
REFERENTIAL INTEGRITY
CREATE TABLE staff(

branchNo REFERENCES branch,

);
CREATE TABLE staff(

branchNo CHAR(4),
FOREIGN KEY (branchNo) REFERENCES branch(branchNo)
);
INTEGRITY ENHANCEMENT FEATURE -
REFERENTIAL INTEGRITY
CREATE TABLE staff(

branchNo REFERENCES branch,

);
CREATE TABLE staff(

branchNo CHAR(4),
FOREIGN KEY (branchNo) REFERENCES branch(branchNo)
);
INTEGRITY ENHANCEMENT FEATURE -
REFERENTIAL INTEGRITY
• Setiap INSERT/UPDATE yang berusaha untuk membuat
nilai Foreign Key (FK) di tabel anak tanpa ada nilai
yang sama di table orang tua akan ditolak
• Usaha untuk menghapus (delete) nilai pada tabel
orang tua dengan baris yang sesuai pada tabel anak
tergantung dari referential action yang ditentukan
menggunakan ON DELETE
INTEGRITY ENHANCEMENT FEATURE -
REFERENTIAL INTEGRITY
- ON DELETE CASCADE
Branch Staff
branchNo: B001 Semua data staff dengan branchNo:
Data dihapus B001 juga dihapus
- ON DELETE SET NULL
Branch Staff
branchNo: B001 Semua data staff dengan branchNo:
Data dihapus B001 di set nilai NULL
INTEGRITY ENHANCEMENT FEATURE -
REFERENTIAL INTEGRITY
Contoh:
• FOREIGN KEY (branchNo) REFERENCES
branch(branchNo) ON DELETE CASCADE
• FOREIGN KEY (branchNo) REFERENCES
branch(branchNo) ON DELETE SET NULL
DEFINISI DATA

• SQL DDL untuk membuat obyek database seperti


schema, tables, views dan indexes
• SQL DDL :
CREATE SCHEMA DROP SCHEMA
CREATE/ALTER TABLE DROP TABLE
CREATE VIEW DROP VIEW
CREATE INDEX DROP INDEX
DEFINISI DATA

• Relasi dan obyek basis data lainnya dapat berada


dalam suatu lingkungan (environment)
• Schema adalah koleksi dari obyek basis data yang
saling berhubungan
• Obyek di dalam schema dapat berupa tables, views
and character set. Semuanya mempunyai owner yang
sama.
CREATE SCHEMA

CREATE SCHEMA AUTHORIZATION user01


CREATE TABLE products
( product_id number(10) not null,
product_name varchar2(50) not null,
category varchar2(50),
CONSTRAINT products_pk PRIMARY KEY (product_id)
)
CREATE TABLE suppliers
( supplier_id number(10) not null,
supplier_name varchar2(50) not null,
city varchar2(25),
CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);
CREATE TABLE

CREATE TABLE tablename


{(colname DATATYPE [NOT NULL] [UNIQUE]
[DEFAULT defaultoption]
[CHECK searchcondition] [,...]}
[PRIMARY KEY (listofcolumns),]
{[UNIQUE (listofcolumns),] […,]}
{[FOREIGN KEY (listoffkcolumns)
REFERENCES Parenttablename [(listofckcolumns)],
[ON DELETE referentialAction ]] [,…]}
{[CHECK (searchCondition)] [,…] })
CREATE TABLE

CREATE TABLE menus


( menu_id VARCHAR2(20) NOT NULL
, menu_name VARCHAR2 (100)
, menu_type VARCHAR2 (20)
, menu_description VARCHAR2 (100)
, price NUMBER (10, 2)
, PRIMARY KEY (menu_id)
, CONSTRAINT menu_type_item
CHECK (menu_type IN ('Beverage'
, 'Food'))
);
TABEL
TABEL
TABEL
ALTER TABLE

• Menambah kolom baru


ALTER TABLE <nama_tabel> ADD (
<nama_kolom> <tipe_date>
, ….);
• Menghapus kolom
ALTER TABLE <nama_tabel> DROP (
<nama_kolom>
, …);
ALTER TABLE

• Menambah constraint baru


ALTER TABLE <nama_tabel> DROP (
<nama_kolom>
, …);
• Menghapus constraint
ALTER TABLE <nama_tabel> DROP PRIMARY KEY;
ALTER TABLE <nama_tabel> DROP CONSTRAINT staff_pk;
ALTER TABLE

• Set default column


ALTER TABLE <nama_tabel> MODIFY <nama_kolom> DEFAULT
‘<nilai default>’
DROP TABLE

• DROP TABLE <table_name> CASCADE CONSTRAINT


SQL DATA MANIPULATION LANGUAGE –
SELECT STATEMENT
SELECT [DISTINCT | ALL]
{* | [COLUMNEXPRESSION [AS NEWNAME]] [,...] }
FROM TABLENAME [ALIAS] [, ...]
[WHERE CONDITION]
[GROUP BY COLUMNLIST] [HAVING CONDITION]
[ORDER BY COLUMNLIST]
SQL DATA MANIPULATION LANGUAGE –
SELECT STATEMENT
FROM Menyatakan nama tabel
WHERE Menyaring baris
GROUP BY Membentuk kelompok dari baris dengan nilai kolom
yang sama
HAVING Menyaring kelompok berdasarkan kondisi
SELECT Menyatakan kolom-kolom yang akan muncul pada
output
ORDER BY Menyatakan urutan dari output
Hanya SELECT dan FROM yang wajib ada
CONTOH 1. SEMUA KOLOM, SEMUA BARIS

Tampilkan semua detil staff.

SELECT staffNo, fName, lName, position, sex, dob, salary,


branchNo
FROM Staff;

SELECT *
FROM Staff;
CONTOH 1. SEMUA KOLOM, SEMUA BARIS
CONTOH 2. KOLOM TERTENTU, SEMUA BARIS

Tampilkan gaji semua staf, hanya menampilkan staff number, first


name, last name dan salary

SELECT staffNo, fName, lName, salary


FROM Staff;
CONTOH 3. MENGGUNAKAN DISTINCT

Tampilkan semua property number dari semua property yang sudah dilihat.

SELECT propertyNo
FROM Viewing;
CONTOH 3. MENGGUNAKAN DISTINCT

Menggunakan DISTINCT to menghilangkan duplikasi.


SELECT DISTINCT propertyNo
FROM Viewing;
CONTOH 4. KOLOM PERHITUNGAN

Tampilkan gaji bulanan untuk semua staf, menampilkan staff number,


first name, last name dan salary.
SELECT staffNo, fName, lName, salary/12
FROM Staff;
atau
SELECT staffNo, fName, lName,
salary/12 AS monthlySalary
FROM Staff;
CONTOH 5. MEMBANDINGKAN KONDISI PENCARIAN

Tampilkan semua staff dengan gaji lebih besar dari 10,000


SELECT staffNo, fName, lName, position, salary
FROM Staff
WHERE salary > 10000;
CONTOH 6. MEMBANDINGKAN KONDISI PENCARIAN
LEBIH DARI SATU
Tampilkan semua address dari semua kantor cabang di London atau
Glasgow.
SELECT *
FROM Branch
WHERE city = ‘London’ OR city = ‘Glasgow’;
CONTOH 7. KONDISI PENCARIAN RANGE

Tampilkan semua staff dengan gaji antara 20.000 dan 30.000


SELECT staffNo, fName, lName, position, salary
FROM Staff
WHERE salary BETWEEN 20000 AND 30000;
CONTOH 7. KONDISI PENCARIAN RANGE

• Bentuk negative NOT BETWEEN


• BETWEEN dapat juga diganti sebagai berikut:
SELECT staffNo, fName, lName, position, salary
FROM Staff
WHERE salary>=20000 AND salary <= 30000;
CONTOH 8. SET MEMBERSHIP

Tampilkan semua manager dan supervisor.


SELECT staffNo, fName, lName, position
FROM Staff
WHERE position IN (‘Manager’, ‘Supervisor’);
CONTOH 8. SET MEMBERSHIP

• Versi negatif : NOT IN


• IN dapat dinyatakan sebagai berikut:
SELECT staffNo, fName, lName, position
FROM Staff
WHERE position=‘Manager’ OR
position=‘Supervisor’;
• Pemakaian IN lebih efisien jika berisi banyak nilai
CONTOH 9. PENYESUAIAN POLA

Tampilkan semua owners (pemilik properti) yang alamatnya mempunyai


string ‘Glasgow’
SELECT ownerNo, fName, lName, address, telNo
FROM PrivateOwner
WHERE address LIKE ‘%Glasgow%’;
CONTOH 9. PENYESUAIAN POLA

• SQL mempunyai symbol penyesuaian pola (pattern matching)


➢ % : urutan karakter 0 atau lebih
➢ _ (underscore) : karakter tunggal
• LIKE ‘%GLASGOW%’ berarti urutan karakter yang berisi karakter
‘Glasgow’
CONTOH 10. KONDISI NULL

Tampilkan semua data viewing untuk properti G4 dimana tidak ada


Comment (komentar).
• Ada 2 viewing untuk properti G4, satu dengan komentar dan satu
lagi tidak dengan komentar
• Di tes dengan menggunakan keyword (kata kunci) IS NULL
• Versi negatif (IS NOT NULL) untuk menguji nilai non-null
CONTOH 10. KONDISI NULL

SELECT clientNo, viewDate


FROM Viewing
WHERE propertyNo = ‘PG4’ AND
comment IS NULL;
CONTOH 11. URUTAN KOLOM TUNGGAL

Tampilkan semua gaji staff dan diurutkan secara menurun (descending)


SELECT staffNo, fName, lName, salary
FROM Staff
ORDER BY salary DESC;
CONTOH 12. URUTAN LEBIH DARI SATU KOLOM

Tampilkan semua properti berdasarkan urutan tipe properti naik


(ascending) dan harga sewa secara menurun (descending)
SELECT propertyNo, type, rooms, rent
FROM PropertyForRent
ORDER BY type, rent DESC;
AGREGAT

Berdasarkan ISO ada lima fungsi agregat:


COUNT : menghitung banyaknya nilai
SUM : menghitung jumlah nilai
AVG : menghitung nilai rata-rata
MIN : menentukan nilai minimum
MAX : menentukan nilai maksimum
AGREGAT

• Beroperasi pada kolom tunggal dan mengembalikan satu nilai


• COUNT, MIN, MAX berlaku untuk angka dan non-angka sedangkan
SUM dan AVG hanya digunakan untuk angka
• Selain COUNT(*) setiap fungsi agregat menghilangkan nilai null
terlebih dulu dan beroperasi pada nilai non-null yang tersisa
• COUNT(*) menghitung jumlah semua baris dari tabel, tanpa
memperhatikan nilai null dan duplikat
• DISTINCT menghilangkan duplikat
• DISTINCT tidak ada mempengaruhi MIN/MAX, tapi dapat
mempengaruhi SUM/AVG
AGREGAT

• Fungsi agregat hanya dapat digunakan pada SELECT list dan


HAVING clause
• Jika SELECT list terdapat fungsi agregat dan tidak ada GROUP BY
clause seperti di bawah ini maka SELECT statement ini menjadi
illegal:
SELECT staffNo, COUNT(salary)
FROM Staff;
CONTOH 13. PENGGUNAAN COUNT(*)

Berapa banyak properti yang harga sewanya lebih besar dari £ 350 ?
SELECT COUNT(*) AS myCount
FROM PropertyForRent
WHERE rent > 350;
CONTOH 14. PENGGUNAAN COUNT(DISTINCT)

Berapa banyak properti yang berbeda yang sudah dilihat di bulan Mei
2013?
SELECT COUNT(DISTINCT propertyNo) AS myCount
FROM Viewing
WHERE viewDate BETWEEN ‘1-May-13’
AND ‘31-May-13’;
CONTOH 15. PENGGUNAAN COUNT DAN SUM

Cari jumlah manager dan jumlah gaji semua manager


SELECT COUNT(staffNo) AS myCount,
SUM(salary) AS mySum
FROM Staff
WHERE position = ‘Manager’;
CONTOH 16. PENGGUNAAN MIN, MAX, AVG

Cari minimum, maksimum dan nilai rata-rata dari gaji staff


SELECT MIN(salary) AS myMin,
MAX(salary) AS myMax,
AVG(salary) AS myAvg
FROM Staff;
PENGELOMPOKKAN DENGAN GROUP BY

• Gunakan GROUP BY clause untuk mendapatkan nilai sub total


• SELECT dan GROUP BY saling terhubung, setiap item dalam SELECT
list harus bernilai tunggal per group dan SELECT clause berisi:
➢ Nama kolom
➢ Fungsi agregat
➢ Konstan
➢ Kombinasi dari item-item di atas
PENGELOMPOKKAN DENGAN GROUP BY

• Semua nama kolom pada SELECT list harus ada di GROUP BY clause
kecuali nama kolom itu hanya digunakan dalam fungsi agregat
• Jike WHERE digunakan dengan GROUP BY, WHERE dilakukan
terlebih dulu kemudian kelompok-kelompok akan dibentuk dari baris-
baris yang tersisa yang memenuhi kondisi tersebut
• ISO menyatakan dua null adalah sama dalam penggunaan GROUP
BY
PENGGUNAAN GROUP BY

Tampilkan jumlah staf dan total di setiap kantor cabang


SELECT branchNo,
COUNT(staffNo) AS myCount,
SUM(salary) AS mySum
FROM Staff
GROUP BY branchNo
ORDER BY branchNo;
PENGGUNAAN HAVING CLAUSE

• Having clause dirancang untuk digunakan dengan GROUP BY untuk


membatasi kelompok yang akan tampil dalam tabel hasil final
• Sama dengan WHERE, tapi WHERE menyaring baris-baris individu
sedangkan HAVING menyaring kelompok
• Nama kolom di HAVING clause juga harus muncul di GROUP BY list atau
masuk dalam fungsi agregat
PENGGUNAAN HAVING CLAUSE

Untuk setiap cabang dengan jumlah staf lebih dari satu, cari jumlah staff dan
jumlah gajinya pada setiap kantor cabang.
SELECT branchNo,
COUNT(staffNo) AS myCount,
SUM(salary) AS mySum
FROM Staff
GROUP BY branchNo
HAVING COUNT(staffNo) > 1
ORDER BY branchNo;

Anda mungkin juga menyukai