SlideShare a Scribd company logo
6. DML Statements of SQL
 INSERT, UPDATE, DELETE and SELECT Statements
 SELECT DISTINCT, ALL, Column Alias, Column Expressions
 WHERE Clause and Search Conditions
 Logical and Relational Operators
 NULL, LIKE, IN and BETWEEN Predicates
 ORDER BY Clause
 Aggregate Functions, GROUP BY and HAVING Clauses
 Sub-queries, Quantifiers, EXISTS and NOT EXISTS Predicates
 Joins, Cartesian Products and Cross Join, Inner and Outer Joins
 Set Operations
SQL DML Statements
There are 4 DML statements:
DML
Statements
SELECT
INSERT
UPDATE
DELETE
INSERT Statement
The INSERT statement adds a row to the specified table.
Syntax: INSERT INTO table-name [ ( column-list ) ]
VALUES ( value-list )
column-list: Comma separated columns
value-list: Comma separated values
Examples:
INSERT INTO books VALUES (10001, ’Harry Potter and The
Chamber of Secrets’, ’J.K. Rowling’, ’Bloomsbury’);
INSERT INTO books (book_id) VALUES (10002);
INSERT INTO books (book_title, book_id)
VALUES (’Android 4 Application Development’, 10005);
INSERT Statement
Contents of table “books”
UPDATE Statement
The UPDATE statement modifies values of specified columns of
specified table of all rows or only those rows that satisfy given
search condition.
Syntax: UPDATE table-name SET column-name = value
[, column-name = value ] …
[ WHERE search-condition ]
search-condition: An expression containing column names and/or
literals with relational operators and logical operators yielding a
boolean value.
Examples:
UPDATE books SET publisher = ’Bloomsbury’;
UPDATE books
SET book_title = ’Harry Potter and The Philosopher’s Stone’
WHERE book_id = 10001;
UPDATE Example Results
Result of executing two update statements shown in the
earlier slide:
DELETE Statement
The DELETE statement deletes all rows or only those rows that
satisfy given search condition from the specified table.
Syntax: DELETE FROM table-name [ WHERE search-condition ]
search-condition: An expression containing column names and/or
literals with relational operators and logical operators yielding a
boolean value.
Examples:
DELETE FROM books WHERE book_id = 10005;
DELETE Statement
Example Results
The slide shows contents of table books after executing the delete
statement specified in the previous slide.
SELECT Statement
The SELECT statement retrieves all rows or only those rows that
satisfy given search condition from the list of specified tables.
SELECT statement syntax is complex of all SQL statements. A simple
SELECT statement syntax is as follows:
Syntax:: SELECT [ DISTINCT | ALL ] { * | { column-expr
[ AS column-alias ] } [ , column-expr [ AS column-alias ] ] …
FROM table-name [ table-alias ] [, table-name [ table-alias ] ] …
[ WHERE search-condition ]
[ GROUP BY grp-column-list ] [ HAVING search-condition ]
[ ORDER BY ord-column-list ]
column-expr: An expression whose value will form a column value in
the result of the SELECT statement.
search-condition: An expression to select only those rows satisfying
the expression.
Tables for Demonstration
CREATE TABLE emp(
eno INTEGER NOT NULL
PRIMARY KEY,
ename VARCHAR (50) NOT NULL,
designation VARCHAR(50)
NOT NULL,
salary DECIMAL(10, 2),
mno INTEGER NULL,
dno INTEGER NOT NULL
REFERENCES dept(dno)
);
CREATE TABLE bldg(
bno INTEGER NOT NULL
PRIMARY KEY,
bname VARCHAR (50) NOT NULL,
city VARCHAR(50) NOT NULL
);
CREATE TABLE dept(
dno INTEGER NOT NULL
PRIMARY KEY,
dname VARCHAR (50) NOT NULL,
mno INTEGER NULL,
bno INTEGER NOT NULL
REFERENCES
bldg(bno)
);
Tables with primary keys and foreign keys:
ALTER TABLE dept
ADD FOREIGN KEY (mno)
REFERENCES emp(eno);
Data for Building Table bldg
INSERT INTO bldg VALUES(1, ’UB Tower’, ’Bangalore’);
INSERT INTO bldg VALUES(2, ’Cyber Tower’, ’Hyderabad’);
INSERT INTO bldg VALUES(3, ’Discoverer, ITPL’,
’Bangalore’);
INSERT INTO bldg VALUES(4, ’ Maker Towers’, ’Mumbai’);
Data for Department Table dept
INSERT INTO dept VALUES(11, ’Corporate’, NULL, 1);
INSERT INTO dept VALUES(22, ’HR’, NULL, 1);
INSERT INTO dept VALUES(33, ’ Accounts’, NULL, 1);
INSERT INTO dept VALUES(44, ’Projects’, NULL, 2);
INSERT INTO dept VALUES(55, ’Products’, NULL, 3);
Data for Employee Table emp
INSERT INTO emp VALUES(111, ’Akhil’, ’President & CEO’, 500000, 111, 11);
INSERT INTO emp VALUES(112, ’Dinesh’, ’COO’, 300000, 111, 11);
INSERT INTO emp VALUES(113, ’Bhaskar’, ’CTO’, 300000, 111, 11);
INSERT INTO emp VALUES(114, ’Harish’, ’CFO’, 300000, 111, 11);
INSERT INTO emp VALUES(221, ’Rajesh’, ’HR Manager’, 75000, 112, 22);
INSERT INTO emp VALUES(222, ’Mathew’, ’HR Executive’, 50000, 221, 22);
INSERT INTO emp VALUES(331, ’Bala’, ’Accounts Manager’, 75000, 114, 33);
INSERT INTO emp VALUES(332, ’Venky’, ’Accounts Trainee’, 20000, 331, 33);
INSERT INTO emp VALUES(441, ’Suri’, ’Manager - Projects’, 75000, 113, 44);
INSERT INTO emp VALUES(442, ’Vinny’, ’Engineer’, 25000, 441, 44);
INSERT INTO emp VALUES(443, ’Bhargav’, ’Engineer’, 20000, 442, 44);
INSERT INTO emp VALUES(551, ’Jimson’, ’Manager - Products’, 75000, 113, 55);
INSERT INTO emp VALUES(552, ’Niranjan’, ’Engineer’, 50000, 551, 55);
INSERT INTO emp VALUES(553, ’Praveen’, ’Engineer’, 25000, 552, 55);
INSERT INTO emp VALUES(554, ’Sugumar’, ’Engineer’, 20000, 552, 55);
Setting up Managers for
Departments
The following statements setup managers for Corporate, Projects and Products
departments:
UPDATE dept SET mno = 111 WHERE dno = 11;
UPDATE dept SET mno = 112 WHERE dno = 44;
UPDATE dept SET mno = 113 WHERE dno = 55;
Select Examples
Projecting All Columns of A Table
Project all columns from table emp:
SELECT eno, ename, designation, salary, mno, dno FROM emp;
Select Examples
Projecting A Few Columns of A Table
Project two columns from table emp:
SELECT ename, salary FROM emp;
Select Examples
Using Table Alias
Table alias e used for table emp:
SELECT e.ename, e.salary FROM emp e;
Select Examples
Projecting All Columns with *
Project all columns
from table emp:
SELECT * FROM emp;
Using a table alias:
SELECT e.*
FROM emp e
SELECT Examples:
DISTINCT Clause
SELECT designation FROM emp;
SELECT DISTINCT designation
FROM emp
The DISTINCT clause gives only
distinct rows as result set of
SELECT statement.
SELECT Examples:
ALL Clause
SELECT designation FROM emp;
SELECT ALL designation
FROM emp
The ALL specified before result
set column expressions makes
the SELECT to return all rows.
SELECT Examples: Result Column Names
using AS Clause
SELECT
eno AS ’Employee Number’,
ename AS ’Employee Name’
FROM emp
SELECT eno, ename
FROM emp
SELECT: Column
Expressions
Salary raise by 10%:
SELECT ename , salary + salary * 0.1
FROM emp
Salary raise by 10% with name for the
column expression:
SELECT ename , salary + salary * 0.1
AS ’New Salary’
FROM emp
SELECT: Row Selection Using
WHERE Clause
• The WHERE clause is used to specify a condition to select only
those rows from the input tables that satisfy the condition.
• The condition is known as Search Condition.
• The condition should evaluate to a BOOLEAN value: TRUE or FALSE
• The SELECT statement evaluates search condition for each row of
the table specified in the FROM clause by substituting columns of
the condition with values from the row. If the search condition
evaluates to TRUE, the statement selects the row and outputs.
• Arithmetic and Logical operators can be used in the search
condition.
• Search Condition can contain columns, literals and even other
SELECT statements.
SELECT: WHERE Clause
Search Condition Operators
Logical Operators: AND, OR, NOT
Relational Operators: =, !=, <>, >, <. >= , <=
Quantifiers: ALL, ANY, SOME
Specific Predicates: NULL, LIKE, CONTAINS, EXISTS, IN, BETWEEN
SELECT: Row Selection Using
WHERE Clause
Employees who work in Products
department:
SELECT ename , salary
FROM emp
WHERE dno = 55
Employees who work in Products
department and whose salary is more
than Rs 25000:
SELECT ename , salary
FROM emp
WHERE dno = 55 AND salary > 25000
SELECT : WHERE clause -
LOGICAL operators AND & OR
Employees who work in department
number 44 or 55:
SELECT ename , salary, dno
FROM emp
WHERE dno = 44 OR dno = 55
Employees who work in department
number 55 and get salary of more
than Rs 50,000:
SELECT ename , salary, dno
FROM emp
WHERE dno = 55 AND
salary > 50000
SELECT: WHERE clause -
LOGICAL operator NOT
Employees who do not work in department number 44 or 55:
SELECT ename , salary, dno
FROM emp
WHERE NOT (dno = 44 OR dno = 55)
SELECT: WHERE clause – Other
Relational operators != and <>
You already saw usage of relational operators =, > and <.
The behaviors of operators != and <> are equivalent. Here is an
example:
Employees who do not work in
both departments 44 and 55:
SELECT ename , salary, dno
FROM emp
WHERE dno != 44 AND dno <> 55;
SELECT: WHERE clause – Other
Relational operators >= and <=
Employees who earn salary Rs 25,000 or more but 50,000 or less:
SELECT ename , salary
FROM emp
WHERE salary >= 25000 AND salary <= 50000
SELECT : WHERE clause – IS NULL
Operator in NULL Predicate
The NULL operator is used to check if
a value of a column in a row is NULL.
Departments who do not have a
manager:
SELECT * FROM dept
WHERE mno IS NULL
Departments who have a manager:
SELECT * FROM dept
WHERE mno IS NOT NULL
NULL predicate
NULL predicate
SELECT: WHERE clause – Incorrect
use of NULL in predicates
SELECT *
FROM dept
WHERE mno = NULL;
WRONG!
SELECT *
FROM dept
WHERE mno != NULL;
WRONG!
SELECT: WHERE clause – LIKE
Operator & LIKE Predicate
The LIKE operator is used to do pattern
matching with character columns.
Employees whose names start with ’B’:
SELECT ename FROM emp
WHERE ename LIKE ’B%’
Employees whose names do NOT start with ‘B’:
SELECT ename FROM emp
WHERE ename NOT LIKE ’B%’
LIKE predicate
LIKE predicate
LIKE Operator: Pattern Matching
Characters % and _
% matches with any zero or more
characters whereas _ matches
with any one character.
Employees whose names have ’i’
in second position:
SELECT ename FROM emp
WHERE ename LIKE ’_i%’
Employees whose names have ’a’
and ‘k’ in that order:
SELECT ename FROM emp
WHERE ename LIKE ’%a%k%’
LIKE Operator with
ESCAPE clause
The ESCAPE clause is needed if the column values contain the pattern
matching characters % and _.
If a column, offer, values are ’50% discount’, ‘30 percent discount’,
‘no discount’, to select rows that contain the % character, the following
LIKE with ESCAPE can be used:
Items having % character in offer column:
SELECT item_name, offer FROM store
WHERE offer LIKE ’%#%%’ ESCAPE ’#’
Using predefined escape character ’’:
SELECT item_name, offer FROM store
WHERE offer LIKE ’%%%’
IN Operator &
IN Predicate
The IN operator is used to specify a list of values
a column expression has to satisfy:
Employees who work in departments 11, 44 or
55:
SELECT ename FROM emp
WHERE dno IN (11, 44, 55)
IN predicate or membership search condition
Equivalent statement without using the IN
operator:
SELECT ename FROM emp
WHERE dno = 11 OR dno = 44 OR dno = 55
BETWEEN Operator &
BETWEEN Predicate
The BETWEEN operator is used to specify a range
of values a column expression has to satisfy.
Employees whose salary range is 25000 to 75000:
SELECT ename, salary FROM emp
WHERE salary BETWEEN 25000 AND 75000
BETWEEN predicate or
Range search condition
The result includes end points of the range. The end points are
values 25000 and 75000 in the above example.
ORDER BY Clause for Sorting
Results
The ORDER BY clause is used to sort results of SELECT statements.
Syntax:
ORDER BY {{ column-name | column-number } [ ASC | DESC ] }
[, …]
column-number: serial number of a column expression in
SELECT clause
• The ORDER BY clause should be the last clause of a SELECT
statement.
• Column names should be in SELECT clause. But some RDBMSs allow
columns not in the SELECT clause.
• ASC causes results in ascending order of the column. This is default.
• DESC causes results in descending order of the column.
• Column numbers start from 1.
ORDER BY Clause Examples with
one column
Results in ascending order of values
of one column:
SELECT ename, salary, eno
FROM emp
ORDER BY ename
Results in descending order of values
of one column:
SELECT ename, salary, eno
FROM emp
ORDER BY ename DESC
ORDER BY Clause Examples with
two columns
Results in ascending order of values
of two columns:
SELECT salary, ename, eno
FROM emp
ORDER BY salary, ename
Results in descending order of
values of first column and
ascending order of second
column:
SELECT salary, ename, eno
FROM emp
ORDER BY salary DESC,
ename ASC
ORDER BY Clause Examples with
Column Expression numbers
Ordering based on column numbers:
SELECT salary, ename, eno
FROM emp
ORDER BY 1 DESC, 3 ASC
Ordering based on expressions:
SELECT salary, salary * 0.2,
ename, eno
FROM emp
ORDER BY 2 DESC, 1 ASC
SQL Aggregate Functions
 COUNT
 SUM
 AVG
 MAX
 MIN
SQL Aggregate Functions
An aggregate function gives one value from multiple values of a
column.
SQL standard defined aggregate functions are as follows:
SNO Aggregate
Function
Functionality
1 COUNT Returns number of values in a column or count of rows.
2 SUM Returns sum of the values of a numeric column.
3 AVG Returns average of values of a numeric column.
4 MIN Returns the smallest value in a column.
5 MAX Returns the largest value in a column.
SQL Aggregate Function Usage
SUM and AVG functions can be used on only numeric columns.
Each function takes one argument which should be a column name.
COUNT can be applied on all columns using COUNT(*) which will return
number of rows in a table as qualified by WHERE clause.
Except COUNT(*) all other aggregate functions ignore NULL values in
a column.
Aggregate functions can be used only in SELECT and HAVING clauses.
If SELECT clause contains any aggregate function, the select list can
contain only those columns used in GROUP BY clause in addition to
aggregate functions. It can not contain any other column references.
SQL Aggregate Function Examples:
COUNT with and without NULLs
The screen shot on the right side shows there are
6 employees in department 55 using a select
statement without using aggregate functions..
SELECT COUNT(ename)
FROM emp
WHERE dno = 55
SELECT COUNT(salary)
FROM emp
WHERE dno = 55
SELECT COUNT(*)
FROM emp
WHERE dno = 55;
Note that NULL values are
considered in the counts..
SQL Aggregate Function Examples:
MAX, MIN, SUM & AVG
The screen shot shows there are 6
employees in department number 55.
SELECT MAX(salary), MIN(salary),
SUM(salary), AVG(salary)
FROM emp
WHERE dno = 55;
Note that NULL values are not considered
in computing aggregate values.
For example, we can find that AVG(salary) =
SUM(salary)/4 where the sum is divided by
the number of non-null values and not
number of all values in the column.
SQL Aggregate Function Examples:
COUNT (DISTINCT…)
The screen shot shows there are 6
employees in department number
55.
SELECT
COUNT(DISTINCT designation),
COUNT(DISTINCT salary),
COUNT(DISTINCT mno)
FROM emp
WHERE dno = 55
Note that NULL values are not
considered in the counts with
DISTINCT.
Grouping Results
 Partitioning of Rows into Groups
 GROUP BY Clause
 Grouping Columns
 Aggregate Functions
GROUP BY clause
The GROUP BY clause groups results of a SELECT statement based on
grouping column list specified for the clause.
Syntax: GROUP BY grp_column_list
grp_column_list: List of comma separated column names.
Example:
SELECT dno, COUNT(eno), MAX(salary)
FROM emp
GROUP BY dno
This select statement outputs one row for each department containing
the department number, count of employees in the department and
maximum salary given in the department.
Grouping column list: dno
GROUP BY clause
examples
The following statement groups
employees by department
number:
SELECT dno, COUNT(eno),
MAX(salary)
FROM emp
GROUP BY dno
The following statement groups
employees by department number
and designation:
SELECT dno, designation,
COUNT(eno), MAX(salary)
FROM emp
GROUP BY dno, designation
GROUP BY clause:
Points to be noted
1. A query that contains GROUP BY clause is known as grouped
query.
2. Columns named in the GROUP BY clause are known as
grouping columns.
3. Each item (column or expression) in the SELECT clause must
be single valued per group. Hence the item has to be a
grouping column or an aggregate function. It is an error to
use non-grouping columns in the SELECT clause.
4. Grouping is done only after applying WHERE clause if it
exists in a SELECT statement.
Restricting Groups: HAVING clause
The HAVING clause is used to restrict resulting rows of the
GROUP BY clause.
Syntax: HAVING search-condition
The search condition is similar WHERE clause search condition.
Unlike WHERE clause search condition, the HAVING clause
search condition can contain aggregate functions.
If the search condition contains any predicate that does not
contain grouping columns or aggregate functions, such
predicate may be moved to WHERE clause.
HAVING clause example
The following statement restricts to groups having number of employees 4 or
more.
SELECT dno, COUNT(eno), MAX(salary)
FROM emp
GROUP BY dno
HAVING COUNT(eno) >= 4
Subqueries
 Subqueries: Scalar Subqueries, Row Subqueries,
Table Subqueries
 Quantifiers : ANY, SOME and ALL
 Predicate: IN, EXISTS and NOT EXISTS
Subqueries
Subquery is a query embedded in another query.
Subquery is also referred to as inner select, subselect or
nested query or nested statement.
The query that contains the subquery is called outer query or
outer statement.
Subqueries can be used in WHERE clause, HAVING clause and
SELECT clause of SELECT statements.
Subqueries can also be used in INSERT, UPDATE and DELETE
statements.
Types of Subqueries
Scalar subquery:
Returns only one column and one row; essentially one
value.
The query can be used in predicates as an operand for
relational operators =, !=, <, <=, > and >=.
Row subquery:
Returns multiple columns in one row.
Table subquery:
Returns multiple columns and multiple rows.
Example: Scalar Subquery in
WHERE clause
The following statement uses a scalar subquery that returns
department number of department “Products” to list all employees of
the department.
SELECT ename, salary FROM emp
WHERE dno = (SELECT dno FROM dept WHERE dname=’Products’)
Example: Scalar Sub-query with
Aggregate function in WHERE clause
The following statement returns employees whose salary is
more than average salary of all employees using a scalar
subquery that returns average salary of all employees:
SELECT ename, salary FROM emp
WHERE salary > (SELECT AVG(salary) FROM emp)
Example: Scalar Sub-query in
SELECT clause
The following statement returns employee name and difference
between salary and average salary of all those employees whose salary
is more than average salary:
SELECT ename, salary - (SELECT AVG(salary) FROM emp) AS SalDiff
FROM emp WHERE salary > (SELECT AVG(salary) FROM emp)
Example: Nested Subquery
The following statement returns number of employees whose buildings
are situated in Bangalore.
SELECT COUNT(*) FROM emp
WHERE dno IN (SELECT dno FROM dept
WHERE bno IN (SELECT bno FROM bldg
WHERE city =’Bangalore’))
Predicates with Quantifiers:
ANY, SOME and ALL
Keywords ANY, SOME and ALL are called quantifiers used to modify meaning of
relational operators in predicates that contain sub-queries.
Syntax: opd rel-oper { ANY | SOME | ALL } sub-query
opd is an operand which could be a literal, column or a scalar sub-query
or an expression containing them.
rel-oper is any relational operator >, >=, <, <=, =, !=
sub-query should project only one column but any number of rows.
If ANY or SOME quantifier is used, the predicate value is TRUE if it is satisfied with
any one value returned by the sub-query. Otherwise, it is false. If the sub-query does
not return any row, the predicate value is FALSE.
If ALL quantifier is used, the predicate value is TRUE if it is satisfied with all values
returned by the sub-query. Otherwise, it is false. If the sub-query does not return any
row, the predicate value is TRUE.
An Example using quantifier ANY
The following statement finds all employees who work in departments other than 55
and whose salary is greater than the salary of at least one employee of department
55:
SELECT ename, dno, salary FROM emp
WHERE dno != 55 AND
salary > ANY (SELECT salary FROM emp WHERE dno = 55)
An Example using quantifier: ALL
The following statement finds all employees who work in departments other than 55
and whose salary is greater than the salary of all employees of department 55:
SELECT ename, dno, salary FROM emp
WHERE dno != 55 AND
salary > ALL (SELECT salary FROM emp WHERE dno = 55)
Predicates EXISTS and NOT EXISTS
The predicates EXISTS and NOT EXISTS can be used only with sub-
queries.
Syntax: WHERE EXISTS sub-query
WHERE NOT EXISTS sub-query
The predicate EXISTS evaluates to true if the sub-query returns at least
one row. Otherwise it evaluates to false.
The predicate NOT EXISTS is true if the sub-query does not return any
row, i.e., it returns empty result set. False otherwise. The behavior is
opposite of EXISTS predicate.
The sub-query can project one or more columns or expressions.
Examples of predicates EXISTS and
NOT EXISTS
Find cities where company
departments are located.
SELECT DISTINCT b.city
FROM bldg b
WHERE EXISTS
(SELECT * FROM dept d
WHERE d.bno = b.bno)
Find cities that do not yet
have a company department:
SELECT DISTINCT b.city
FROM bldg b
WHERE NOT EXISTS
(SELECT * FROM dept d
WHERE d.bno = b.bno);
Sub-query Points to Remember
• Scalar subqueries need to be used with relational operators and in
all places in an SQL statement where only one value is expected.
• Quantifiers can be used only with relational operators.
• Subqueries used with Quantifiers as well as IN operator must be
table subqueries with one result column.
• Subqueries used with EXISTS and NOT EXISTS predicates can be
any kind of subqueries.
• ORDER BY clause may not be allowed inside sub-queries. Some
RDBMSs allow the clause as it makes sense if TOP clause is used in
the SELECT clause.
Multi-Table Queries (JOINS)
 Table List & Table Alias
 Equi-joins
 Sorting and Grouping Result sets
 Cartesian Product & Cross Join
 Inner Joins
 Outer Joins
 Left Outer Join, Right Outer Join and Full Outer Join
Multi-Table Queries or
JOINs
The multi-table queries involve more than one table in the FROM
clause of SELECT statements which combine columns of the tables
and output specified columns as per the select-list of the
statements.
The operation used for combing columns is called join operation.
The join operation on two tables gives rows
where each row consists of required columns of a row of a table
and required columns of rows of another table such that
specified predicates
where each predicate containing columns of the two tables are
satisfied.
Table List & Table Alias
Table List in the FROM clause is separated by comma.
Each table can be optionally followed by an alias which can be
used wherever table name is required.
An alias can be used as a qualifier for column name in order to
use the alias as shorthand for table name and/or to disambiguate
column names which could be same in multiple tables.
In order to use an alias for a column, prefix column name with
the alias separated by a dot.
Example: t1.c1
Two Table Join with equal-to
predicate : Equi-Join
List names of employees and departments they work for:
SELECT e.ename, d.dname FROM emp e, dept d
WHERE e.dno = d.dno
Two Table Join – Sorting results
List names of employees and departments they work for in the
ascending order of department name and employee name in each
department:
SELECT e.ename, d.dname FROM emp e, dept d
WHERE e.dno = d.dno ORDER BY d.dname, e.ename
Two Table Join –
Grouping results
Find number of employees in each department:
SELECT d.dname AS ’Department’,
COUNT(*) AS ’Number of Employees’
FROM emp e, dept d
WHERE e.dno = d.dno GROUP BY d.dname ORDER BY d.dname
Three Table Join
Find city and department for each employee:
SELECT b.city AS ’City’, d.dname AS ’Department’,
e.ename AS ’Employee’
FROM emp e, dept d, bldg b
WHERE e.dno = d.dno AND d.bno = b.bno ORDER BY 1, 2, 3
Cartesian Product using
CROSS JOIN
The Cartesian product of two tables is another table consisting of
all possible pairs of rows from the two tables.
Syntax: table1 CROSS JOIN table2
The columns of the Cartesian product consist of all columns of the
table1 followed by all columns of the table2.
If a join condition (in WHERE clause) is not specified for two tables in
a two table join, the Cartesian product is
produced.
Example:
A B
a1 b1
a2 b2
a3 b3
C D E
c1 d1 e1
c2 d2 e2
A B C D E
a1 b1 c1 d1 e1
a1 b1 c2 d2 e2
a2 b2 c1 d1 e1
a2 b2 c2 d2 e2
a3 b3 c1 d1 e1
a3 b3 c2 d2 e2
CROSS JOIN =A, B, C, D and
E are names
of columns.
Cartesian Product – Example
Find Cartesian product of emp and dept tables.
SELECT * FROM emp CROSS JOIN dept;
=
…
Tables: emp and dept
Result set
INNER JOINS and OUTER JOINS
Inner Join:
So far whatever joins we have talked about are essentially inner
joins. An inner join outputs rows from two tables that match the join
condition.
Inner joins can be written using list of tables, INNER JOIN keyword
or just JOIN keyword.
Outer Join:
An outer join returns rows that not only match the join condition but
also those that do not match the join condition.
There are three types of outer joins: LEFT OUTER JOIN, RIGHT
OUTER JOIN and FULL OUTER JOIN.
INNER JOIN with List of Tables
The simplest way to write an inner join query is to have a comma
separated list of required tables in the FROM clause of a query.
This syntax is already familiar to you.
Example: SELECT ot1.*, ot2.* FROM ot1, ot2
WHERE ot1.b = ot2.b;
Note that row <a4, NULL> of table ot1 does not match with
any row of table ot2 even though column b of table ot2 has
NULL values in two rows because NULL values can not be
compared; NULL is an unknown value.
Inner Join with key words
INNER & JOIN
If you want to write an inner join query that explicitly shows that
it is such a query, use the keywords INNER and JOIN as shown in
the following example:
SELECT ot1.*, ot2.*
FROM ot1 INNER JOIN ot2
WHERE ot1.b = ot2.b;
Or
SELECT ot1.*, ot2.*
FROM ot1 JOIN ot2
WHERE ot1.b = ot2.b;
Use of keyword INNER is optional.
LEFT OUTER JOIN
A left outer join of two tables returns rows that match specified join
condition between the two tables as well as non-matching rows from
the left table of the join. Values for the columns of the right table of
the join will receive NULL values for the non-matching rows of the
left table of the join. Here is an example:
SELECT t1.*, t2.*
FROM t1 LEFT OUTER JOIN t2
ON t1.b = t2.b;
•Keyword OUTER is optional.
•ON keyword is used to specify the outer join condition.
Only rows <a1,b1> and <a3,b3> of
t1 have matching rows in t2 based
on the join condition.
As it is left outer join , remaining
rows of t1 (<a2,b2> and <a4,
NULL>) have NULL values for
columns b and c of t2.
RIGHT OUTER JOIN
A right outer join of two tables returns rows that match specified join
condition between the two tables as well as non-matching rows from
the right table of the join. Values for the columns of the left table of
the join will receive NULL values for the non-matching rows of the
right table of the join. Here is an example:
SELECT t1.*, t2.*
FROM t1 RIGHT OUTER JOIN t2
ON t1.b = t2.b;
•Keyword OUTER is optional.
•ON keyword is used to specify the outer join condition.
Only rows <b1,c1> and <b3,c3> of
t2 have matching rows in t1 based
on the join condition.
As it is right outer join , remaining
rows of t2 (<NULL,c2> , <NULL, c4>
and <b5,c5>) have NULL values for
columns a and b of t1.
FULL OUTER JOIN
A full outer join of two tables returns rows that match specified join condition
between the two tables as well as non-matching rows from the both tables of
the join. Values for the columns of the left table of the join will receive NULL
values for the non-matching rows of the right table of the join and vice versa.
Here is an example:
SELECT t1.*, t2.* FROM t1 FULL OUTER JOIN t2 ON t1.b = t2.b
In the result of the full outer join,
•1st and 5th rows are the matching rows.
•6th and 7th rows are non-matching rows
from t1 and they have NULLs for columns
of t2.
•2nd,3rd and 4th rows are non-matching
rows from t2 and they have NULLs for
columns of t1.
•Keyword OUTER is optional.
•ON keyword is used to specify the outer
join condition.
A B
a1 b1
a2 b2
a3 b3
a4 -
t1 t2
Result
B C
b1 c1
- c2
b3 c3
- c4
b5 c5
A B B C
a1 b1 b1 c1
- - - c2
- - - c4
- - b5 c5
a3 b3 b3 c3
a4 - - -
a2 b2 - -
Outer Join support
All database systems may not support all outer joins.
MySQL does not support full outer join. Oracle database supports it.
The full outer join can be simulated using left and right outer joins as following:
SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.b = t2.b
UNION
SELECT * FROM t1 RIGHT OUTER JOIN t2 ON t1.b = t2.b
SET Operations
 UNION
 INTERSECT
 EXCEPT (MINUS)
SET Operations
The set operations are used to combine results returned by other
SELECT statements. These operations are
UNION, INTERSECT and EXCEPT
Each operation takes two table operands which are the result sets of
SELECT statements.
The two tables must be union-compatible, i.e., they should have the
same data structure and hence the same number of columns and the
same data types and lengths.
Of course most RDBMSs relax above condition. For example, two
corresponding columns of two operands need not have the same data
type as long as they are compatible.
UNION Operation
The UNION of two tables is a table containing all rows of both the
tables.
Set representation of UNION of table A and table B: A ∪ B
A
B
Graphical representation:Example:
SELECT a, b FROM t1
UNION
SELECT c, b FROM t2
UNION Operation:
DISTINCT and ALL rows
By default the result table of UNION contains distinct rows as shown
in the following example:
Example 1:
SELECT b FROM t1
UNION
SELECT b FROM t2
To get all rows from both the tables including duplicates use keyword
ALL after keyword UNION as shown in the
example:
Example 2:
SELECT b FROM t1
UNION ALL
SELECT b FROM t2
INTERSECT Operation
The INTERSECT operation of two tables is a table containing all rows
common to both the tables.
Set representation of INTERSECT of table T1 and table T2: T1 ∊ T2
T1 T2
Graphical representation
Example:
SELECT B FROM T1
INTERSECT
SELECT B FROM T2
B
b1
b3
-
A B
a1 b1
a2 b2
a3 b3
a4 -
B C
b1 c1
- c2
- c4
b5 c5
b3 c3
T1 T2 Result
Note:-The tables and result shown on the
right side are from Oracle RDBMS. MySQL
does not support INTERSECT set operation.
EXCEPT Operation
The EXCEPT operation of two tables is a table containing all rows
that are in the first table but are not in the second table. Keyword
used for the operation in old SQL standard is MINUS.
Set representation of EXCEPT of table T1 and table T2: T1 − T2
This is essentially set difference.
T1
T2
Graphical representation
Example:
SELECT B FROM T1
MINUS
SELECT B FROM T2
A B
a1 b1
a2 b2
a3 b3
a4 -
B C
b1 c1
- c2
- c4
b5 c5
b3 c3
T1 T2 Result
Note:-The tables and result shown on the
right side are from Oracle RDBMS. MySQL
does not support EXCEPT set operation.
Oracle does not recognize new keyword
EXCEPT.
B
b2
What You Have Learnt!
 How to add rows to a table using INSERT statements.
 How to modify rows using UPDATE statements.
 How to delete rows using DELETE statements.
 How to retrieve rows using SELECT statements.
 Retrieving DISTINCT rows and ALL rows.
 Retrieving rows satisfying a search condition of WHERE
clause.
 Logical operators AND, OR and NOT.
 Relational operators =, !=, <>, <, <=, > and >=.
 Predicates NULL, LIKE, IN and BETWEEN.
 Sorting result set rows using ORDER BY clause.
 Aggregate functions COUNT, SUM, AVG, MAX and MIN and
behavior of these functions in the presence of NULL values.
 Grouping results using GROUP BY clause.
 Restricting grouped results using HAVING Clause.
What You Have Learnt !
(contd…)
 Subqueries – Scalar subqueries, row subqueries and table
subqueries.
 Usage of Quantifiers ALL, ANY and SOME in predicates
containing subqueries.
 Predicates EXISTS and NOT EXISTS.
 Multi-table Joins.
 Cartesian Product and Cross join.
 Inner joins and outer joins.
 Left outer joins, right outer joins and full outer joins.
 Set operators UNION, INTERSECT and EXCEPT (MINUS).

More Related Content

PDF
Database Systems - SQL - DDL Statements (Chapter 3/2)
Vidyasagar Mundroy
 
PPTX
DDL,DML,SQL Functions and Joins
Ashwin Dinoriya
 
PPTX
Database Systems - SQL - DCL Statements (Chapter 3/4)
Vidyasagar Mundroy
 
PPTX
Creating database using sql commands
Belle Wx
 
PPT
SQL Tutorial - Basic Commands
1keydata
 
PPT
Sql dml & tcl 2
Dr. C.V. Suresh Babu
 
PPTX
Commands of DML in SQL
Ashish Gaurkhede
 
Database Systems - SQL - DDL Statements (Chapter 3/2)
Vidyasagar Mundroy
 
DDL,DML,SQL Functions and Joins
Ashwin Dinoriya
 
Database Systems - SQL - DCL Statements (Chapter 3/4)
Vidyasagar Mundroy
 
Creating database using sql commands
Belle Wx
 
SQL Tutorial - Basic Commands
1keydata
 
Sql dml & tcl 2
Dr. C.V. Suresh Babu
 
Commands of DML in SQL
Ashish Gaurkhede
 

What's hot (17)

PPTX
Oracle SQL DML Statements
A Data Guru
 
PPTX
8. sql
khoahuy82
 
PDF
Nested Queries Lecture
Felipe Costa
 
PDF
View & index in SQL
Swapnali Pawar
 
PPTX
Advanced SQL Webinar
Ram Kedem
 
ODP
Sql commands
Balakumaran Arunachalam
 
PPTX
SQL
Vineeta Garg
 
PPT
Sql basics and DDL statements
Mohd Tousif
 
PPTX
Database Management - Lecture 2 - SQL select, insert, update and delete
Al-Mamun Sarkar
 
PPTX
Oracle: DML
DataminingTools Inc
 
DOC
SQL
Tuhin_Das
 
PPTX
Oracle: DDL
DataminingTools Inc
 
DOC
A must Sql notes for beginners
Ram Sagar Mourya
 
DOC
Oracle sql material
prathap kumar
 
PDF
Updat Dir
guest319770
 
PDF
Sql tutorial
amitabros
 
Oracle SQL DML Statements
A Data Guru
 
8. sql
khoahuy82
 
Nested Queries Lecture
Felipe Costa
 
View & index in SQL
Swapnali Pawar
 
Advanced SQL Webinar
Ram Kedem
 
Sql commands
Balakumaran Arunachalam
 
Sql basics and DDL statements
Mohd Tousif
 
Database Management - Lecture 2 - SQL select, insert, update and delete
Al-Mamun Sarkar
 
Oracle: DML
DataminingTools Inc
 
SQL
Tuhin_Das
 
Oracle: DDL
DataminingTools Inc
 
A must Sql notes for beginners
Ram Sagar Mourya
 
Oracle sql material
prathap kumar
 
Updat Dir
guest319770
 
Sql tutorial
amitabros
 
Ad

Viewers also liked (20)

PDF
Sql server 2016 queries
Seyed Ibrahim
 
PPTX
SQL Basics
Hammad Rasheed
 
PPTX
DOAG: Visual SQL Tuning
Kyle Hailey
 
PPTX
Daffodil International University. Object oriented programming JAVA if else s...
Mon Mon
 
PPTX
1. dml select statement reterive data
Amrit Kaur
 
PPTX
Switch statement
Patrick John McGee
 
PPTX
The Switch Statement in java
Talha Saleem
 
PPT
Switch statements in Java
Jin Castor
 
PPT
Les01 (retrieving data using the sql select statement)
Achmad Solichin
 
ODP
Prabu's sql quries
Prabu Cse
 
PDF
Sql query patterns, optimized
Karwin Software Solutions LLC
 
PPT
SQL select statement and functions
Vikas Gupta
 
PPTX
SQL Data Manipulation
khalid alkhafagi
 
PPTX
SQL JOIN
Ritwik Das
 
PPT
Sql ppt
Anuja Lad
 
PDF
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Beat Signer
 
PPT
ER DIAGRAM TO RELATIONAL SCHEMA MAPPING
ARADHYAYANA
 
PPTX
Data Manipulation Language
Jas Singh Bhasin
 
DOC
Sql queries with answers
vijaybusu
 
Sql server 2016 queries
Seyed Ibrahim
 
SQL Basics
Hammad Rasheed
 
DOAG: Visual SQL Tuning
Kyle Hailey
 
Daffodil International University. Object oriented programming JAVA if else s...
Mon Mon
 
1. dml select statement reterive data
Amrit Kaur
 
Switch statement
Patrick John McGee
 
The Switch Statement in java
Talha Saleem
 
Switch statements in Java
Jin Castor
 
Les01 (retrieving data using the sql select statement)
Achmad Solichin
 
Prabu's sql quries
Prabu Cse
 
Sql query patterns, optimized
Karwin Software Solutions LLC
 
SQL select statement and functions
Vikas Gupta
 
SQL Data Manipulation
khalid alkhafagi
 
SQL JOIN
Ritwik Das
 
Sql ppt
Anuja Lad
 
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Beat Signer
 
ER DIAGRAM TO RELATIONAL SCHEMA MAPPING
ARADHYAYANA
 
Data Manipulation Language
Jas Singh Bhasin
 
Sql queries with answers
vijaybusu
 
Ad

Similar to Database Systems - SQL - DDL Statements (Chapter 3/3) (20)

PPT
Chinabankppt
newrforce
 
PDF
0808.pdf
ssuser0562f1
 
PDF
0808.pdf
ssuser0562f1
 
PDF
SQL Lesson 6 - Select.pdf
Madhusha15
 
PPT
Les18
Vijay Kumar
 
PDF
sql language
moman abde
 
DOCX
Query
Raj Devaraj
 
PPTX
Data Manipulation Language.pptx
EllenGracePorras
 
PPT
Les06
Sudharsan S
 
PPT
Module03
Sridhar P
 
PPTX
Interacting with Oracle Database
Chhom Karath
 
PPT
Les06
Sudharsan S
 
PPT
Les06 (using subqueries to solve queries)
Achmad Solichin
 
PPT
ALL ABOUT SQL AND RDBMS
gaurav koriya
 
PPTX
SQL Data Manipulation language and DQL commands
sonali sonavane
 
PPT
SQL- Introduction to MySQL
Vibrant Technologies & Computers
 
PPTX
Module 3.1.pptx
ANSHVAJPAI
 
PPT
Les06
Vijay Kumar
 
PPTX
Basic SQL Statments
Umair Shakir
 
PDF
Sql2
guest319770
 
Chinabankppt
newrforce
 
0808.pdf
ssuser0562f1
 
0808.pdf
ssuser0562f1
 
SQL Lesson 6 - Select.pdf
Madhusha15
 
Les18
Vijay Kumar
 
sql language
moman abde
 
Query
Raj Devaraj
 
Data Manipulation Language.pptx
EllenGracePorras
 
Les06
Sudharsan S
 
Module03
Sridhar P
 
Interacting with Oracle Database
Chhom Karath
 
Les06
Sudharsan S
 
Les06 (using subqueries to solve queries)
Achmad Solichin
 
ALL ABOUT SQL AND RDBMS
gaurav koriya
 
SQL Data Manipulation language and DQL commands
sonali sonavane
 
SQL- Introduction to MySQL
Vibrant Technologies & Computers
 
Module 3.1.pptx
ANSHVAJPAI
 
Les06
Vijay Kumar
 
Basic SQL Statments
Umair Shakir
 
Sql2
guest319770
 

More from Vidyasagar Mundroy (6)

PDF
Database Systems - Normalization of Relations(Chapter 4/3)
Vidyasagar Mundroy
 
PDF
Database Systems - Entity Relationship Modeling (Chapter 4/2)
Vidyasagar Mundroy
 
PDF
Database Systems - Introduction to Database Design (Chapter 4/1)
Vidyasagar Mundroy
 
PDF
Database Systems - Introduction to SQL (Chapter 3/1)
Vidyasagar Mundroy
 
PDF
Database Systems - Relational Data Model (Chapter 2)
Vidyasagar Mundroy
 
PDF
Database Systems - Introduction (Chapter 1)
Vidyasagar Mundroy
 
Database Systems - Normalization of Relations(Chapter 4/3)
Vidyasagar Mundroy
 
Database Systems - Entity Relationship Modeling (Chapter 4/2)
Vidyasagar Mundroy
 
Database Systems - Introduction to Database Design (Chapter 4/1)
Vidyasagar Mundroy
 
Database Systems - Introduction to SQL (Chapter 3/1)
Vidyasagar Mundroy
 
Database Systems - Relational Data Model (Chapter 2)
Vidyasagar Mundroy
 
Database Systems - Introduction (Chapter 1)
Vidyasagar Mundroy
 

Recently uploaded (20)

PPTX
GR3-PPTFINAL (1).pptx 0.91 MbHIHUHUGG,HJGH
DarylArellaga1
 
PDF
Company Profile 2023 PT. ZEKON INDONESIA.pdf
hendranofriadi26
 
PPTX
Introduction to Data Analytics and Data Science
KavithaCIT
 
PDF
Research about a FoodFolio app for personalized dietary tracking and health o...
AustinLiamAndres
 
PPTX
artificial intelligence deeplearning-200712115616.pptx
revathi148366
 
PDF
Data_Cleaning_Infographic_Series_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
TCP_IP for Programmers ------ slides.pdf
Souhailsouhail5
 
PPTX
Logistic Regression ml machine learning.pptx
abdullahcocindia
 
PDF
Taxes Foundatisdcsdcsdon Certificate.pdf
PratyushPrem2
 
PPTX
Web dev -ppt that helps us understand web technology
shubhragoyal12
 
PDF
CH1-MODEL-BUILDING-v2017.1-APR27-2017.pdf
jcc00023con
 
PPTX
1intro to AI.pptx AI components & composition
ssuserb993e5
 
PDF
oop_java (1) of ice or cse or eee ic.pdf
sabiquntoufiqlabonno
 
PDF
A Systems Thinking Approach to Algorithmic Fairness.pdf
Epistamai
 
PPTX
Machine Learning Solution for Power Grid Cybersecurity with GraphWavelets
Sione Palu
 
PPTX
Presentation1.pptxvhhh. H ycycyyccycycvvv
ItratBatool16
 
PDF
Digital Infrastructure – Powering the Connected Age
Heera Yadav
 
PDF
Mastering Financial Analysis Materials.pdf
SalamiAbdullahi
 
PDF
345_IT infrastructure for business management.pdf
LEANHTRAN4
 
PDF
TIC ACTIVIDAD 1geeeeeeeeeeeeeeeeeeeeeeeeeeeeeer3.pdf
Thais Ruiz
 
GR3-PPTFINAL (1).pptx 0.91 MbHIHUHUGG,HJGH
DarylArellaga1
 
Company Profile 2023 PT. ZEKON INDONESIA.pdf
hendranofriadi26
 
Introduction to Data Analytics and Data Science
KavithaCIT
 
Research about a FoodFolio app for personalized dietary tracking and health o...
AustinLiamAndres
 
artificial intelligence deeplearning-200712115616.pptx
revathi148366
 
Data_Cleaning_Infographic_Series_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
TCP_IP for Programmers ------ slides.pdf
Souhailsouhail5
 
Logistic Regression ml machine learning.pptx
abdullahcocindia
 
Taxes Foundatisdcsdcsdon Certificate.pdf
PratyushPrem2
 
Web dev -ppt that helps us understand web technology
shubhragoyal12
 
CH1-MODEL-BUILDING-v2017.1-APR27-2017.pdf
jcc00023con
 
1intro to AI.pptx AI components & composition
ssuserb993e5
 
oop_java (1) of ice or cse or eee ic.pdf
sabiquntoufiqlabonno
 
A Systems Thinking Approach to Algorithmic Fairness.pdf
Epistamai
 
Machine Learning Solution for Power Grid Cybersecurity with GraphWavelets
Sione Palu
 
Presentation1.pptxvhhh. H ycycyyccycycvvv
ItratBatool16
 
Digital Infrastructure – Powering the Connected Age
Heera Yadav
 
Mastering Financial Analysis Materials.pdf
SalamiAbdullahi
 
345_IT infrastructure for business management.pdf
LEANHTRAN4
 
TIC ACTIVIDAD 1geeeeeeeeeeeeeeeeeeeeeeeeeeeeeer3.pdf
Thais Ruiz
 

Database Systems - SQL - DDL Statements (Chapter 3/3)

  • 1. 6. DML Statements of SQL  INSERT, UPDATE, DELETE and SELECT Statements  SELECT DISTINCT, ALL, Column Alias, Column Expressions  WHERE Clause and Search Conditions  Logical and Relational Operators  NULL, LIKE, IN and BETWEEN Predicates  ORDER BY Clause  Aggregate Functions, GROUP BY and HAVING Clauses  Sub-queries, Quantifiers, EXISTS and NOT EXISTS Predicates  Joins, Cartesian Products and Cross Join, Inner and Outer Joins  Set Operations
  • 2. SQL DML Statements There are 4 DML statements: DML Statements SELECT INSERT UPDATE DELETE
  • 3. INSERT Statement The INSERT statement adds a row to the specified table. Syntax: INSERT INTO table-name [ ( column-list ) ] VALUES ( value-list ) column-list: Comma separated columns value-list: Comma separated values Examples: INSERT INTO books VALUES (10001, ’Harry Potter and The Chamber of Secrets’, ’J.K. Rowling’, ’Bloomsbury’); INSERT INTO books (book_id) VALUES (10002); INSERT INTO books (book_title, book_id) VALUES (’Android 4 Application Development’, 10005);
  • 4. INSERT Statement Contents of table “books”
  • 5. UPDATE Statement The UPDATE statement modifies values of specified columns of specified table of all rows or only those rows that satisfy given search condition. Syntax: UPDATE table-name SET column-name = value [, column-name = value ] … [ WHERE search-condition ] search-condition: An expression containing column names and/or literals with relational operators and logical operators yielding a boolean value. Examples: UPDATE books SET publisher = ’Bloomsbury’; UPDATE books SET book_title = ’Harry Potter and The Philosopher’s Stone’ WHERE book_id = 10001;
  • 6. UPDATE Example Results Result of executing two update statements shown in the earlier slide:
  • 7. DELETE Statement The DELETE statement deletes all rows or only those rows that satisfy given search condition from the specified table. Syntax: DELETE FROM table-name [ WHERE search-condition ] search-condition: An expression containing column names and/or literals with relational operators and logical operators yielding a boolean value. Examples: DELETE FROM books WHERE book_id = 10005;
  • 8. DELETE Statement Example Results The slide shows contents of table books after executing the delete statement specified in the previous slide.
  • 9. SELECT Statement The SELECT statement retrieves all rows or only those rows that satisfy given search condition from the list of specified tables. SELECT statement syntax is complex of all SQL statements. A simple SELECT statement syntax is as follows: Syntax:: SELECT [ DISTINCT | ALL ] { * | { column-expr [ AS column-alias ] } [ , column-expr [ AS column-alias ] ] … FROM table-name [ table-alias ] [, table-name [ table-alias ] ] … [ WHERE search-condition ] [ GROUP BY grp-column-list ] [ HAVING search-condition ] [ ORDER BY ord-column-list ] column-expr: An expression whose value will form a column value in the result of the SELECT statement. search-condition: An expression to select only those rows satisfying the expression.
  • 10. Tables for Demonstration CREATE TABLE emp( eno INTEGER NOT NULL PRIMARY KEY, ename VARCHAR (50) NOT NULL, designation VARCHAR(50) NOT NULL, salary DECIMAL(10, 2), mno INTEGER NULL, dno INTEGER NOT NULL REFERENCES dept(dno) ); CREATE TABLE bldg( bno INTEGER NOT NULL PRIMARY KEY, bname VARCHAR (50) NOT NULL, city VARCHAR(50) NOT NULL ); CREATE TABLE dept( dno INTEGER NOT NULL PRIMARY KEY, dname VARCHAR (50) NOT NULL, mno INTEGER NULL, bno INTEGER NOT NULL REFERENCES bldg(bno) ); Tables with primary keys and foreign keys: ALTER TABLE dept ADD FOREIGN KEY (mno) REFERENCES emp(eno);
  • 11. Data for Building Table bldg INSERT INTO bldg VALUES(1, ’UB Tower’, ’Bangalore’); INSERT INTO bldg VALUES(2, ’Cyber Tower’, ’Hyderabad’); INSERT INTO bldg VALUES(3, ’Discoverer, ITPL’, ’Bangalore’); INSERT INTO bldg VALUES(4, ’ Maker Towers’, ’Mumbai’);
  • 12. Data for Department Table dept INSERT INTO dept VALUES(11, ’Corporate’, NULL, 1); INSERT INTO dept VALUES(22, ’HR’, NULL, 1); INSERT INTO dept VALUES(33, ’ Accounts’, NULL, 1); INSERT INTO dept VALUES(44, ’Projects’, NULL, 2); INSERT INTO dept VALUES(55, ’Products’, NULL, 3);
  • 13. Data for Employee Table emp INSERT INTO emp VALUES(111, ’Akhil’, ’President & CEO’, 500000, 111, 11); INSERT INTO emp VALUES(112, ’Dinesh’, ’COO’, 300000, 111, 11); INSERT INTO emp VALUES(113, ’Bhaskar’, ’CTO’, 300000, 111, 11); INSERT INTO emp VALUES(114, ’Harish’, ’CFO’, 300000, 111, 11); INSERT INTO emp VALUES(221, ’Rajesh’, ’HR Manager’, 75000, 112, 22); INSERT INTO emp VALUES(222, ’Mathew’, ’HR Executive’, 50000, 221, 22); INSERT INTO emp VALUES(331, ’Bala’, ’Accounts Manager’, 75000, 114, 33); INSERT INTO emp VALUES(332, ’Venky’, ’Accounts Trainee’, 20000, 331, 33); INSERT INTO emp VALUES(441, ’Suri’, ’Manager - Projects’, 75000, 113, 44); INSERT INTO emp VALUES(442, ’Vinny’, ’Engineer’, 25000, 441, 44); INSERT INTO emp VALUES(443, ’Bhargav’, ’Engineer’, 20000, 442, 44); INSERT INTO emp VALUES(551, ’Jimson’, ’Manager - Products’, 75000, 113, 55); INSERT INTO emp VALUES(552, ’Niranjan’, ’Engineer’, 50000, 551, 55); INSERT INTO emp VALUES(553, ’Praveen’, ’Engineer’, 25000, 552, 55); INSERT INTO emp VALUES(554, ’Sugumar’, ’Engineer’, 20000, 552, 55);
  • 14. Setting up Managers for Departments The following statements setup managers for Corporate, Projects and Products departments: UPDATE dept SET mno = 111 WHERE dno = 11; UPDATE dept SET mno = 112 WHERE dno = 44; UPDATE dept SET mno = 113 WHERE dno = 55;
  • 15. Select Examples Projecting All Columns of A Table Project all columns from table emp: SELECT eno, ename, designation, salary, mno, dno FROM emp;
  • 16. Select Examples Projecting A Few Columns of A Table Project two columns from table emp: SELECT ename, salary FROM emp;
  • 17. Select Examples Using Table Alias Table alias e used for table emp: SELECT e.ename, e.salary FROM emp e;
  • 18. Select Examples Projecting All Columns with * Project all columns from table emp: SELECT * FROM emp; Using a table alias: SELECT e.* FROM emp e
  • 19. SELECT Examples: DISTINCT Clause SELECT designation FROM emp; SELECT DISTINCT designation FROM emp The DISTINCT clause gives only distinct rows as result set of SELECT statement.
  • 20. SELECT Examples: ALL Clause SELECT designation FROM emp; SELECT ALL designation FROM emp The ALL specified before result set column expressions makes the SELECT to return all rows.
  • 21. SELECT Examples: Result Column Names using AS Clause SELECT eno AS ’Employee Number’, ename AS ’Employee Name’ FROM emp SELECT eno, ename FROM emp
  • 22. SELECT: Column Expressions Salary raise by 10%: SELECT ename , salary + salary * 0.1 FROM emp Salary raise by 10% with name for the column expression: SELECT ename , salary + salary * 0.1 AS ’New Salary’ FROM emp
  • 23. SELECT: Row Selection Using WHERE Clause • The WHERE clause is used to specify a condition to select only those rows from the input tables that satisfy the condition. • The condition is known as Search Condition. • The condition should evaluate to a BOOLEAN value: TRUE or FALSE • The SELECT statement evaluates search condition for each row of the table specified in the FROM clause by substituting columns of the condition with values from the row. If the search condition evaluates to TRUE, the statement selects the row and outputs. • Arithmetic and Logical operators can be used in the search condition. • Search Condition can contain columns, literals and even other SELECT statements.
  • 24. SELECT: WHERE Clause Search Condition Operators Logical Operators: AND, OR, NOT Relational Operators: =, !=, <>, >, <. >= , <= Quantifiers: ALL, ANY, SOME Specific Predicates: NULL, LIKE, CONTAINS, EXISTS, IN, BETWEEN
  • 25. SELECT: Row Selection Using WHERE Clause Employees who work in Products department: SELECT ename , salary FROM emp WHERE dno = 55 Employees who work in Products department and whose salary is more than Rs 25000: SELECT ename , salary FROM emp WHERE dno = 55 AND salary > 25000
  • 26. SELECT : WHERE clause - LOGICAL operators AND & OR Employees who work in department number 44 or 55: SELECT ename , salary, dno FROM emp WHERE dno = 44 OR dno = 55 Employees who work in department number 55 and get salary of more than Rs 50,000: SELECT ename , salary, dno FROM emp WHERE dno = 55 AND salary > 50000
  • 27. SELECT: WHERE clause - LOGICAL operator NOT Employees who do not work in department number 44 or 55: SELECT ename , salary, dno FROM emp WHERE NOT (dno = 44 OR dno = 55)
  • 28. SELECT: WHERE clause – Other Relational operators != and <> You already saw usage of relational operators =, > and <. The behaviors of operators != and <> are equivalent. Here is an example: Employees who do not work in both departments 44 and 55: SELECT ename , salary, dno FROM emp WHERE dno != 44 AND dno <> 55;
  • 29. SELECT: WHERE clause – Other Relational operators >= and <= Employees who earn salary Rs 25,000 or more but 50,000 or less: SELECT ename , salary FROM emp WHERE salary >= 25000 AND salary <= 50000
  • 30. SELECT : WHERE clause – IS NULL Operator in NULL Predicate The NULL operator is used to check if a value of a column in a row is NULL. Departments who do not have a manager: SELECT * FROM dept WHERE mno IS NULL Departments who have a manager: SELECT * FROM dept WHERE mno IS NOT NULL NULL predicate NULL predicate
  • 31. SELECT: WHERE clause – Incorrect use of NULL in predicates SELECT * FROM dept WHERE mno = NULL; WRONG! SELECT * FROM dept WHERE mno != NULL; WRONG!
  • 32. SELECT: WHERE clause – LIKE Operator & LIKE Predicate The LIKE operator is used to do pattern matching with character columns. Employees whose names start with ’B’: SELECT ename FROM emp WHERE ename LIKE ’B%’ Employees whose names do NOT start with ‘B’: SELECT ename FROM emp WHERE ename NOT LIKE ’B%’ LIKE predicate LIKE predicate
  • 33. LIKE Operator: Pattern Matching Characters % and _ % matches with any zero or more characters whereas _ matches with any one character. Employees whose names have ’i’ in second position: SELECT ename FROM emp WHERE ename LIKE ’_i%’ Employees whose names have ’a’ and ‘k’ in that order: SELECT ename FROM emp WHERE ename LIKE ’%a%k%’
  • 34. LIKE Operator with ESCAPE clause The ESCAPE clause is needed if the column values contain the pattern matching characters % and _. If a column, offer, values are ’50% discount’, ‘30 percent discount’, ‘no discount’, to select rows that contain the % character, the following LIKE with ESCAPE can be used: Items having % character in offer column: SELECT item_name, offer FROM store WHERE offer LIKE ’%#%%’ ESCAPE ’#’ Using predefined escape character ’’: SELECT item_name, offer FROM store WHERE offer LIKE ’%%%’
  • 35. IN Operator & IN Predicate The IN operator is used to specify a list of values a column expression has to satisfy: Employees who work in departments 11, 44 or 55: SELECT ename FROM emp WHERE dno IN (11, 44, 55) IN predicate or membership search condition Equivalent statement without using the IN operator: SELECT ename FROM emp WHERE dno = 11 OR dno = 44 OR dno = 55
  • 36. BETWEEN Operator & BETWEEN Predicate The BETWEEN operator is used to specify a range of values a column expression has to satisfy. Employees whose salary range is 25000 to 75000: SELECT ename, salary FROM emp WHERE salary BETWEEN 25000 AND 75000 BETWEEN predicate or Range search condition The result includes end points of the range. The end points are values 25000 and 75000 in the above example.
  • 37. ORDER BY Clause for Sorting Results The ORDER BY clause is used to sort results of SELECT statements. Syntax: ORDER BY {{ column-name | column-number } [ ASC | DESC ] } [, …] column-number: serial number of a column expression in SELECT clause • The ORDER BY clause should be the last clause of a SELECT statement. • Column names should be in SELECT clause. But some RDBMSs allow columns not in the SELECT clause. • ASC causes results in ascending order of the column. This is default. • DESC causes results in descending order of the column. • Column numbers start from 1.
  • 38. ORDER BY Clause Examples with one column Results in ascending order of values of one column: SELECT ename, salary, eno FROM emp ORDER BY ename Results in descending order of values of one column: SELECT ename, salary, eno FROM emp ORDER BY ename DESC
  • 39. ORDER BY Clause Examples with two columns Results in ascending order of values of two columns: SELECT salary, ename, eno FROM emp ORDER BY salary, ename Results in descending order of values of first column and ascending order of second column: SELECT salary, ename, eno FROM emp ORDER BY salary DESC, ename ASC
  • 40. ORDER BY Clause Examples with Column Expression numbers Ordering based on column numbers: SELECT salary, ename, eno FROM emp ORDER BY 1 DESC, 3 ASC Ordering based on expressions: SELECT salary, salary * 0.2, ename, eno FROM emp ORDER BY 2 DESC, 1 ASC
  • 41. SQL Aggregate Functions  COUNT  SUM  AVG  MAX  MIN
  • 42. SQL Aggregate Functions An aggregate function gives one value from multiple values of a column. SQL standard defined aggregate functions are as follows: SNO Aggregate Function Functionality 1 COUNT Returns number of values in a column or count of rows. 2 SUM Returns sum of the values of a numeric column. 3 AVG Returns average of values of a numeric column. 4 MIN Returns the smallest value in a column. 5 MAX Returns the largest value in a column.
  • 43. SQL Aggregate Function Usage SUM and AVG functions can be used on only numeric columns. Each function takes one argument which should be a column name. COUNT can be applied on all columns using COUNT(*) which will return number of rows in a table as qualified by WHERE clause. Except COUNT(*) all other aggregate functions ignore NULL values in a column. Aggregate functions can be used only in SELECT and HAVING clauses. If SELECT clause contains any aggregate function, the select list can contain only those columns used in GROUP BY clause in addition to aggregate functions. It can not contain any other column references.
  • 44. SQL Aggregate Function Examples: COUNT with and without NULLs The screen shot on the right side shows there are 6 employees in department 55 using a select statement without using aggregate functions.. SELECT COUNT(ename) FROM emp WHERE dno = 55 SELECT COUNT(salary) FROM emp WHERE dno = 55 SELECT COUNT(*) FROM emp WHERE dno = 55; Note that NULL values are considered in the counts..
  • 45. SQL Aggregate Function Examples: MAX, MIN, SUM & AVG The screen shot shows there are 6 employees in department number 55. SELECT MAX(salary), MIN(salary), SUM(salary), AVG(salary) FROM emp WHERE dno = 55; Note that NULL values are not considered in computing aggregate values. For example, we can find that AVG(salary) = SUM(salary)/4 where the sum is divided by the number of non-null values and not number of all values in the column.
  • 46. SQL Aggregate Function Examples: COUNT (DISTINCT…) The screen shot shows there are 6 employees in department number 55. SELECT COUNT(DISTINCT designation), COUNT(DISTINCT salary), COUNT(DISTINCT mno) FROM emp WHERE dno = 55 Note that NULL values are not considered in the counts with DISTINCT.
  • 47. Grouping Results  Partitioning of Rows into Groups  GROUP BY Clause  Grouping Columns  Aggregate Functions
  • 48. GROUP BY clause The GROUP BY clause groups results of a SELECT statement based on grouping column list specified for the clause. Syntax: GROUP BY grp_column_list grp_column_list: List of comma separated column names. Example: SELECT dno, COUNT(eno), MAX(salary) FROM emp GROUP BY dno This select statement outputs one row for each department containing the department number, count of employees in the department and maximum salary given in the department. Grouping column list: dno
  • 49. GROUP BY clause examples The following statement groups employees by department number: SELECT dno, COUNT(eno), MAX(salary) FROM emp GROUP BY dno The following statement groups employees by department number and designation: SELECT dno, designation, COUNT(eno), MAX(salary) FROM emp GROUP BY dno, designation
  • 50. GROUP BY clause: Points to be noted 1. A query that contains GROUP BY clause is known as grouped query. 2. Columns named in the GROUP BY clause are known as grouping columns. 3. Each item (column or expression) in the SELECT clause must be single valued per group. Hence the item has to be a grouping column or an aggregate function. It is an error to use non-grouping columns in the SELECT clause. 4. Grouping is done only after applying WHERE clause if it exists in a SELECT statement.
  • 51. Restricting Groups: HAVING clause The HAVING clause is used to restrict resulting rows of the GROUP BY clause. Syntax: HAVING search-condition The search condition is similar WHERE clause search condition. Unlike WHERE clause search condition, the HAVING clause search condition can contain aggregate functions. If the search condition contains any predicate that does not contain grouping columns or aggregate functions, such predicate may be moved to WHERE clause.
  • 52. HAVING clause example The following statement restricts to groups having number of employees 4 or more. SELECT dno, COUNT(eno), MAX(salary) FROM emp GROUP BY dno HAVING COUNT(eno) >= 4
  • 53. Subqueries  Subqueries: Scalar Subqueries, Row Subqueries, Table Subqueries  Quantifiers : ANY, SOME and ALL  Predicate: IN, EXISTS and NOT EXISTS
  • 54. Subqueries Subquery is a query embedded in another query. Subquery is also referred to as inner select, subselect or nested query or nested statement. The query that contains the subquery is called outer query or outer statement. Subqueries can be used in WHERE clause, HAVING clause and SELECT clause of SELECT statements. Subqueries can also be used in INSERT, UPDATE and DELETE statements.
  • 55. Types of Subqueries Scalar subquery: Returns only one column and one row; essentially one value. The query can be used in predicates as an operand for relational operators =, !=, <, <=, > and >=. Row subquery: Returns multiple columns in one row. Table subquery: Returns multiple columns and multiple rows.
  • 56. Example: Scalar Subquery in WHERE clause The following statement uses a scalar subquery that returns department number of department “Products” to list all employees of the department. SELECT ename, salary FROM emp WHERE dno = (SELECT dno FROM dept WHERE dname=’Products’)
  • 57. Example: Scalar Sub-query with Aggregate function in WHERE clause The following statement returns employees whose salary is more than average salary of all employees using a scalar subquery that returns average salary of all employees: SELECT ename, salary FROM emp WHERE salary > (SELECT AVG(salary) FROM emp)
  • 58. Example: Scalar Sub-query in SELECT clause The following statement returns employee name and difference between salary and average salary of all those employees whose salary is more than average salary: SELECT ename, salary - (SELECT AVG(salary) FROM emp) AS SalDiff FROM emp WHERE salary > (SELECT AVG(salary) FROM emp)
  • 59. Example: Nested Subquery The following statement returns number of employees whose buildings are situated in Bangalore. SELECT COUNT(*) FROM emp WHERE dno IN (SELECT dno FROM dept WHERE bno IN (SELECT bno FROM bldg WHERE city =’Bangalore’))
  • 60. Predicates with Quantifiers: ANY, SOME and ALL Keywords ANY, SOME and ALL are called quantifiers used to modify meaning of relational operators in predicates that contain sub-queries. Syntax: opd rel-oper { ANY | SOME | ALL } sub-query opd is an operand which could be a literal, column or a scalar sub-query or an expression containing them. rel-oper is any relational operator >, >=, <, <=, =, != sub-query should project only one column but any number of rows. If ANY or SOME quantifier is used, the predicate value is TRUE if it is satisfied with any one value returned by the sub-query. Otherwise, it is false. If the sub-query does not return any row, the predicate value is FALSE. If ALL quantifier is used, the predicate value is TRUE if it is satisfied with all values returned by the sub-query. Otherwise, it is false. If the sub-query does not return any row, the predicate value is TRUE.
  • 61. An Example using quantifier ANY The following statement finds all employees who work in departments other than 55 and whose salary is greater than the salary of at least one employee of department 55: SELECT ename, dno, salary FROM emp WHERE dno != 55 AND salary > ANY (SELECT salary FROM emp WHERE dno = 55)
  • 62. An Example using quantifier: ALL The following statement finds all employees who work in departments other than 55 and whose salary is greater than the salary of all employees of department 55: SELECT ename, dno, salary FROM emp WHERE dno != 55 AND salary > ALL (SELECT salary FROM emp WHERE dno = 55)
  • 63. Predicates EXISTS and NOT EXISTS The predicates EXISTS and NOT EXISTS can be used only with sub- queries. Syntax: WHERE EXISTS sub-query WHERE NOT EXISTS sub-query The predicate EXISTS evaluates to true if the sub-query returns at least one row. Otherwise it evaluates to false. The predicate NOT EXISTS is true if the sub-query does not return any row, i.e., it returns empty result set. False otherwise. The behavior is opposite of EXISTS predicate. The sub-query can project one or more columns or expressions.
  • 64. Examples of predicates EXISTS and NOT EXISTS Find cities where company departments are located. SELECT DISTINCT b.city FROM bldg b WHERE EXISTS (SELECT * FROM dept d WHERE d.bno = b.bno) Find cities that do not yet have a company department: SELECT DISTINCT b.city FROM bldg b WHERE NOT EXISTS (SELECT * FROM dept d WHERE d.bno = b.bno);
  • 65. Sub-query Points to Remember • Scalar subqueries need to be used with relational operators and in all places in an SQL statement where only one value is expected. • Quantifiers can be used only with relational operators. • Subqueries used with Quantifiers as well as IN operator must be table subqueries with one result column. • Subqueries used with EXISTS and NOT EXISTS predicates can be any kind of subqueries. • ORDER BY clause may not be allowed inside sub-queries. Some RDBMSs allow the clause as it makes sense if TOP clause is used in the SELECT clause.
  • 66. Multi-Table Queries (JOINS)  Table List & Table Alias  Equi-joins  Sorting and Grouping Result sets  Cartesian Product & Cross Join  Inner Joins  Outer Joins  Left Outer Join, Right Outer Join and Full Outer Join
  • 67. Multi-Table Queries or JOINs The multi-table queries involve more than one table in the FROM clause of SELECT statements which combine columns of the tables and output specified columns as per the select-list of the statements. The operation used for combing columns is called join operation. The join operation on two tables gives rows where each row consists of required columns of a row of a table and required columns of rows of another table such that specified predicates where each predicate containing columns of the two tables are satisfied.
  • 68. Table List & Table Alias Table List in the FROM clause is separated by comma. Each table can be optionally followed by an alias which can be used wherever table name is required. An alias can be used as a qualifier for column name in order to use the alias as shorthand for table name and/or to disambiguate column names which could be same in multiple tables. In order to use an alias for a column, prefix column name with the alias separated by a dot. Example: t1.c1
  • 69. Two Table Join with equal-to predicate : Equi-Join List names of employees and departments they work for: SELECT e.ename, d.dname FROM emp e, dept d WHERE e.dno = d.dno
  • 70. Two Table Join – Sorting results List names of employees and departments they work for in the ascending order of department name and employee name in each department: SELECT e.ename, d.dname FROM emp e, dept d WHERE e.dno = d.dno ORDER BY d.dname, e.ename
  • 71. Two Table Join – Grouping results Find number of employees in each department: SELECT d.dname AS ’Department’, COUNT(*) AS ’Number of Employees’ FROM emp e, dept d WHERE e.dno = d.dno GROUP BY d.dname ORDER BY d.dname
  • 72. Three Table Join Find city and department for each employee: SELECT b.city AS ’City’, d.dname AS ’Department’, e.ename AS ’Employee’ FROM emp e, dept d, bldg b WHERE e.dno = d.dno AND d.bno = b.bno ORDER BY 1, 2, 3
  • 73. Cartesian Product using CROSS JOIN The Cartesian product of two tables is another table consisting of all possible pairs of rows from the two tables. Syntax: table1 CROSS JOIN table2 The columns of the Cartesian product consist of all columns of the table1 followed by all columns of the table2. If a join condition (in WHERE clause) is not specified for two tables in a two table join, the Cartesian product is produced. Example: A B a1 b1 a2 b2 a3 b3 C D E c1 d1 e1 c2 d2 e2 A B C D E a1 b1 c1 d1 e1 a1 b1 c2 d2 e2 a2 b2 c1 d1 e1 a2 b2 c2 d2 e2 a3 b3 c1 d1 e1 a3 b3 c2 d2 e2 CROSS JOIN =A, B, C, D and E are names of columns.
  • 74. Cartesian Product – Example Find Cartesian product of emp and dept tables. SELECT * FROM emp CROSS JOIN dept; = … Tables: emp and dept Result set
  • 75. INNER JOINS and OUTER JOINS Inner Join: So far whatever joins we have talked about are essentially inner joins. An inner join outputs rows from two tables that match the join condition. Inner joins can be written using list of tables, INNER JOIN keyword or just JOIN keyword. Outer Join: An outer join returns rows that not only match the join condition but also those that do not match the join condition. There are three types of outer joins: LEFT OUTER JOIN, RIGHT OUTER JOIN and FULL OUTER JOIN.
  • 76. INNER JOIN with List of Tables The simplest way to write an inner join query is to have a comma separated list of required tables in the FROM clause of a query. This syntax is already familiar to you. Example: SELECT ot1.*, ot2.* FROM ot1, ot2 WHERE ot1.b = ot2.b; Note that row <a4, NULL> of table ot1 does not match with any row of table ot2 even though column b of table ot2 has NULL values in two rows because NULL values can not be compared; NULL is an unknown value.
  • 77. Inner Join with key words INNER & JOIN If you want to write an inner join query that explicitly shows that it is such a query, use the keywords INNER and JOIN as shown in the following example: SELECT ot1.*, ot2.* FROM ot1 INNER JOIN ot2 WHERE ot1.b = ot2.b; Or SELECT ot1.*, ot2.* FROM ot1 JOIN ot2 WHERE ot1.b = ot2.b; Use of keyword INNER is optional.
  • 78. LEFT OUTER JOIN A left outer join of two tables returns rows that match specified join condition between the two tables as well as non-matching rows from the left table of the join. Values for the columns of the right table of the join will receive NULL values for the non-matching rows of the left table of the join. Here is an example: SELECT t1.*, t2.* FROM t1 LEFT OUTER JOIN t2 ON t1.b = t2.b; •Keyword OUTER is optional. •ON keyword is used to specify the outer join condition. Only rows <a1,b1> and <a3,b3> of t1 have matching rows in t2 based on the join condition. As it is left outer join , remaining rows of t1 (<a2,b2> and <a4, NULL>) have NULL values for columns b and c of t2.
  • 79. RIGHT OUTER JOIN A right outer join of two tables returns rows that match specified join condition between the two tables as well as non-matching rows from the right table of the join. Values for the columns of the left table of the join will receive NULL values for the non-matching rows of the right table of the join. Here is an example: SELECT t1.*, t2.* FROM t1 RIGHT OUTER JOIN t2 ON t1.b = t2.b; •Keyword OUTER is optional. •ON keyword is used to specify the outer join condition. Only rows <b1,c1> and <b3,c3> of t2 have matching rows in t1 based on the join condition. As it is right outer join , remaining rows of t2 (<NULL,c2> , <NULL, c4> and <b5,c5>) have NULL values for columns a and b of t1.
  • 80. FULL OUTER JOIN A full outer join of two tables returns rows that match specified join condition between the two tables as well as non-matching rows from the both tables of the join. Values for the columns of the left table of the join will receive NULL values for the non-matching rows of the right table of the join and vice versa. Here is an example: SELECT t1.*, t2.* FROM t1 FULL OUTER JOIN t2 ON t1.b = t2.b In the result of the full outer join, •1st and 5th rows are the matching rows. •6th and 7th rows are non-matching rows from t1 and they have NULLs for columns of t2. •2nd,3rd and 4th rows are non-matching rows from t2 and they have NULLs for columns of t1. •Keyword OUTER is optional. •ON keyword is used to specify the outer join condition. A B a1 b1 a2 b2 a3 b3 a4 - t1 t2 Result B C b1 c1 - c2 b3 c3 - c4 b5 c5 A B B C a1 b1 b1 c1 - - - c2 - - - c4 - - b5 c5 a3 b3 b3 c3 a4 - - - a2 b2 - -
  • 81. Outer Join support All database systems may not support all outer joins. MySQL does not support full outer join. Oracle database supports it. The full outer join can be simulated using left and right outer joins as following: SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.b = t2.b UNION SELECT * FROM t1 RIGHT OUTER JOIN t2 ON t1.b = t2.b
  • 82. SET Operations  UNION  INTERSECT  EXCEPT (MINUS)
  • 83. SET Operations The set operations are used to combine results returned by other SELECT statements. These operations are UNION, INTERSECT and EXCEPT Each operation takes two table operands which are the result sets of SELECT statements. The two tables must be union-compatible, i.e., they should have the same data structure and hence the same number of columns and the same data types and lengths. Of course most RDBMSs relax above condition. For example, two corresponding columns of two operands need not have the same data type as long as they are compatible.
  • 84. UNION Operation The UNION of two tables is a table containing all rows of both the tables. Set representation of UNION of table A and table B: A ∪ B A B Graphical representation:Example: SELECT a, b FROM t1 UNION SELECT c, b FROM t2
  • 85. UNION Operation: DISTINCT and ALL rows By default the result table of UNION contains distinct rows as shown in the following example: Example 1: SELECT b FROM t1 UNION SELECT b FROM t2 To get all rows from both the tables including duplicates use keyword ALL after keyword UNION as shown in the example: Example 2: SELECT b FROM t1 UNION ALL SELECT b FROM t2
  • 86. INTERSECT Operation The INTERSECT operation of two tables is a table containing all rows common to both the tables. Set representation of INTERSECT of table T1 and table T2: T1 ∊ T2 T1 T2 Graphical representation Example: SELECT B FROM T1 INTERSECT SELECT B FROM T2 B b1 b3 - A B a1 b1 a2 b2 a3 b3 a4 - B C b1 c1 - c2 - c4 b5 c5 b3 c3 T1 T2 Result Note:-The tables and result shown on the right side are from Oracle RDBMS. MySQL does not support INTERSECT set operation.
  • 87. EXCEPT Operation The EXCEPT operation of two tables is a table containing all rows that are in the first table but are not in the second table. Keyword used for the operation in old SQL standard is MINUS. Set representation of EXCEPT of table T1 and table T2: T1 − T2 This is essentially set difference. T1 T2 Graphical representation Example: SELECT B FROM T1 MINUS SELECT B FROM T2 A B a1 b1 a2 b2 a3 b3 a4 - B C b1 c1 - c2 - c4 b5 c5 b3 c3 T1 T2 Result Note:-The tables and result shown on the right side are from Oracle RDBMS. MySQL does not support EXCEPT set operation. Oracle does not recognize new keyword EXCEPT. B b2
  • 88. What You Have Learnt!  How to add rows to a table using INSERT statements.  How to modify rows using UPDATE statements.  How to delete rows using DELETE statements.  How to retrieve rows using SELECT statements.  Retrieving DISTINCT rows and ALL rows.  Retrieving rows satisfying a search condition of WHERE clause.  Logical operators AND, OR and NOT.  Relational operators =, !=, <>, <, <=, > and >=.  Predicates NULL, LIKE, IN and BETWEEN.  Sorting result set rows using ORDER BY clause.  Aggregate functions COUNT, SUM, AVG, MAX and MIN and behavior of these functions in the presence of NULL values.  Grouping results using GROUP BY clause.  Restricting grouped results using HAVING Clause.
  • 89. What You Have Learnt ! (contd…)  Subqueries – Scalar subqueries, row subqueries and table subqueries.  Usage of Quantifiers ALL, ANY and SOME in predicates containing subqueries.  Predicates EXISTS and NOT EXISTS.  Multi-table Joins.  Cartesian Product and Cross join.  Inner joins and outer joins.  Left outer joins, right outer joins and full outer joins.  Set operators UNION, INTERSECT and EXCEPT (MINUS).