Unit - III
Unit - III
SQL
Topics Covered
• SQL commands,
• Constraints,
• Joins,
• set operations,
• Sub queries,
• Views,
• PL – SQL,
• Triggers, and Cursors.
Basics of SQL-DDL,DML,DCL,TCL Nested Queries, Views and its Structure
Creation, alternation Types
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint
• The output of the DDL is placed in the data dictionary which contains metadata - that is, data about data.
• SQL provides a rich DDL that allows one to define tables, integrity constraints, assertions, etc.
create table department (dept name char (20), building char (15), budget numeric (12,2));
• Execution of the above DDL statement creates the department table with three columns: dept name,
building, and budget, each of which has a specific data type associated with it.
CREATING DATABASE TABLE
• Used to create a table by defining its structure, the data type and name of the various
columns, the relationships with columns of other tables etc.
• E.g.:
CREATE TABLE Employee(Name varchar2(20), DOB date, Salary number(6));
ALTER - Add a new attribute or Modify the characteristics of some existing attribute.
E.g.:
ALTER TABLE Employee ADD (Address varchar2(20));
ALTER TABLE Employee ADD (Designation varchar2(20), Dept varchar2(3));
ALTER TABLE table_name MODIFY (column_name data_type(new_size));
E.g.:
E.g.:
E.g.:
TRUNCATE TABLE Employee_details;
Data Manipulation Language
E.g.:
• INSERT INTO Employee VALUES (‘ashok’, ‘16-mar-1998’, 30000);
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL, NAME varchar(10)
NOT NULL, ADDRESS varchar(20) );
UNIQUE
• This constraint helps to uniquely identify each row in the table. i.e. for a
particular column, all the rows should have unique values. We can have
more than one UNIQUE columns in a table.
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL UNIQUE, NAME
varchar(10), ADDRESS varchar(20) );
PRIMARY KEY
• Primary Key is a field which uniquely identifies each row in the table.
• If a field in a table as primary key, then the field will not be able to
contain NULL values as well as all the rows should have unique values
for this field.
• In other words we can say that this is combination of NOT NULL and
UNIQUE constraints.
• A table can have only one field as primary key.
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL UNIQUE, NAME
varchar(10), ADDRESS varchar(20), PRIMARY KEY(ID) );
FOREIGN KEY
• Foreign Key is a field in a table which uniquely identifies each row of a
another table.
• That is, this field points to primary key of another table. This usually
creates a kind of link between the tables.
• Foreign Key is used to relate two tables. The relationship between the
two tables matches the Primary Key in one of the tables with a Foreign
Key in the second table.
• This is also called a referencing key.
• We use ALTER statement and ADD statement to specify this constraint.
• In Customer_Detail table, c_id is the primary key which is set as foreign key
in Order_Detail table.
• The value that is entered in c_id which is set as foreign key
in Order_Detail table must be present in Customer_Detail table where it is
set as primary key.
• This prevents invalid data to be inserted into c_id column
of Order_Detail table.
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL, NAME varchar(10)
NOT NULL, AGE int DEFAULT 18 );
Primary Key Vs Foreign Key
Primary Key Vs Unique Key
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation
• Count(Distinct Salary): Return number of distinct Non Null values over the
column salary .i.e 4
• Sum()
• sum(salary): Sum all Non Null values of
Column salary i.e., 310 SELECT SUM(salary) FROM employees;
• Avg()
• Avg(salary) = Sum(salary) / count(salary) = 310/5
• Avg(Distinct salary) = sum(Distinct salary) / Count(Distinct Salary) = 250/4
SELECT AVG(DISTINCT salary) FROM employees;
SELECT AVG(column_name) FROM table_name WHERE condition;
SELECT department, AVG(salary) FROM employees GROUP BY department;
• Min(), Max()
• Min(salary): Minimum value in the salary column except NULL i.e., 40.
• Max(salary): Maximum value in the salary i.e., 80.
SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
• To update name of the students to geeks in Student2 table whose location is same as Raju,Ravi in Student1 table
• UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN
(‘Raju’,’Ravi’));
Subqueries with the DELETE Statement
• The subquery can be used in conjunction with the DELETE statement like with any other statements mentioned above.
• To delete students from Student2 table whose rollno is same as that in Student1 table and having location as Chennai.
• DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);
SQL Correlated Subqueries
• Correlated subqueries are used for row-by-row processing. Each subquery
is executed once for every row of the outer query.
• A correlated subquery is evaluated once for each row processed by the
parent statement. The parent statement can be a SELECT, UPDATE,
or DELETE statement.
• A correlated subquery is one way of reading every row in a table and
comparing values in each row against related data.
• It is used whenever a subquery must return a different result or set of
results for each candidate row considered by the main query.
Nested Subqueries Versus Correlated Subqueries
• With a normal nested subquery, the inner SELECT query runs first and
executes once, returning values to be used by the main query.
• NOTE : You can also use the ANY and ALL operator in a correlated
subquery.
Correlated Subqueries with Select Statement
• Find all the employees who earn more than the average salary in their department.
Using the Exists Operator
• The EXISTS operator tests for existence of rows in the results set of the
subquery.
• If a subquery row value is found the condition is flagged TRUE and the
search does not continue in the inner query, and if it is not found then the
condition is flagged FALSE and the search continues in the inner query.
• Find the employees who have at least one person reporting to them.
Using the Not Exists Operator
• Find all the departments that do not have any employees
CORRELATED UPDATE & DELETE
• CORRELATED UPDATE
• UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
• Use a correlated subquery to update rows in one table based on rows from another table.
• CORRELATED DELETE
• DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column =
alias2.column);
• Use a correlated subquery to delete rows in one table based on the rows from another table.
Processing a correlated subquery Using the
Exists Operator - E.g.
• We can create a view by selecting fields from one or more tables present
in the Student
database.
Details Student Marks
• A View can either have all the rows of a table or specific rows based on
certain condition.
Creating a View
View can be created using CREATE VIEW statement. A View can be created from a
single table or multiple tables.
Syntax
CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name
Student Details
WHERE condition;
To see the data in the View, we can query the view in the same manner as we query a
table.
SELECT * FROM DetailsView;
• Creating View from multiple tables
• In this example we will create a View named MarksView from two tables
Student Details StudentDetails and StudentMarks.
• To create a View from multiple tables we can simply include multiple tables in
the SELECT statement.
• CREATE VIEW MarksView AS SELECT StudentDetails.NAME,
StudentDetails.ADDRESS, StudentMarks.MARKS FROM StudentDetails,
StudentMarks WHERE StudentDetails.NAME = StudentMarks.NAME;
Student Marks
• To display data of View MarksView:
• SELECT * FROM MarksView;
Output
DELETING VIEWS
• SQL allows us to delete an existing View. We can delete or drop a View using the DROP statement.
Syntax
1. The SELECT statement which is used to create the view should not
include GROUP BY clause or ORDER BY clause.
2. The SELECT statement should not have the DISTINCT keyword.
3. The View should have all NOT NULL values.
4. The view should not be created using nested queries or complex queries.
5. The view should be created from a single table. If the view is created
using multiple tables then we will not be allowed to update the view.
CREATE OR REPLACE VIEW
We can use the CREATE OR REPLACE VIEW statement to add or remove fields from a view.
Syntax
CREATE OR REPLACE VIEW view_name AS SELECT column1,coulmn2,.. FROM table_name WHERE condition;
For example, if we want to update the view MarksView and add the field AGE to this View
from StudentMarks Table, we can do this as:
Syntax:
INSERT INTO view_name(column1, column2 , column3,..) VALUES(value1, value2, value3..); view_name: Name of the View
Example:
In the below example we will insert a new row in the View DetailsView which we have created above in the example of “creating
views from a single table”.
Output
Deleting a row from a View
• Deleting rows from a view is also as simple as deleting rows from a table.
• We can use the DELETE statement of SQL to delete rows from a view.
• Also deleting a row from a view first delete the row from the actual table and the change is then reflected in the view.
• Syntax
• DELETE FROM view_name WHERE condition;
• view_name:Name of view from where we want to delete rows
• condition: Condition to select rows
In this example we will delete the last row from the view DetailsView which we just added in the above example of inserting rows.
DELETE FROM DetailsView WHERE NAME="Suresh";
If we fetch all the data from DetailsView now as,
SELECT * FROM DetailsView;
Output
Uses of a View
1. Restricting data access
Views provide an additional level of table security by restricting access to a
predetermined set of rows and columns of a table.
2. Hiding data complexity
A view can hide the complexity that exists in a multiple table join.
3. Simplify commands for the user
Views allows the user to select information from multiple tables without requiring
the users to actually know how to perform a join.
4. Store complex queries
Views can be used to store complex queries.
5. Rename Columns
Views can also be used to rename the columns without affecting the base tables
provided the number of columns in view must match the number of columns
specified in select statement. Thus, renaming helps to to hide the names of the
columns of the base tables.
6. Multiple view facility
Different views can be created on the same table for different users.
Basics of SQL-DDL,DML,DCL,TCL Nested Queries, Views and its Structure
Creation, alternation Types
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands Unique,
not null, check, IN operator Commit, Rollback, Savepoint
TCL Commands
Transaction Control Language (TCL) Commands are:
Commit − It is used to save the transactions in the database.
Rollback − It is used to restore the database to that state which was last committed.
Savepoint − The changes done till savpoint will be unchanged and all the
transactions after savepoint will be rolled back.
Example
• Given below is an example of the usage of the TCL commands
in the database management system (DBMS)
Difference between Commit, rollback and
savepoint of TCL commands
Properties of Transactions
Atomicity − ensures that all operations within the work unit are
completed successfully. Otherwise, the transaction is aborted at the
point of failure and all the previous operations are rolled back to their
former state.
Consistency − ensures that the database properly changes
states upon a successfully committed transaction.
Isolation − enables transactions to operate independently of and
transparent to each other.
Durability − ensures that the result or effect of a committed
transaction persists in case of a system failure.
Transaction Control
Thus, two rows from the table would be deleted and the SELECT statement would
produce the following result.
ROLLBACK Command
Following is an example, which would delete those records from the table which
have the age = 25 and then ROLLBACK the changes in the database.
Thus, the delete operation would not impact the table and the
SELECT statement would produce the following result.
select * from customers;
SAVEPOINT
• A SAVEPOINT is a point in a transaction when you can roll the
transaction back to a certain point without rolling back the entire
transaction.
The syntax for a SAVEPOINT command is as shown below.
Now that the three deletions have taken place, let us assume that you have changed
your mind and decided to ROLLBACK to the SAVEPOINT that you identified as SP2.
Because SP2 was created after the first deletion, the last two deletions are undone −
Notice that only the first deletion took place since you rolled back
to SP2.
RELEASE SAVEPOINT Command:
The RELEASE SAVEPOINT command is used to remove a SAVEPOINT
that you have created.
The syntax for a RELEASE SAVEPOINT command is as follows:
Once a SAVEPOINT has been released, you can no longer use the
ROLLBACK command to undo transactions performed since the last
SAVEPOINT.
Basics of SQL-DDL,DML,DCL,TCL Nested Queries, Views and its Structure
Creation, alternation Types
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint
Variable_name Table_name.Column_name%type;
This syntax defines a variable of the type of the referenced column on the
referenced table
PL/SQL Control Structure
• PL/SQL has a number of control structures which includes:
• Conditional controls
• Iterative or loop controls.
• Exception or error controls
• These control structure, can be used singly or together, that allow the
PL/SQL developer to direct the flow of execution through the
program.
PL/SQL Control Structure
• Conditional Controls
IF....THEN....END IF;
IF....THEN...ELSE....END IF;
IF....THEN...ELSIF....THEN....ELSE....END IF;
PL/SQL Control Structure
• LOOP
...SQL Statements...
EXIT;
END LOOP;
• WHILE loops
WHILE condition LOOP
...SQL Statements...
END LOOP;
• FOR loops
FOR <variable(numeric)> IN [REVERSE]
<lowerbound>..<upperbound> LOOP .... ..... END LOOP;
Cursor
• A cursor is a pointer to this context area. PL/SQL
controls the context area through a cursor. A cursor
holds the rows (one or more) returned by a SQL
statement. The set of rows the cursor holds is
referred to as the active set.
• There are two types of cursors −
Implicit cursors
Explicit cursors
Implicit Cursors
• Implicit cursors are automatically created by Oracle
whenever an SQL statement is executed, when
there is no explicit cursor for the statement.
• Programmers cannot control the implicit cursors
and the information in it.
• In PL/SQL, the most recent implicit cursor is the SQL
cursor, which has the following attributes.
Implicit Cursors
S.No Attribute & Description
%FOUND
Returns TRUE if an INSERT, UPDATE, or DELETE statement affected one or more rows
1 or a SELECT INTO statement returned one or more rows. Otherwise, it returns FALSE.
%NOTFOUND
The logical opposite of %FOUND. It returns TRUE if an INSERT, UPDATE, or DELETE
statement affected no rows, or a SELECT INTO statement returned no rows. Otherwise, it
2 returns FALSE.
%ISOPEN
Always returns FALSE for implicit cursors, because Oracle closes the SQL cursor
3 automatically after executing its associated SQL statement.
%ROWCOUNT
Returns the number of rows affected by an INSERT, UPDATE, or DELETE statement, or
4 returned by a SELECT INTO statement.
Example
The following program will update the employee table and increase the salary of each customer by 500
and use the SQL%ROWCOUNT attribute to determine the number of rows affected −
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN
dbms_output.put_line('no customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
END;
Output:
6 customers selected
Explicit Cursors
Explicit cursors are programmer-defined cursors for gaining more control over the
context area. An explicit cursor should be defined in the declaration section of the PL/SQL
Block. It is created on a SELECT Statement which returns more than one row.
LANGUAGE value of SQL and the BEGIN...END block, which forms the procedure body, are particular to an SQL
procedure
1)The stored procedure name is UPDATE_SALARY_1.
2)The two parameters have data types of CHAR(6) and INTEGER. Both are input parameters.
3)LANGUAGE SQL indicates that this is an SQL procedure, so a procedure body follows the other
parameters.
4)The procedure body consists of a single SQL UPDATE statement, which updates rows in the
employee table.
Some Valid SQL Procedure Body Statements
∙ CASE statement
∙ FOR statement
∙ GOTO statement
∙ IF statement
∙ ITERATE statement
∙ RETURN statement
∙ WHILE statement
• Invoking Procedures
Can invoke Stored procedure stored at the location of the database by using the
SQL CALL statement
IF <condition> THEN
<statement(s)>
ELSE
<statement(s)>
END IF;
Loops
LOOP
……
EXIT WHEN <condition>
……
END LOOP;
EXAMPLE :
CREATE PROCEDURE UPDATE_SALARY_IF
(IN employee_number CHAR(6), IN rating SMALLINT)
LANGUAGE SQL
BEGIN
SET counter = 10;
WHILE (counter > 0) DO
IF (rating = 1)
THEN UPDATE employee
SET salary = salary * 1.10, bonus = 1000
WHERE empno = employee_number;
ELSEIF (rating = 2)
THEN UPDATE employee
SET salary = salary * 1.05, bonus = 500
WHERE empno = employee_number;
ELSE UPDATE employee
SET salary = salary * 1.03, bonus = 0
WHERE empno = employee_number;
END IF;
SET counter = counter – 1;
END WHILE;
END
@
Triggers
• A trigger is a stored procedure in database which automatically invokes whenever a
special event in the database occurs. For example, a trigger can be invoked when a row is
inserted into a specified table or when certain table columns are being updated.
Create [OR REPLACE] TRIGGER trigger_name: It makes or replaces a current trigger with the
EXAMPLE
CREATE OR REPLACE TRIGGER display_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON customers
FOR EACH ROW
WHEN (NEW.ID > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :NEW.salary - :OLD.salary;
dbms_output.put_line('Old salary: ' || :OLD.salary);
dbms_output.put_line('New salary: ' || :NEW.salary);
dbms_output.put_line('Salary difference: ' || sal_diff);
END;
After creating a Trigger, use it in the PL/SQL code for putting it in to action.
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
IF sql%notfound THEN
total_rows := sql%rowcount;
END IF;
END;
/
Advantages of Triggers
•Auditing
• Step-2
Optimizer
• During optimization stage, database must perform a hard parse at least for one unique DML statement and perform optimization
during this parse. This database never optimizes DDL unless it includes a DML component such as subquery that require
optimization.
• It is a process in which multiple query execution plan for satisfying a query are examined and most efficient query plan is satisfied
for execution.
•
Database catalog stores the execution plans and then optimizer passes the lowest cost plan for execution.
• Row Source Generation
• The Row Source Generation is a software that receives a optimal execution
plan from the optimizer and produces an iterative execution plan that is
usable by the rest of the database.
• The iterative plan is the binary program that when executes by the sql
engine produces the result set.
• Step-3
Execution Engine
• Finally runs the query and display the required result.