0% found this document useful (0 votes)
132 views176 pages

Unit III

This document provides an overview of SQL, covering various commands and concepts such as DDL, DML, DCL, constraints, joins, subqueries, views, PL/SQL, triggers, and cursors. It explains the structure of SQL tables, data types, and the use of aggregate and built-in functions. Additionally, it discusses how to create, alter, and manage database tables and the importance of constraints in ensuring data integrity.

Uploaded by

saarthak22305
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
132 views176 pages

Unit III

This document provides an overview of SQL, covering various commands and concepts such as DDL, DML, DCL, constraints, joins, subqueries, views, PL/SQL, triggers, and cursors. It explains the structure of SQL tables, data types, and the use of aggregate and built-in functions. Additionally, it discusses how to create, alter, and manage database tables and the importance of constraints in ensuring data integrity.

Uploaded by

saarthak22305
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 176

Unit 3

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

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
Table name Attribute names

Tables in SQL
Product

PName Price Category Manufacturer

Gizmo $19.99 Gadgets GizmoWorks

Powergizmo $29.99 Gadgets GizmoWorks

SingleTouch $149.99 Photography Canon

MultiTouch $203.99 Household Hitachi

Tuples or rows
Tables Explained
• The schema of a table is the table name and its
attributes:
Product(PName, Price, Category, Manfacturer)

• A key is an attribute whose values are unique;


we underline a key

Product(PName, Price, Category, Manfacturer)


SQL Introduction
SQL stands for ‘Structured Query Language’
SQL is domain-specific language, NOT a general programming
language
SQL is specialized to handle ‘structured data’ that follows
relational model – data that incorporates relations among
entities and variables.
Used to interact with relational databases to manage data:
create, populate, modify, or destroy data. Also can manage
data access
SQL
1.Data Query Language (DQL) - used to query data
2. Data Manipulation Language (DML) – used to create/modify/destroy
data
3. Data Definition Language (DDL) – used to define database schema
4. Data Control Language (DCL) – used for security and access control
Data Types in SQL
Numeric Datatype
FLOAT and STRING Datatype
Basics of SQL
DDL is Data Definition Language statements
• Some examples

• CREATE - to create objects in the database


• ALTER - alters the structure of the database
• DROP - delete objects from the database
• TRUNCATE - remove all records from a table
• COMMENT - add comments to the data dictionary
DML is Data Manipulation Language statements
• Some examples:

• SELECT - retrieve data from the a database


• INSERT - insert data into a table
• UPDATE - updates existing data within a table
• DELETE - deletes all records from a table, the space for the
records remain
• CALL - call a PL/SQL or Java subprogram
• EXPLAIN PLAN - explain access path to data
• LOCK TABLE - control concurrency
TCL(Transaction Control Language) is a DML
• COMMIT - save work done
• SAVEPOINT - identify a point in a transaction to which you can
later roll back
• ROLLBACK - restore database to original since the last
COMMIT
• SET TRANSACTION - Change transaction options like what
rollback segment to use

DCL is Data Control Language statements


• Some examples:
• GRANT - gives user's access privileges to database
• REVOKE - withdraw access privileges given with the GRANT
command
CREATING DATABASE TABLE

• CREATE – creates a new table in the database

• 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.

• CREATE TABLE table_name (column_name1 data_type(size), column_name2


data_type(size),…., column_nameN data_type(size));

• 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.

• ALTER TABLE table_name ADD (column_name1 data_type (size), column_name2 data_type (size),
….., column_nameN data_type (size));

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.:

ALTER TABLE Employee MODIFY (Name varchar2(30));

ALTER - dropping a column from the table

• ALTER TABLE table_name DROP COLUMN column_name;

E.g.:

ALTER TABLE Student DROP COLUMN Age;


DROP - Deleting an entire table from the database.

DROP TABLE table_name;


E.g.:
DROP TABLE Employee

RENAME – Renaming the table

RENAME old_table_name TO new_table_name;


E.g.:
RENAME Employee TO Employee_details
TRUNCATE – deleting all rows from a table and free the space containing
the table.

TRUNCATE TABLE table_name;

E.g.:
TRUNCATE TABLE Employee_details;
Data Manipulation Language

A DML statement is executed when you


• Add new rows to a table
• Modify existing rows in a table
• Remove existing rows from a table
Add new rows to a table by using the INSERT statement.
1. INSERT INTO table VALUES(value1, value2,..);
• Only one row is inserted at a time with this syntax.
• List values in the default order of the columns in the table
• Enclose character and date values within single quotation marks.
• Insert a new row containing values for each column.

E.g.:
• INSERT INTO Employee VALUES (‘ashok’, ‘16-mar-1998’, 30000);

2. INSERT INTO table(column1, column2,..)VALUES(value1, value2,..);


• Rows can be inserted with NULL values either
• by omitting column from the column list or
• by specifying NULL in the value field.
E.g.:
• INSERT INTO Employee (name, dob, salary) VALUES (‘ashok’, ‘16-mar-1998’, 30000);
3. INSERT INTO table_name1 SELECT column_name1, column_name2,
….,column_nameN FROM table_name2;

INSERT INTO Employee_details SELECT name, dob FROM Exmployee;


Data-Manipulation Language (DML)

• The SQL query language is nonprocedural.

select name from instructor where dept name = ’History’;

• Queries may involve information from more than one table.

select instructor.ID, department.dept name from instructor,


department where instructor.dept name= department.dept name
and department.budget > 95000;
DML(Update)
UPDATE tableName SET column1 = value1, column2 = value2, ...
WHERE condition;

Query: Update salary as 75000 for the instructor Srinivasan


Update instructor set salary=75000 where name=“Srinivasan”;
DML(Delete)
DELETE FROM table_name WHERE Condition

Query : Delete the department which is present in


Watson building

Delete from department where building=“Watson”


SQL Constraints
• Constraints are the rules that we can apply on the type of data in a table.
That is, we can specify the limit on the type of data that can be stored in
a particular column in a table using constraints.
• Constraints in SQL
✔ Not Null
✔ Unique
✔ Primary Key
✔ Foreign Key
✔ Check
✔ Default

• How to specify constraints?


• We can specify constraints at the time of creating the table using
CREATE TABLE statement. We can also specify the constraints after
creating a table using ALTER TABLE statement.
NOT NULL
• If we specify a field in a table to be NOT NULL.
• Then the field will never accept null value.
• That is, you will be not allowed to insert a new row in the table
without specifying any value to this field.

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.

• FOREIGN KEY constraint at Table Level


CREATE table Order_Detail( order_id int PRIMARY KEY, order_name varchar(60)
NOT NULL, c_id int FOREIGN KEY REFERENCES Customer_Detail(c_id) );

• FOREIGN KEY constraint at Column Level


ALTER table Order_Detail ADD FOREIGN KEY (c_id) REFERENCES
Customer_Detail(c_id);
CHECK Constraint
• CHECK constraint is used to restrict the value of a column between a
range.
• It performs check on the values, before storing them into the database.
• It’s like condition checking before saving data into a column.

• Using CHECK constraint at Table Level


• CREATE table Student( s_id int NOT NULL CHECK(s_id > 0), Name
varchar(60) NOT NULL, Age int );
• Using CHECK constraint at Column Level
• ALTER table Student ADD CHECK(s_id > 0);
DEFAULT
• This constraint is used to provide a default value for the fields.
• That is, if at the time of entering new records in the table if the user does
not specify any value for these fields, then the default value will be
assigned to them.

• 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
Aggregate functions in SQL
• In database management an aggregate function is a function where the
values of multiple rows are grouped together as input on certain
criteria to form a single value of more significant meaning.
Various Aggregate Functions are
• Count()
• Sum()
• Avg()
• Min()
• Max()
Count()

• Count(*): Returns total number of records .i.e 6.[select count(*) from emp;]

Count(salary): Return number of Non Null values over the column salary. i.e 5.
[select
Table: count(salary)
emp from emp]

• Count(Distinct Salary): Return number of distinct Non Null values over the column
salary.i.e 4 [SELECT COUNT(DISTINCT salary) FROM emp;]
• Sum()
• sum(salary): Sum all Non Null values of
Column salary i.e., 310
• sum(Distinct salary): Sum of all distinct
Non-Null values i.e., 250.

• Avg()
• Avg(salary) = Sum(salary) / count(salary) = 310/5
• Avg(Distinct salary) = sum(Distinct salary) / Count(Distinct Salary) = 250/4

• 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.
Built in Functions - Numeric Functions in
SQL
• ABS(): It returns the absolute value of a number.
Syntax: SELECT ABS(-243.5);
Output: 243.5
• ACOS(): It returns the cosine of a number.
Syntax: SELECT ACOS(0.25);
Output: 1.318116071652818
• ASIN(): It returns the arc sine of a number.
Syntax: SELECT ASIN(0.25);
Output: 0.25268025514207865
• ATAN(): It returns the arc tangent of a number.
Syntax: SELECT ATAN(2.5);
Output: 1.1902899496825317
• CEIL(): It returns the smallest integer value that is greater than or equal to a number.
Syntax: SELECT CEIL(25.75);
Output: 26
• CEILING(): It returns the smallest integer value that is greater than or equal to a number.
Syntax: SELECT CEILING(25.75);
Output: 26
• COS(): It returns the cosine of a number.
Syntax: SELECT COS(30);
Built in Functions - Numeric Functions in SQL
• COT(): It returns the cotangent of a number.
Syntax: SELECT COT(6);
Output: -3.436353004180128
• DEGREES(): It converts a radian value into degrees.
Syntax: SELECT DEGREES(1.5);
Output: 85.94366926962348
• DIV(): It is used for integer division.
Syntax: SELECT 10 DIV 5;
Output: 2
• EXP(): It returns e raised to the power of number.
Syntax: SELECT EXP(1);
Output: 2.718281828459045
• FLOOR(): It returns the largest integer value that is less than or equal to a number.
Syntax: SELECT FLOOR(25.75);
Output: 25
• GREATEST(): It returns the greatest value in a list of expressions.
Syntax: SELECT GREATEST(30, 2, 36, 81, 125);
Output: 125
• LEAST(): It returns the smallest value in a list of expressions.
Syntax: SELECT LEAST(30, 2, 36, 81, 125);
Output: 2
• LN(): It returns the natural logarithm of a number.
Syntax: SELECT LN(2);
Output: 0.6931471805599453
• LOG10(): It returns the base-10 logarithm of a number.
Syntax: SELECT LOG(2);
Output: 0.6931471805599453
Built in Functions - Numeric Functions in

SQL
LOG2(): It returns the base-2 logarithm of a number.
Syntax: SELECT LOG2(6);
Output: 2.584962500721156
• MOD(): It returns the remainder of n divided by m.
Syntax: SELECT MOD(18, 4);
Output: 2
• PI(): It returns the value of PI displayed with 6 decimal places.
Syntax: SELECT PI();
Output: 3.141593
• POW(): It returns m raised to the nth power.
Syntax: SELECT POW(4, 2);
Output: 16
• RADIANS(): It converts a value in degrees to radians.
Syntax: SELECT RADIANS(180);
• RAND(): It returns a random number.
Syntax: SELECT RAND();
Output: 0.33623238684258644
• ROUND(): It returns a number rounded to a certain number of decimal places.
Syntax: SELECT ROUND(5.553);
Output: 6
• SIGN(): It returns a value indicating the sign of a number.
Syntax: SELECT SIGN(255.5);
Output: 1
• SIN(): It returns the sine of a number.
Syntax: SELECT SIN(2);
Output: 0.9092974268256817
Built in Functions - Numeric Functions in
SQL
• SQRT(): It returns the square root of a number.
Syntax: SELECT SQRT(25);
Output: 5

• TAN(): It returns the tangent of a number.


Syntax: SELECT TAN(1.75);
Output: -5.52037992250933

• ATAN2(): It returns the arctangent of the x and y coordinates, as an angle and expressed in radians.
Syntax: SELECT ATAN2(7);
Output: 1.42889927219073

• TRUNCATE(): This doesn’t work for SQL Server. It returns 7.53635 truncated to 2 places right of the
decimal point.
Syntax: SELECT TRUNCATE(7.53635, 2);
Output: 7.53
Built in Functions - String functions in SQL
• ASCII(): This function is used to find the ASCII value of a character.
Syntax: SELECT ascii('t’);
Output: 116
• CHAR_LENGTH(): Doesn’t work for SQL Server. Use LEN() for SQL Server. This function is used to find the length of a
word. Syntax: SELECT char_length('Hello!’);
Output: 6
• CHARACTER_LENGTH(): Doesn’t work for SQL Server. Use LEN() for SQL Server. This function is used to find the
length of a line.
Syntax: SELECT CHARACTER_LENGTH('geeks for geeks’);
Output: 15
• CONCAT(): This function is used to add two words or strings.
Syntax: SELECT 'Geeks' || ' ' || 'forGeeks';
Output: ‘GeeksforGeeks’
• CONCAT_WS(): This function is used to add two words or strings with a symbol as concatenating symbol.
Syntax: SELECT CONCAT_WS('_', 'geeks', 'for', 'geeks’);
Output: geeks_for_geeks
• FIND_IN_SET(): This function is used to find a symbol from a set of symbols.
Syntax: SELECT FIND_IN_SET('b', 'a, b, c, d, e, f’);
Output: 2
• FORMAT(): This function is used to display a number in the given format.
Syntax: Format("0.981", "Percent");
Output: ‘98.10%’
Built in Functions - String functions in SQL
• INSTR(): This function is used to find the occurrence of an alphabet.
Syntax: INSTR('geeks for geeks', 'e’);
Output: 2 (the first occurrence of ‘e’)
Syntax: INSTR('geeks for geeks', 'e', 1, 2 );
Output: 3 (the second occurrence of ‘e’)
• LCASE(): This function is used to convert the given string into lower case.
Syntax: LCASE ("GeeksFor Geeks To Learn");
Output: geeksforgeeks to learn
• LEFT(): This function is used to SELECT a sub string from the left of given size or characters.
Syntax: SELECT LEFT('geeksforgeeks.org', 5);
Output: geeks
• LENGTH(): This function is used to find the length of a word.
Syntax: LENGTH('GeeksForGeeks’);
Output: 13
• LOCATE(): This function is used to find the nth position of the given word in a string.
Syntax: SELECT LOCATE('for', 'geeksforgeeks', 1);
Output: 6
• LOWER(): This function is used to convert the upper case string into lower case.
Syntax: SELECT LOWER('GEEKSFORGEEKS.ORG’);
Output: geeksforgeeks.org
• LPAD(): This function is used to make the given string of the given size by adding the given symbol.
Syntax: LPAD('geeks', 8, '0’);
Output: 000geeks
Built in Functions - String functions in SQL
• LTRIM(): This function is used to cut the given sub string from the original string.
Syntax: LTRIM('123123geeks', '123’);
Output: geeks
• MID(): This function is to find a word from the given position and of the given size.
Syntax: Mid ("geeksforgeeks", 6, 2);
Output: for
• POSITION(): This function is used to find position of the first occurrence of the given alphabet.
Syntax: SELECT POSITION('e' IN 'geeksforgeeks’);
Output: 2
• REPEAT(): This function is used to write the given string again and again till the number of times mentioned.
Syntax: SELECT REPEAT('geeks', 2);
Output: geeksgeeks
• REPLACE(): This function is used to cut the given string by removing the given sub string.
Syntax: REPLACE('123geeks123', '123’);
Output: geeks
• REVERSE(): This function is used to reverse a string.
Syntax: SELECT REVERSE('geeksforgeeks.org’);
Output: ‘gro.skeegrofskeeg’
• RIGHT(): This function is used to SELECT a sub string from the right end of the given size.
Syntax: SELECT RIGHT('geeksforgeeks.org', 4);
Output: ‘.org’
• RPAD(): This function is used to make the given string as long as the given size by adding the given symbol on the right.
Syntax: RPAD('geeks', 8, '0’);
Output: ‘geeks000’
• RTRIM(): This function is used to cut the given sub string from the original string.
Syntax: RTRIM('geeksxyxzyyy', 'xyz’);
Output: ‘geeks’
• SPACE(): This function is used to write the given number of spaces.
Syntax: SELECT SPACE(7);
Output: ‘ ‘
Built in Functions - String functions in SQL
• STRCMP(): This function is used to compare 2 strings.
• If string1 and string2 are the same, the STRCMP function will return 0.
• If string1 is smaller than string2, the STRCMP function will return -1.
• If string1 is larger than string2, the STRCMP function will return 1.
Syntax: SELECT STRCMP('google.com', 'geeksforgeeks.com’);
Output: -1
• SUBSTR(): This function is used to find a sub string from the a string from the given position.
Syntax:SUBSTR('geeksforgeeks', 1, 5);
Output: ‘geeks’
• SUBSTRING(): This function is used to find an alphabet from the mentioned size and the given string.
Syntax: SELECT SUBSTRING('GeeksForGeeks.org', 9, 1);
Output: ‘G’
• SUBSTRING_INDEX(): This function is used to find a sub string before the given symbol.
Syntax: SELECT SUBSTRING_INDEX('www.geeksforgeeks.org', '.', 1);
Output: ‘www’
• TRIM(): This function is used to cut the given symbol from the string.
Syntax: TRIM(LEADING '0' FROM '000123’);
Output: 123
• UCASE(): This function is used to make the string in upper case.
Syntax: UCASE ("GeeksForGeeks");
Output: GEEKSFORGEEKS
Built in Functions - Date functions in SQL
• NOW(): Returns the current date and time.
Example: SELECT NOW();
Output:2017-01-13 08:03:52
• CURDATE(): Returns the current date.
Example: SELECT CURDATE();
Output: 2017-01-13
• CURTIME(): Returns the current time.
Example: SELECT CURTIME();
Output: 08:05:15
• DATE(): Extracts the date part of a date or date/time expression.
• EXTRACT(): Returns a single part of a date/time.
Syntax: EXTRACT(unit FORM date);
SELECT Name, Extract(DAY FROM BirthTime) AS BirthDay FROM
Test;
Built in Functions - Date functions in SQL
• DATE_ADD() : Adds a specified time interval to a date
Syntax: DATE_ADD(date, INTERVAL expr type);
SELECT Name, DATE_ADD(BirthTime, INTERVAL 1 YEAR) AS
BirthTimeModified FROM Test;

• DATE_SUB(): Subtracts a specified time interval from a date. Syntax for


DATE_SUB is same as DATE_ADD just the difference is that DATE_SUB is used
to subtract a given interval of date.

• DATEDIFF(): Returns the number of days between two dates.


Syntax: DATEDIFF(date1, date2); date1 & date2- date/time expression
SELECT DATEDIFF('2017-01-13','2017-01-03') AS DateDiff;
Output:10
Built in Functions - Date functions in SQL
• DATE_FORMAT(): Displays date/time data in different formats.
• Syntax: DATE_FORMAT(date,format);
Using Group by and having clause
The GROUP BY statement in SQL is used to arrange identical data into
groups based on specified columns. If a particular column has the same
values in multiple rows, the GROUP BY clause will group these rows
together.
Key Points About GROUP BY:
• GROUP BY clause is used with the SELECT statement.

• In the query, the GROUP BY clause is placed after the WHERE clause.

• In the query, the GROUP BY clause is placed before the ORDER BY


clause if used.

• In the query, the Group BY clause is placed before the Having clause.

• Place condition in the having clause.


Using Group by and having clause

Syntax:
SELECT column1, function_name(column2)
FROM table_name
GROUP BY column1, column2

Key Terms
1. function_name: Name of the function used for example, SUM() ,
AVG().

2. table_name: Name of the table.

3. condition: Condition used.


Example Group By Single Column

The rows with duplicate NAMEs are grouped


under the same NAME and their corresponding
Query: SALARY is the sum of the SALARY of duplicate
rows. The SUM() function of SQL is used here to
SELECT name, SUM(sal) FROM calculate the sum. The NAMES that are added
emp are Aarav, Divya and Gaurav.
GROUP BY name;
Example 2 : Group By Multiple Columns

The Grouped subject and years


are (English,2) , (Mathematics,1) and (Sc
Query: ience,3). The above mentioned all groups
SELECT SUBJECT, YEAR, and years are repeated twice.
Count(*)
FROM Student
GROUP BY SUBJECT, YEAR;
HAVING Clause in GROUP BY
Clause
We can use the HAVING clause to place conditions to
decide which group will be part of the final result set.
Also, we can not use aggregate functions like SUM(),
COUNT(), etc. with the WHERE clause. So we have to use
the HAVING clause if we want to use any of these
functions in the conditions.
Syntax
SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
HAVING condition
ORDER BY column1, column2;;
Example

In the result, only employees whose total


salary (SUM(sal)) exceeds 50,000 are
displayed. For example, if Anjali has a total
salary less than 50,000, she will be
SELECT NAME, SUM(sal) FROM excluded from the output.
Emp
GROUP BY name
HAVING SUM(sal)>50000;
Group by - Order by –Having clause
SYNTAX
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
Example
Query :
Consider Sales Table Find the total sales made by each
salesperson.Consider only
salespeople whose total sales
exceed 13,000.Display the results in
descending order based on total
sales.

SELECT salesperson,
SUM(amount) AS total_sales
FROM Sales
GROUP BY salesperson
HAVING SUM(amount) > 13000
ORDER BY total_sales DESC;
Set Operation functions in SQL
• The SQL Set operation is used to combine the two or more SQL
SELECT statements.
• Types of Set Operation
UNION Operation
• UNION is used to combine the results of two or
more SELECT statements.
• However it will eliminate duplicate rows from its resultset.
• In case of union, number of columns and datatype must be same in both
the tables, on which UNION operation is being applied.
Union All
• Union All operation is equal to the Union operation. It returns the set
without removing duplication and sorting the data.
Intersect
• It is used to combine two SELECT statements. The Intersect operation returns the common
rows from both the SELECT statements.
• In the Intersect operation, the number of datatype and columns must be the same.
• It has no duplicates and it arranges the data in ascending order by default.
Minus
• It combines the result of two SELECT statements. Minus operator is used
to display the rows which are present in the first table but absent in the
second table.
• It has no duplicates and data arranged in ascending order by default.
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation

Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands


Unique, not null, check, IN operator Commit, Rollback, Savepoint

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
Nested Queries,
Sub Queries
The Subquery or Inner query is an SQL query placed inside another SQL query. It is embedded in the HAVING or WHERE clause of
the SQL statements.

Following are the important rules which must be followed by the SQL Subquery:

1. The SQL subqueries can be used with the following statements along with the SQL expression operators:
 SELECT statement,
 UPDATE statement,
 INSERT statement, and
 DELETE statement.

2. The subqueries in SQL are always enclosed in the parenthesis and placed on the right side of the SQL operators.

3. We cannot use the ORDER BY clause in the subquery. But, we can use the GROUP BY clause, which performs the same function
as the ORDER BY clause.

4. If the subquery returns more than one record, we have to use the multiple value operators before the Subquery.

5. We can use the BETWEEN operator within the subquery but not with the subquery.
Subquery with SELECT statement
In SQL, inner queries or nested queries are used most frequently with the SELECT
statement. The syntax of Subquery with the SELECT statement is described in the
following block:

Syntax:

SELECT Column_Name1, Column_Name2, ...., Column_NameN

FROM Table_Name WHERE Column_Name Comparison_Operator

( SELECT Column_Name1, Column_Name2, ...., Column_NameN


FROM Table_Name WHERE condition;
Example 1
Let's take the following table named Student_Details, which contains Student_RollNo., Stu_Name, Stu_Marks, and
Stu_City column.
QUERY 1 Retrieve the student details whose individual mark is greater than average marks.

SELECT * FROM Student_Details WHERE Stu_Marks > ( SELECT AVG(Stu_Marks ) FROM Student_Details);
Example 2

Let's take the following two tables named Faculty_Details and Department tables. The Faculty_Details table
contains ID, Name, Dept_ID, and address of faculties. And, the Department table contains the Dept_ID, Faculty_ID,
and Dept_Name.

Query 2: Retrieve the details from the department table where


the faculty stays in Noida or Gurgaon
SELECT * FROM Department WHERE Faculty_ID IN (
SELECT Faculty_ID FROM Faculty WHERE Address = 'Noida’
OR Address = 'Gurgaon' ) ;
Subquery with the INSERT statement

We can insert the results of the subquery into the table of the outer
query. The syntax of Subquery with the INSERT statement is described
in the following block:

Syntax

INSERT INTO Table_Name SELECT * FROM Table_Name WHERE Column


_Name Operator (Subquery);
Example
Let's take Old_Employee and New_Employee tables. The Old_Employee and New_Employee table contain the
same number of columns. But, both the tables contain different records.

Query 3: Insert details in the new employee table from the


old employee table whose employee salary is greater than
40000
INSERT INTO New_Employee SELECT * FROM Old_Employee
WHERE Emp_Salary > 40000;
SELECT * FROM New_Employee;
Subquery with the UPDATE statement

The subqueries and nested queries can be used with the UPDATE statement in Structured
Query Language for updating the columns of the existing table. We can easily update one
or more columns using a subquery with the UPDATE statement.

Syntax of Subquery with the UPDATE statement

UPDATE Table_Name SET Column_Name = New_value WHERE Value OPERATOR (SELECT


COLUMN_NAME FROM TABLE_NAME WHERE Condition) ;
Example
This example updates the record of one table using the IN operator with Subquery in the UPDATE statement.Let's take
an Employee_Details and Department table The data of the Employee_Details table is shown in the following table:

Query 4: Update the emp salary by adding 5000 for the employee id
whose working in the department grade A
UPDATE Employee_Details SET Emp_Salary = Emp_Salary + 5000 WHERE
Emp_ID IN ( SELECT Emp_ID FROM Department WHERE Dept_Grade = 'A' ) ;

SELECT * FROM Employee_Details ;


Subquery with the DELETE statement
We can easily delete one or more records from the SQL table using
Subquery with the DELETE statement in Structured Query Language.

Syntax of Subquery with DELETE statement

DELETE FROM Table_Name WHERE Value OPERATOR (SELECT COLUMN_


NAME FROM TABLE_NAME WHERE Condition) ;
Example
This example deletes the records from the table using the IN operator with Subquery in the DELETE statement.Let's
take an Employee_Details and Department table.The data of the Employee_Details table is shown in the following
table:

Query 5: Delete the record of those employees from the


Employee_Details whose Department Grade is C:
DELETE FROM Employee_Details WHERE Emp_ID IN ( SELECT Emp_ID
FROM Department WHERE Dept_Grade = 'C' ) ;
SELECT * FROM Employee_Details ;
Subquery
• Subquery can be simply defined as a query within another query. In other words we can say that a Subquery is
a query that is embedded in WHERE clause of another SQL query.
• Important rules for Subqueries
• You can place the Subquery in a number of SQL clauses: WHERE clause, HAVING clause, FROM clause.
Subqueries can be used with SELECT, UPDATE, INSERT, DELETE statements along with expression
operator. It could be equality operator or comparison operator such as =, >, =, <= and Like operator.
• A subquery is a query within another query. The outer query is called as main query and inner query is called
as subquery.
• The subquery generally executes first, and its output is used to complete the query condition for the main or
outer query.
• Subquery must be enclosed in parentheses.
• Subqueries are on the right side of the comparison operator.
• ORDER BY command cannot be used in a Subquery. GROUPBY command can be used to perform same
function as ORDER BY command.
• Use single-row operators with singlerow Subqueries. Use multiple-row operators with multiple-row
Subqueries.
Subqueries with SELECT statement
Syntax
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT
COLUMN_NAME from TABLE_NAME WHERE ... );

• Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT


ROLL_NO from STUDENT where SECTION=’A’);
Subqueries with the INSERT Statement
• Subqueries also can be used with INSERT statements.
• The INSERT statement uses the data returned from the subquery to insert
into another table.
• The selected data in the subquery can be modified with any of the
character, date or number functions.

INSERT INTO Student1 SELECT * FROM Student2;


Subqueries with the UPDATE Statement
• The subquery can be used in conjunction with the UPDATE statement. Either single or multiple
columns in a table can be updated when using a subquery with the UPDATE statement.
• 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.
• A correlated subquery, however, executes once for each candidate row
considered by the outer query. In other words, the inner query is driven by
the outer query.
NOTE : You can also use the ANY and ALL operator in a correlated
subquery.
Key Features of Corelated Queries
✅ The subquery runs for each row in the outer query.
✅ The subquery depends on values from the outer query.
✅ Often used for comparisons within the same table.
✅ Slower than normal subqueries because it runs multiple times.
When to Use Correlated Queries?
✔ Filtering based on grouped values (e.g., "higher than department
average").
✔ Checking existence conditions (e.g., "employees who earn more than
their manager").
✔ Row-by-row comparisons within the same table.
Example

Find employees whose salary is higher than the


average salary of their respective departments. with
table contents

SELECT e1.empId, e1.name, e1.salary, e1.deptId


FROM Employees e1
WHERE e1.salary > (
SELECT AVG(e2.salary)
FROM Employees e2
WHERE e2.deptId = e1.deptId);
Example

Find employees who belong to an


existing department

SELECT e.empId, e.name, e.deptId


FROM Employees e
WHERE EXISTS ( The subquery does not need to return actual data—it only checks if a row
SELECT 1 FROM Departments d exists.SELECT 1 is a simple, efficient way to indicate "yes, a row exists".The
outer query returns employees only if their deptId exists in the Departments
WHERE d.deptId = e.deptId ); table.
Example

Find employees whose department does


NOT exist in the Departments table

SELECT e.empId, e.name, e.deptId


FROM Employees e
WHERE NOT EXISTS (
SELECT 1 FROM Departments d
WHERE d.deptId = e.deptId );
Example

Find Employees Who Earn More Than


ANY Employee in Department 1
Explanation:
SELECT name, salary The subquery retrieves all salaries from department 1:{70000,
50000}The main query selects employees whose salary is greater
FROM Employees
than at least one of these values.This means it will select employees
WHERE salary > ANY ( earning more than 50000 (the smallest salary in dept 1).
SELECT salary FROM Employees
WHERE deptId = 1 );
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.

Note: Only the orders that


involve products with
Natural Ash will be included
in the final results.
Nested Subquery
A nested query (also called a subquery) is a query embedded within
another SQL query. The result of the inner query is used by the outer
query to perform further operations. Nested queries are commonly used
for filtering data, performing calculations, or joining
datasets indirectly.
Key Characteristics:
• The inner query runs before the outer query.

• The result of the inner query can be used by the outer query
for comparison or as input data.

• Nested queries are particularly useful for breaking down complex


problems into smaller, manageable parts, making it easier to retrieve
specific results from large datasets.
Nested Subqueries

Query : Retrieve student names who enrolled in


‘DSA’ or ‘DBMS’

SELECT S_NAME FROM STUDENT


WHERE S_ID IN (
SELECT S_ID FROM STUDENT_COURSE
WHERE C_ID IN (
SELECT C_ID FROM COURSE WHERE C_NAME IN
('DSA', 'DBMS’) ));
Output
S_Name
Ram
Ramesh
Suresh
Nested Subqueries
Retrieve student IDs not enrolled in ‘DSA’ or ‘DBMS’
This query excludes students who are enrolled in the courses ‘DSA’ or
‘DBMS’.

SELECT S_ID FROM STUDENT


WHERE S_ID NOT IN (
SELECT S_ID FROM STUDENT_COURSE
WHERE C_ID IN (
SELECT C_ID FROM COURSE WHERE C_NAME IN ('DSA', 'DBMS')));
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
Nested Queries,
SQL Views
• Views in SQL are kind of virtual tables.
• A view also has rows and columns as they are in a real table in the
database.
• We can create a view by selecting fields from one or more tables present
in the database.
• A View can either have all the rows of a table or specific rows based on
certain condition.
Student Details Student Marks
Creating a View
View can be created using CREATE VIEW statement. A View can be created from a
single table or multiple tables.

Syntax
Student Details CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name
WHERE condition;

view_name: Name for the View


table_name: Name of the table
condition: Condition to select rows
Creating View from a single table
Output
CREATE VIEW DetailsView AS SELECT NAME, ADDRESS FROM
StudentDetails WHERE S_ID < 5;

To see the data in the View, we can query the view in the same manner as we query a
table.
SELECT * FROM DetailsView;
Student Details Creating View from multiple tables
In this example we will create a View named MarksView from two
tables StudentDetails and StudentMarks.
To create a View from multiple tables we can simply include multiple
tables in the SELECT statement.
Student Marks CREATE VIEW MarksView AS SELECT StudentDetails.NAME,
StudentDetails.ADDRESS,StudentMarks.MARKS FROM
StudentDetails, StudentMarks WHERE StudentDetails.NAME =
StudentMarks.NAME;

To display data of View MarksView:


Output
SELECT * FROM MarksView;
DELETING VIEWS
SQL allows us to delete an existing View. We can delete or drop a View using the DROP
statement.

Syntax

DROP VIEW view_name;

view_name: Name of the View which we want to delete.

For example, if we want to delete the View MarksView.

DROP VIEW MarksView;


UPDATING VIEWS
There are certain conditions needed to be satisfied to update a view. If any one
of these conditions is not met, then we will not be allowed to update the view.

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:

CREATE OR REPLACE VIEW MarksView AS SELECT StudentDetails.NAME, StudentDetails.ADDRESS,


StudentMarks.MARKS, StudentMarks.AGE FROM StudentDetails, StudentMarks WHERE
StudentDetails.NAME = StudentMarks.NAME;

If we fetch all the data from MarksView now as:


SELECT * FROM MarksView;

Output
Inserting a row in a view
We can insert a row in a View in a same way as we do in a table. We can use the INSERT INTO statement of SQL
to insert a row in a View.

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”.

INSERT INTO DetailsView(NAME, ADDRESS) VALUES("Suresh","Gurgaon");

If we fetch all the data from DetailsView now as, Output


SELECT * FROM DetailsView;
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

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
TRANSACTION
• A transaction is a unit of work that is performed against a database.
Transactions are units or sequences of work accomplished in a
logical order, whether in a manual fashion by a user or automatically
by some sort of a database program.
• A transaction is the propagation of one or more changes to the
database. For example, if you are creating a record or updating a
record or deleting a record from the table, then you are performing a
transaction on that table. It is important to control these transactions
to ensure the data integrity and to handle database errors.
• Practically, you will club many SQL queries into a group and you will
execute all of them together as a part of a transaction.
Properties of Transactions
Transactions have the following four standard properties, usually referred
to by the acronym ACID.

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 language is a language that manages transactions within the database. It
is used to execute the changes made by the DML statements.

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.
COMMIT
Transactional control commands are only used with the DML
Commands such as - INSERT, UPDATE and DELETE only.

They cannot be used while creating tables or dropping them


because these operations are automatically committed in the
database

The COMMIT command is the transactional command used to


save changes invoked by a transaction to the database.
Example
Consider the CUSTOMERS table having the following records
Following is an example which would delete those records from the table
which have age = 25 and then COMMIT the changes in the database.

Thus, two rows from the table would be deleted and the SELECT statement would
produce the following result.
ROLLBACK Command

The ROLLBACK command is the transactional command used to undo


transactions that have not already been saved to the database.
This command can only be used to undo transactions since the last
COMMIT or ROLLBACK command was issued.
The syntax for a ROLLBACK command is as follows :
Example
Consider the CUSTOMERS table having the following records

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;
Example
• Given below is an example of the usage of the TCL commands
in the database management system (DBMS)
@@ROWCOUNT returns the number of rows affected
by the last SQL statement only, which in this case is the
second UPDATE (the one with city = 'hyderabad’).
It does not return the total rows affected by both
UPDATEs.

✅ Outcome: If the second UPDATE affected exactly 5


rows, the transaction will be committed (i.e., changes
will be saved).Otherwise, the entire transaction will be
rolled back (i.e., all changes undone, including the first
UPDATE).
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.

• This command serves only in the creation of a SAVEPOINT


among all the transactional statements. The ROLLBACK
command is used to undo a group of transactions.
The syntax for rolling back to a SAVEPOINT is as shown below.
Following is an example where you plan to delete the three
different records from the CUSTOMERS table. You want to
create a SAVEPOINT before each delete, so that you can
ROLLBACK to any SAVEPOINT at any time to return the
appropriate data to its original state.
• Example
Consider the CUSTOMERS table having the following records.
The following code block contains the series of operations.

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.
Difference between Commit, rollback and savepoint of
TCL commands
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

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
Introduction to PL/SQL

PL/SQL (Procedural Language/Structured Query


Language) is a block-structured language developed
by Oracle that allows developers to combine the power
of SQL with procedural programming constructs. The
PL/SQL language enables efficient data manipulation
and control-flow logic, all within the Oracle Database.
Structure of PL/SQL

PL/SQL is Block Structured


A block is the basic unit from which all PL/SQL programs are built. A
block can be named (functions and procedures) or anonymous
PL/SQL - Basic Syntax

DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
PL/SQL - Variables
The syntax for declaring a variable is −
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT
initial_value]
Where, variable_name is a valid identifier in PL/SQL, datatype must be a
valid PL/SQL data type
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]
Assigning SQL Query Results to PL/SQL Variables
The following program assigns values from the above table to PL/SQL
variables using the SELECT INTO clause of SQL −

DECLARE
c_id customers.id%type := 1;
c_name customers.name%type;
c_addr customers.address%type;
c_sal customers.salary%type;
BEGIN
SELECT name, address, salary INTO c_name, c_addr, c_sal
FROM customers
WHERE id = c_id;
dbms_output.put_line ('Customer ' ||c_name || ' from ' || c_addr || '
earns ' || c_sal);
END;
/
It declares four PL/SQL variables:c_id is initialized to 1 and uses the data
type of customers.id.c_name, c_addr, and c_sal are declared to hold the
values from columns name, address, and salary of the customers table.
They inherit their data types using %TYPE.
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 created automatically by the


database system whenever a SQL statement is
executed. They are used to execute single-row
queries and are not visible to the programmer.
• 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
or a SELECT INTO statement returned one or more rows. Otherwise, it returns FALSE.
1

%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
Example - %Found
CREATE TABLE tempory_employee AS SELECT * FROM
employees;
DECLARE
employeeNo NUMBER(4) := 2;
BEGIN
DELETE FROM tempory_employee WHERE employeeId =
employeeNo ;
IF SQL%FOUND THEN
INSERT INTO tempory_employee
(employeeId,employeeName,employeeCity) VALUES (2, 'ZZZ',
'Delhi');
END IF;
END;
/
Example for %NOTFOUND with Implicit Cursor
You want to update the salary of an employee, and then check whether any row was affected
using SQL%NOTFOUND.

BEGIN
UPDATE employees
SET salary = salary + 1000
WHERE employee_id = 105;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with employee_id = 105');
ELSE
DBMS_OUTPUT.PUT_LINE('Salary updated successfully.');
END IF;
END;
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.

The syntax for creating an explicit cursor is −


CURSOR cursor_name IS select_statement;

Working with an explicit cursor includes the following steps −


• Declaring the cursor for initializing the memory
• Opening the cursor for allocating the memory
• Fetching the cursor for retrieving the data
• Closing the cursor to release the allocated memory
Cursor-Declaration
• Declaring the Cursor
Declaring the cursor defines the cursor with a name and the associated SELECT statement.
For example −
CURSOR c_customers IS SELECT id, name, address FROM customers;
• Opening the Cursor
Opening the cursor allocates the memory for the cursor and makes it ready for fetching the rows returned by
the SQL statement into it. For example, we will open the above defined cursor as follows −
OPEN c_customers;
• Fetching the Cursor
Fetching the cursor involves accessing one row at a time. For example, we will fetch rows from the above-
opened cursor as follows −
FETCH c_customers INTO c_id, c_name, c_addr;
• Closing the Cursor
Closing the cursor means releasing the allocated memory. For example, we will close the above-opened cursor
as follows −
CLOSE c_customers;
DECLARE
Example
c_id customers.id%type;
c_name customer.name%type;
c_addr customers.address%type; Output:
1 Ramesh Ahmedabad
CURSOR c_customers IS 2 Khilan Delhi
3 kaushik Kota
SELECT id, name, address FROM customers; 4 Chaitali Mumbai
5 Hardik Bhopal
BEGIN 6 Komal MP
OPEN c_customers;
LOOP
FETCH c_customers into c_id, c_name, c_addr;
EXIT WHEN c_customers%notfound;
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
END LOOP;
CLOSE c_customers;
END;
Practice
Question:
In a university database, the administration wants to identify
students who have scored less than 40 marks in any subject and send
them for remedial classes.
Write a PL/SQL block using an explicit cursor to display the names
and marks of such students.
Solution
DECLARE
stu_id students.student_id%TYPE;
stu_name students.name%TYPE;
stu_marks students.marks%TYPE;
-- Declare explicit cursor to select students with marks < 40
CURSOR remedial_cursor IS
SELECT student_id, name, marks
FROM students
WHERE marks < 40;
BEGIN
OPEN remedial_cursor;
LOOP
FETCH remedial_cursor INTO stu_id, stu_name, stu_marks;
EXIT WHEN remedial_cursor%NOTFOUND;

-- Display students needing remedial classes


DBMS_OUTPUT.PUT_LINE('Student: ' || stu_name ||
' | Marks: ' || stu_marks ||
' --> Assigned to Remedial Classes');
END LOOP;
CLOSE remedial_cursor;
END;
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation

Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands


Unique, not null, check, IN operator Commit, Rollback, Savepoint

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
Nested Queries,
Stored Procedure

 A stored procedure in SQL is a group of SQL statements that are


stored together in a database.
 Based on the statements in the procedure and the parameters you
pass, it can perform one or multiple DML operations on the
database, and return value, if any.
 Stored Procedure is a function in a shared library accessible to the
database server can also write stored procedures using languages
such as C or Java
 The more SQL statements that are grouped together for execution,
the larger the savings in network traffic
Advantages of stored procedure
• Reusable: As mentioned, multiple users and applications can easily use and
reuse stored procedures by merely calling it.
• Easy to modify: You can quickly change the statements in a stored
procedure as and when you want to, with the help of the ALTER TABLE
command.
• Security: Stored procedures allow you to enhance the security of an
application or a database by restricting the users from direct access to the
table.
• Low network traffic: The server only passes the procedure name instead of
the whole query, reducing network traffic.
• Increases performance: Upon the first use, a plan for the stored procedure
is created and stored in the buffer pool for quick execution for the next
time.
Normal Database
Applications using stored procedures
Writing Stored Procedures

CREATE or REPLACE PROCEDURE name(parameters)


AS
variables;
BEGIN;
//statements;
END;

Three types of parameters are:


• IN: It is the default parameter that will receive input value from the program
• OUT: It will send output value to the program
• IN OUT: It is the combination of both IN and OUT. Thus, it receives from, as well as sends a value to the
program
EXAMPLE:
CREATE PROCEDURE UPDATE_SALARY_1 (1)
(IN EMPLOYEE_NUMBER CHAR(6), (2)
IN RATE INTEGER) (2)
LANGUAGE SQL (3)
BEGIN
UPDATE EMPLOYEE (4)
SET SALARY = SALARY + 1000
WHERE SSN = EMPLOYEE_NUMBER;
END

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
CONDITIONAL STATEMENTS:

IF <condition> THEN
<statement(s)>
ELSE
<statement(s)>
END IF;

Loops
LOOP
……
EXIT WHEN <condition>
……
END LOOP;
Example
The procedure takes two numbers using the IN mode and returns their minimum using the OUT
parameters.
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
Example 2
Write a procedure computes the square of value of a
passed value.
CREATE PROCEDURE UPDATE_SALARY_IF
(IN employee_number CHAR(6), IN rating SMALLINT)
Question
Write a stored procedure to update an LANGUAGE SQL
employee’s salary and bonus based on BEGIN
their performance rating. If the
employee’s rating is 1, increase the SET counter = 10;
salary by 10% and set a bonus of 1000. WHILE (counter > 0) DO
If the rating is 2, increase the salary by IF (rating = 1)
5% and set a bonus of 500. For any THEN UPDATE employee
other rating, increase the salary by 3%
SET salary = salary * 1.10, bonus = 1000
and set the bonus to 0. Additionally, the
update process should be repeated 10 WHERE empno = employee_number;
times using a loop." 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
Creating a Function
A standalone function is created using the CREATE
FUNCTION statement. The simplified syntax for the CREATE OR
REPLACE PROCEDURE statement is as follows −
• function-name specifies the name of the
function.
• [OR REPLACE] option allows the modification of
an existing function.
• The optional parameter list contains name, mode
and types of the parameters. IN represents the
value that will be passed from outside and OUT
represents the parameter that will be used to
return a value outside of the procedure.
• The function must contain a return statement.
• The RETURN clause specifies the data type you
are going to return from the function.
• function-body contains the executable part.
• The AS keyword is used instead of the IS keyword
for creating a standalone function.
Example
Write PL/SQL Function that computes and returns the
maximum of two values.
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.

Key Features of SQL Triggers:


• Automatic Execution: Triggers fire automatically when the defined
event occurs (e.g., INSERT, UPDATE, DELETE).

• Event-Driven: Triggers are tied to specific events that take place


within the database.

• Table Association: A trigger is linked to a specific table or view, and


operates whenever changes are made to the table’s data.
Triggers

Triggers are composed to be executed in light of any of the


accompanying occasions.

A database control (DML) statement (DELETE, INSERT, or UPDATE).


A database definition (DDL) statement (CREATE, ALTER, or DROP).


A database operation (SERVERERROR, LOGON, LOGOFF, STARTUP, or
SHUTDOWN).
Triggers - Syntax

create trigger [trigger_name]


[before | after]
{insert | update | delete}
on [table_name]
FOR EACH ROW
BEGIN
END;

Key Terms
trigger_name: The name of the trigger to be created.
BEFORE | AFTER: Specifies whether the trigger is fired before or after the triggering event (INSERT, UPDATE,
DELETE).
{INSERT | UPDATE | DELETE}: Specifies the operation that will activate the trigger.
table_name: The name of the table the trigger is associated with.
FOR EACH ROW: Indicates that the trigger is row-level, meaning it executes once for each affected row.
trigger_body: The SQL statements to be executed when the trigger is fired.
DDL Triggers
The Data Definition Language (DDL) command events such
as Create_table, Create_view, drop_table, Drop_view, and Alter_table cause the DDL triggers to be
activated. They allow us to track changes in the structure of the database. The trigger will prevent any
table creation, alteration, or deletion in the database.
DML Triggers
• The Data manipulation Language (DML) command events
that begin with Insert, Update, and Delete set off the
DML triggers. DML triggers are used for data validation,
ensuring that modifications to a table are done under
controlled conditions.
Using SQL Triggers: Practical Use Cases
Automatically Updating Related Tables (DML Trigger
Example)

Triggers can automatically perform tasks, like updating


related tables when data changes. For instance, when a
student’s grade is updated, the total score in the related
table can also be updated automatically.
Data Validation (Before Insert Trigger Example)
Triggers can be used to validate data before it is inserted
into a table, ensuring that the data follows specific
business rules.

Output

This trigger ensures that no grade less than 0 or greater than 100 is
inserted into the student_grades table.
EXAMPLE
The following program creates a row-level trigger for the customers table
that would fire for INSERT or UPDATE or DELETE operations
performed on the CUSTOMERS table. This trigger will display the salary
difference between the old values and new values

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);
Example
A banking system needs to update the account summary automatically after a
deposit or withdrawal. Write a trigger to update the total balance in the
account_summary table whenever a transaction is made.

CREATE TRIGGER update_account_balance


AFTER INSERT ON transactions
FOR EACH ROW
BEGIN
UPDATE account_summary
SET balance = balance + :NEW.amount
WHERE account_id = :NEW.account_id;
END;
Example
An inventory system must ensure that stock doesn’t go negative due to order placements. Create a
trigger to prevent an order from being placed if stock is less than the ordered quantity.
CREATE TRIGGER check_stock_before_order
BEFORE INSERT ON orders
FOR EACH ROW
DECLARE
v_stock NUMBER;
BEGIN
SELECT stock INTO v_stock FROM products
WHERE product_id = :NEW.product_id;

IF v_stock < :NEW.order_quantity THEN


RAISE_APPLICATION_ERROR(-20002, 'Not enough stock available');
END IF;
END;
Advantages of Triggers

•Triggers can be written for the following purposes −

•Generating some derived column values automatically

•Enforcing referential integrity

•Event logging and storing information on table access

•Auditing

•Synchronous replication of tables

•Imposing security authorizations

•Preventing invalid transactions


Triggers – Practice Questions
1. In a shopping application, if a product's quantity in stock goes below
10, it must be notified to the inventory team. Write an AFTER
UPDATE trigger to insert such products into a reorder_alerts table.
2. A hospital management system needs to ensure that a patient's
discharge date is never earlier than the admission date. Write a
trigger to validate this rule before inserting or updating a record in
the patients table.
3. In a banking system, any withdrawal transaction exceeding ₹50,000
must be logged for auditing. Write an AFTER trigger to insert such
transaction details into an audit_log table.
Question 1 Solution
CREATE TRIGGER check_inventory_level
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
IF NEW.stock_quantity < 10 THEN
INSERT INTO reorder_alerts (product_id, product_name)
VALUES (NEW.product_id, NEW.product_name);
END IF;
END;
Question 2 Solution
CREATE TRIGGER validate_discharge_date
BEFORE INSERT ON patients
FOR EACH ROW
BEGIN
IF NEW.discharge_date < NEW.admission_date THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Discharge date cannot be earlier than admission
date';
END IF;
END;
Question 3 Solution
CREATE TRIGGER log_large_withdrawals
AFTER INSERT ON transactions
FOR EACH ROW
BEGIN
IF NEW.amount > 50000 AND NEW.transaction_type = 'Withdrawal' THEN
INSERT INTO audit_log (account_no, amount, transaction_date)
VALUES (NEW.account_no, NEW.amount, NOW());
END IF;
END;
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation

Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands


Unique, not null, check, IN operator Commit, Rollback, Savepoint

Functions-aggregation functions PL/SQL Concepts- Cursors


Built-in Functions-numeric, date, string
functions, string functions, Set operations, Stored Procedure, Functions
Triggers and Exceptional
Handling
Sub Queries, correlated sub queries Query Processing
Nested Queries,
Query Processing
Query Processing includes translations of high-level Queries
into low-level expressions that can be used at the physical
level of the file system, query optimization, and actual
execution of the query to get the actual result.
The process of extracting data from a database is called query
processing. It requires several steps to retrieve the data
from the database during query processing. The actions
involved actions are:
1. Parsing and translation

2. Optimization

3. Evaluation
Query Processing
Query Processing (Cont.)
• Alternative ways of evaluating a given query
• Equivalent expressions
• Different algorithms for each operation
• Cost difference between a good and a bad way of evaluating a query can be enormous
• Need to estimate the cost of operations
• Depends critically on statistical information about relations which the database must
maintain
• Need to estimate statistics for intermediate results to compute cost of complex
expressions
Transaction Management
• What if the system fails?
• What if more than one user is concurrently updating the same data?
• A transaction is a collection of operations that performs a single logical function in a database
application
• Transaction-management component ensures that the database remains in a consistent
(correct) state despite system failures (e.g., power failures and operating system crashes) and
transaction failures.
• Concurrency-control manager controls the interaction among the concurrent transactions, to
ensure the consistency of the database.
Step-1
• Parser: During parse call, the database performs the following checks-
Syntax check, Semantic check and Shared pool check, after converting the
query into relational algebra.
• Parser performs the following
• Syntax check – concludes SQL syntactic validity.
• SELECT * FROM employee;
1.Semantic check – determines whether the statement is meaningful or not.
Example: query contains a tablename which does not exist is checked by this
check.
2.Shared Pool check – Every query possess a hash code during its execution.
So, this check determines existence of written hash code in shared pool if
code exists in shared pool then database will not take additional steps for
optimization and execution.
Hard Parse and Soft Parse
• If there is a fresh query and its hash code does not exist in shared pool then that query has to pass through from the additional steps
known as hard parsing
• If hash code exists then query does not passes through additional steps. It just passes directly to execution engine. This is known as
soft parsing.

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.

You might also like