Topic 4
Topic 4
DATABASE DESIGN
TOPIC 4.0
STRUCTURED QUERY LANGUAGE
What will you
learn
01
Apply SQL command to a database
01 Apply SQL commands to a database
RECAP
DATABASE
What is DATABASE?
• Collection of related data
• Managed using Database Management System
(DBMS)
• SQL SERVER
• ORACLE
Manage here means there must
be a way for us to communicate
with the database
What is SQL?
Language used to
communicate with a
relational DBMS
Execute SQL can execute queries against a database
SQL
SQL
department
student
ID Name Add Phone Age
Syntax :
SQL – DDL –
CREATE CREATE DATABASE <database_name>;
Upon Success
PUO
Database created.
SQL – DDL Data type in SQL
– CREATE
Syntax :
Table created
SQL – DDL CREATE TABLE STAFF
( Staff_ID VARCHAR(7) NOT NULL UNIQUE,
Table STAFF
Staff_ID Staff_Name Salary Address
STAFF PUO
Syntax :
ALTER TABLE <table_name>
SQL – DDL – ADD (Column datatype) [, Column
ALTER datatype]…;
Upon Success
STAFF
Table altered
PUO
SQL – DDL
– ALTER ALTER TABLE STAFF
ADD Test numeric (5,2);
Table STAFF
15.21
Syntax :
ALTER TABLE <table_name>
SQL – DDL – MODIFY (Column datatype) [, Column
ALTER datatype]…;
Upon Success
STAFF
Table altered
PUO
SQL – DDL
– ALTER ALTER TABLE STAFF
MODIFY Test numeric (5,1);
Table STAFF
15.2
Syntax :
ALTER TABLE <table_name>
SQL – DDL – DROP (Column) ;
ALTER
Upon Success
STAFF
Table altered
PUO
SQL – DDL
– ALTER ALTER TABLE STAFF
DROP Test;
Table STAFF
Upon Success
STAFF
Table dropped
PUO
SQL – FOREIGN KEY
CREATE TABLE DEPARTMENTS
(Dept_Id Varchar(5) Not Null Unique,
Dept_Name Varchar(30),
Primary Key(Dept_Id));
SQL
STAFF PUO
Upon Success
1 row created
SQL – DML
– INSERT INSERT INTO STAFF (Staff_Id, Staff_Name, Salary,
Address) VALUES (‘1’, ‘ ALEX’, 1000.10, ‘SELANGOR’);
Table STAFF
Table STAFF
Table STAFF
– INSERT Id : 4
Name : ALI
salary : unknown
Address : JOHOR
Table STAFF
STAFF PUO Staff_ID Staff_Name Salary Address
Table DEPARTMENTS
DEPARTMENT
SQL – DML
– INSERT INSERT INTO DEPARTMENT
VALUES (‘IT’, ‘ INFORMATION TECHNOLOGY’);
Table DEPARTMENT
SQL
UPDATE STAFF
SET Address = ‘MELAKA’
WHERE Staff_Id = ‘2’;
STAFF PUO
Upon Success
1 row updated
SQL – DML UPDATE STAFF
– UPDATE SET Address = ‘MELAKA’
WHERE Staff_Id = ‘2’;
Table STAFF
1 row updated
SQL – DML
– UPDATE UPDATE STAFF
SET Address = ‘JOHOR’;
Table STAFF
4 rows updated
SQL – DML UPDATE STAFF
– UPDATE SET Address = ‘SELANGOR’, Salary = ’4000’
WHERE Staff_ID = ‘1’;
Table STAFF
STAFF PUO
Upon Success
1 row deleted
SQL – DML
– DELETE DELETE FROM STAFF
WHERE Staff_ID = ‘2’;
Table STAFF
Table STAFF
Upon Success
3 rows deleted
Q & A SESSION
SQL – Data Query Language (DQL)
SQL
• We need to insert
the data again to the
table.
• Base on the table
shown, use your Staff_ID Staff_Name Salary Address
DML syntax to 1 ALEX 4000.00 SELANGOR
update the existing 2 AHMAD 2000.20 JOHOR
table. 3 RAJU 3000.30 JOHOR
4 ALI PERAK
SQL – DQL – • The SELECT statement is used to
SELECT select data from a database.
• The data returned is stored in a
Capabilities result table, called the result-set
Projection – Extract SYNTAX:
Columns Needed
SELECT column1, column2, ...
FROM table_name;
STAFF PUO
SQL – SELECT SELECT *
FROM STAFF;
• Selecting All
Columns
• Selecting Specific
Columns
• Selecting Specific
Columns
• Using Aliases
ID Name Address
1 ALEX SELANGOR
2 AHMAD JOHOR
Upon Success 3 RAJU JOHOR
4 rows selected 4 ALI PERAK
SQL – SELECT SELECT Staff_ID, Staff_Name, Salary, Salary + 200
FROM STAFF;
• Selecting Specific
Columns
• Using Aliases
• Using Arithmetic
Operators (*, / , +, -) Staff_ID Staff_Name Salary Salary + 200
1 ALEX 4000.00 4200.00
2 AHMAD 2000.20 2200.20
Upon Success 3 RAJU 3000.30 3200.30
4 rows selected 4 ALI
SELECT Staff_ID, Staff_Name, Salary, Salary + 200
SQL – SELECT as Salary_Bonus,
0.1 * Salary + 200 as Comm
FROM STAFF;
• Selecting Specific
Columns
• Using Aliases
• Using Arithmetic
Operators (*, / , +, -) Staff_ID Staff_Name Salary Salary_Bonus Comm
• Operator 1 ALEX 4000.00 4200.00 600.00
Precedence 2 AHMAD 2000.20 2200.20 400.02
Upon Success 3 RAJU 3000.30 3200.30 500.03
4 rows selected 4 ALI
SELECT Staff_ID, Staff_Name, Salary,
SQL – SELECT
Salary + 200 as Salary_Bonus,
0.1 * (Salary + 200) as Comm FROM STAFF;
• Selecting Specific
Columns
• Using Aliases
• Using Arithmetic
Operators (*, / , +, -) Staff_ID Staff_Name Salary Salary_Bonus Comm
• Operator 1 ALEX 4000.00 4200.00 420.0
Precedence 2 AHMAD 2000.20 2200.20 220.2
Upon Success 3 RAJU 3000.30 3200.30 320.3
4 rows selected 4 ALI
# Operators Precedence
1 () high
2 /, *
3 +,-
low
SELECT Staff_ID || ‘ ’ || Staff_Name as Staff,
Salary FROM STAFF;
SQL – SELECT
SELECT CONCAT(Staff_ID , ' ', Staff_Name)as Staff,
• Selecting Specific Columns Salary FROM staff;
• Using Aliases
• Using Arithmetic Operators
(*, / , +, -)
• Operator Precedence
• Using Concatenation
• Using Literal Character Staff Salary
String
1 ALEX 4000
2 AHMAD 2000.20
Upon Success 3 RAJU 3000.30
4 rows selected 4 ALI
Assume below are the content of data in table STAFF.
And we are trying to access the Department ID to
SQL – SELECT know how many types of are exist in this table.
Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
SELECT Dept_ID 1 ALEX 4000 SELANGOR IT
FROM STAFF;
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
SQL – SELECT
SELECT DISTINCT Dept_ID FROM STAFF;
Dept_ID
Upon Success IT
2 rows selected IE
Q & A SESSION
RECAP
Selection – Extract
Rows Or Records SYNTAX:
Needed
SELECT *|{DISTINCT column|expression
[alias]…}
FROM table
[WHERE conditions(s)};
STAFF PUO
SQL – SELECT SELECT * FROM STAFF
WHERE Staff_ID = ‘2’;
• Using the where clause
B DEPARTMENTS
Dept_ID Dept_Name
IT INFORMATION TECHNOLOGY
IE ENGINEERING
IM MECHANICAL
AD ADMINISTRATION
SQL – Data Query Language (DQL)
SQL
Capabilities SYNTAX
SELECT table1.column, table2.column FROM table1
Joining – Join Data From [CROSS JOIN table2] |
Different Tables By
Creating Link Between [NATURAL JOIN table2] |
Them [JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)] |
[LEFT | RIGHT | FULL OUTER JOIN table2
DEPARTMENT ON (table1.column_name = table2.column_name)];
PUO
STAFF
SQL – SELECT – JOINING TABLES
STAFF DEPARTMENTS
Staff_ID Dept_ID Dept_ID Dept_Name
1 IT IT INFORMATION TECHNOLOGY
2 IT IE ENGINEERING
3 IE AD ADMINISTRATION
4 IT IM MECHANICAL
5
… …
SQL – SELECT – JOINING TABLES
Staff_ID
M 1 Dept_ID
Staff_Name
STAFF belong DEPARTMENTS
Address Dept_Name
Salary Dept_ID
STAFF(Staff_ID, Staff_Name, Address, Salary, Dept_ID);
DEPARTMENTS (Dept_ID, Dept_Name)
STAFF DEPARTMENTS
Staff_ID Staff_Name Salary Address Dept_ID Dept_ID Dept_Name
1 ALEX 4000.00 SELANGOR IT IT INFORMATION TECHNOLOGY
2 AHMAD 2000.20 JOHOR IT IE ENGINEERING
3 RAJU 3000.30 JOHOR IE AD ADMINISTRATION
4 ALI PERAK IT IM MECHANICAL
5
… …
SQL – SELECT – CROSS JOIN
Produces Cross Products Of Two Tables
R S RxS
A B B C D A R.B S.B C D
1 2 2 5 6 1 2 2 5 6
x
3 4 4 7 8 1 2 4 7 8
9 10 11 1 2 9 10 11
3 4 2 5 6
3 4 4 7 8
3 4 9 10 11
RECAP : OPERATORS FOR RELATIONAL DATABASE
OPERATORS FOR RELATIONAL DATABASE
S1
sid sname rating age
JOIN (Natural Join) 22 Dustin 7 45.0
31 Lubber 8 55.5
❑ A further special case of the join is an equi join in which 58 Rusty 10 35.0
equalities are specified on all fields having the same name in
S2
S1 and S2
sid bid day
22 101 10/10/96
❑ The result is guaranteed to have no two fields with the same 58 103 11/12/96
name. Duplicate columns are removed. NULL 105 05/01/97
Staff_Name Dept_Name
ALEX INFORMATION TECHNOLOGY
SELECT s.Staff_Name, d.Dept_Name
FROM Staff s JOIN Departments d AHMAD INFORMATION TECHNOLOGY
USING (Dept_ID); RAJU ENGINEERING
ALI INFORMATION TECHNOLOGY
SQL – SELECT – ON clause
Capabilities SYNTAX
SELECT [column,] group function (column), …
Joining – Join Data From FROM table
Different Tables By
[WHERE condition]
Creating Link Between
Them [GROUP BY column]
[ORDER BY column];
DEPARTMENT
Table STAFF
PUO
Staff_ID Staff_Name Salary Address Dept_ID
STAFF 1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
SELECT AVG(Salary), MAX(Salary), MIN(Salary), SUM(Salary)
SQL – SELECT – FROM STAFF
WHERE ADDRESS = ‘JOHOR’;
GROUP FUNCTION
• AVG and SUM - Can be
used for numeric data Table STAFF
• MAX and MIN - Can be Staff_ID Staff_Name Salary Address Dept_ID
used for any data type 1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
MIN(Staff_Name) MAX(Staff_Name)
ALI AHMAD
SELECT COUNT(Staff_ID)
SQL – SELECT – FROM STAFF;
GROUP FUNCTION
• COUNT(*) returns the
number of rows in a table Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
COUNT(Staff_ID)
4
SELECT COUNT(Dept_ID)
FROM STAFF;
A
SQL – SELECT –
GROUP FUNCTION SELECT COUNT(DISTINCT Dept_ID) B
FROM STAFF;
• COUNT(*) returns the
number of rows in a table Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
COUNT(Dept_ID) COUNT(Dept_ID)
4 2
Outcome A Outcome B
SELECT AVG(Salary)
SQL – SELECT – FROM STAFF;
GROUP FUNCTION
• Ignores Null Value
Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
AVG(Salary)
3000.17
**Average is divided to 3 staff only – with valid salary value
SELECT AVG(NVL(Salary,0) )
SQL – SELECT – FROM STAFF;
GROUP FUNCTION
• Forces Group Function To
Include Null Values Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
AVG(NVL(Salary,0))
2250.13
**Average is divided to 4 staff including the one with salary null
SELECT DEPT_ID, AVG(NVL(Salary,0))
SQL – SELECT – GROUP FROM STAFF
FUNCTION(GROUP THE GROUP BY DEPT_ID;
DATA)
• For Example, Average
Salary Of Staff For Each Table STAFF
Department Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
Dept_ID AVG(NVL(Salary,0))
IT 3000.10
IE 3000.30
SELECT AVG(NVL(Salary,0))
SQL – SELECT – GROUP FROM STAFF
FUNCTION(GROUP THE GROUP BY DEPT_ID;
DATA)
• For Example, Average
Salary Of Staff For Each Table STAFF
Department Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
AVG(NVL(Salary,0))
3000.10
3000.30
SELECT DEPT_ID, AVG(NVL(Salary,0))
SQL – SELECT – GROUP FROM STAFF;
FUNCTION(GROUP THE GROUP BY DEPT_ID;
DATA)
• For Example, Average
Salary Of Staff For Each Table STAFF
Department Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
** If the column is in select list, it
must be stated in the group by
AVG(NVL(Salary,0))
ERROR!!!
3000.10 Dept_ID is not a single group
3000.30 function
SELECT ADDRESS, DEPT_ID, AVG(NVL(Salary,0))
SQL – SELECT – GROUP FROM STAFF
FUNCTION(GROUP GROUP BY ADDRESS, DEPT_ID;
MULTIPLE COLUMN)
• For Example, Average
Salary Of Staff For Each Table STAFF
Address, Department Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
Dept_ID SUM(NVL(Salary,0))
IT 6000.20
**Sum from the IE department is not shown because it is less than 4000
SELECT MAX(AVG(NVL(SALARY,0)))
SQL – SELECT – GROUP FROM STAFF
FUNCTION(NESTING
GROUP BY DEPT_ID;
GROUP FUNCTION)
• For Example, Display The
Maximum Average Salary Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
MAX(AVG(NVL(SALARY,0)))
3000.30
Q & A SESSION
SQL – Data Query Language (DQL)
SQL
Staff_Name
AHMAD
RAJU
SELECT Staff_Name, Address, Salary
FROM STAFF
2000.20
WHERE salary > (SELECT salary
SQL – SELECT – FROM STAFF
SUBQUERIES WHERE Staff_ID = 2);
AND Address NOT IN (SELECT Address
JOHOR, PERAK
• Single row subqueries FROM STAFF
WHERE Staff_ID IN (‘3’, ‘4’));
Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
Dept_ID MIN(Salary)
IT 2000.20
SELECT Staff_Name, Address, Salary
SQL – SELECT – FROM STAFF
JOHOR, PERAK
SUBQUERIES WHERE Address NOT IN (SELECT Address
FROM STAFF
WHERE STAFF_ID IN (‘2’, ‘4’));
• Multiple row subqueries
Table STAFF
Staff_ID Staff_Name Salary Address Dept_ID
1 ALEX 4000 SELANGOR IT
2 AHMAD 2000.20 JOHOR IT
3 RAJU 3000.30 JOHOR IE
4 ALI PERAK IT
SQL
SQL
SQL
Rollback command
allows you to undo DELETE FROM Students
transactions that have WHERE RollNo =25;
not already been saved
to the database.
SQL – TCL - Syntax :
SAVEPOINT
SAVEPOINT SAVEPOINT_NAME;