Intermediate SQL
Intermediate SQL
(Fall 2022)
Intermediate SQL
Asst.Prof.Dr. Hasan ÇİFCİ
Agenda
▪ Join Expressions
▪ Views
▪ Transactions
▪ Integrity Constraints
▪ SQL Data Types and Schemas
▪ Index Definition in SQL
▪ Authorization
2/48
Joined Relations
• Join operations take two relations and return as a result another relation.
• A join operation is a Cartesian product which requires that tuples in the two
relations match (under some condition). It also specifies the attributes that are
present in the result of the join
• The join operations are typically used as subquery expressions in the from clause
• Three types of joins:
– Natural join
– Inner join
– Outer join
3/48
Natural Join in SQL
• Natural join matches tuples with the same values for all common attributes and
retains only one copy of each common column.
• List the names of students along with the course ID of the courses that they take
– select name, course_id
from student, takes
where student.ID = takes.ID;
• Same query in SQL with “natural join” construct
– select name, course_id
from student natural join takes;
• The from clause can have multiple relations combined using natural join:
select A1, A2, … An
from r1 natural join r2 natural join .. natural join rn
where P ;
4/48
Student and Takes Relation
5/48
student natural join takes
6/48
Dangerous in Natural Join
7/48
Inner Join
▪ The INNER JOIN keyword selects records that have matching values in both
tables.
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
10/48
Outer Join
11/48
Left Outer Join
▪ The LEFT JOIN keyword returns all records from the left table (table1), and
the matching records from the right table (table2).
▪ The result is 0 records from the right side, if there is no match.
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
12/48
Right Outer Join
▪ The RIGHT JOIN keyword returns all records from the right table (table2),
and the matching records from the left table (table1).
▪ The result is 0 records from the left side, if there is no match.
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
13/48
Full Outer Join
▪ The FULL OUTER JOIN keyword returns all records when there is a match in
left (table1) or right (table2) table records.
▪ Tip: FULL OUTER JOIN and FULL JOIN are the same.
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
14/48
Joined Types and Conditions
• Join operations take two relations and return as a result another relation.
• These additional operations are typically used as subquery expressions in the from
clause
• Join condition – defines which tuples in the two relations match.
• Join type – defines how tuples in each relation that do not match any tuple in the
other relation (based on the join condition) are treated.
15/48
Views
• In some cases, it is not desirable for all users to see the entire logical model (that
is, all the actual relations stored in the database.)
• Consider a person who needs to know an instructors name and department, but
not the salary. This person should see a relation described, in SQL, by
• A view provides a mechanism to hide certain data from the view of certain users.
• Any relation that is not of the conceptual model but is made visible to a user as a
“virtual relation” is called a view.
16/48
View Definition
• A view is defined using the create view statement which has the form
create view v as < query expression >
where <query expression> is any legal SQL expression. The view name is
represented by v.
• Once a view is defined, the view name can be used to refer to the virtual relation
that the view generates.
• View definition is not the same as creating a new relation by evaluating the query
expression
– Rather, a view definition causes the saving of an expression; the expression is
substituted into queries using the view.
17/48
View Definition and Use
18/48
Views Defined Using Other Views
20/48
Materialized Views
21/48
Update of a View
22/48
Some Updates Cannot be Translated Uniquely
24/48
Integrity Constraints
25/48
Constraints on a Single Relation
• not null
• primary key
• unique
• check (P), where P is a predicate
26/48
Not Null Constraints
• not null
– Declare name and budget to be not null
name varchar(20) not null
budget numeric(12,2) not null
27/48
Unique Constraints
28/48
The check clause
• The check (P) clause specifies a predicate P that must be satisfied by every tuple
in a relation.
• Example: ensure that semester is one of fall, winter, spring or summer
29/48
Referential Integrity
• Ensures that a value that appears in one relation for a given set of attributes also
appears for a certain set of attributes in another relation.
– Example: If “Biology” is a department name appearing in one of the tuples in
the instructor relation, then there exists a tuple in the department relation for
“Biology”.
• Let A be a set of attributes. Let R and S be two relations that contain attributes A
and where A is the primary key of S. A is said to be a foreign key of R if for any
values of A appearing in R these values also appear in S.
• Foreign keys can be specified as part of the SQL create table statement
foreign key (dept_name) references department
• By default, a foreign key references the primary-key attributes of the referenced
table.
• SQL allows a list of attributes of the referenced relation to be specified explicitly.
foreign key (dept_name) references department (dept_name)
30/48
Cascading Actions in Referential Integrity
31/48
Integrity Constraint Violation During Transactions
• Consider:
create table person (
ID char(10),
name char(40),
mother char(10),
father char(10),
primary key ID,
foreign key father references person,
foreign key mother references person)
• How to insert a tuple without causing constraint violation?
– Insert father and mother of a person before inserting person
– OR, set father and mother to null initially, update after inserting all persons (not
possible if father and mother attributes declared to be not null)
– OR defer constraint checking
32/48
Complex Check Conditions
• The predicate in the check clause can be an arbitrary predicate that can include a
subquery.
check (time_slot_id in (select time_slot_id from time_slot))
The check condition states that the time_slot_id in each tuple in the section
relation is actually the identifier of a time slot in the time_slot relation.
– The condition has to be checked not only when a tuple is inserted or modified
in section , but also when the relation time_slot changes
33/48
Assertions
34/48
Built-in Data Types in SQL
35/48
Large-Object Types
• Large objects (photos, videos, CAD files, etc.) are stored as a large object:
– blob: binary large object -- object is a large collection of uninterpreted binary
data (whose interpretation is left to an application outside of the database
system)
– clob: character large object -- object is a large collection of character data
• When a query returns a large object, a pointer is returned rather than the large
object itself.
36/48
User-Defined Types
37/48
Domains
• Types and domains are similar. Domains can have constraints, such as not null,
specified on them.
• Example:
create domain degree_level varchar(10)
constraint degree_level_test
check (value in ('Bachelors', 'Masters', 'Doctorate'));
38/48
Index Creation
39/48
Index Creation Example
40/48
Authorization
41/48
Authorization Specification in SQL
42/48
Privileges in SQL
• select: allows read access to relation, or the ability to query using the view
– Example: grant users U1, U2, and U3 select authorization on the instructor
relation:
grant select on instructor to U1, U2, U3
• insert: the ability to insert tuples
• update: the ability to update using the SQL update statement
• delete: the ability to delete tuples.
• all privileges: used as a short form for all the allowable privileges
43/48
Revoking Authorization in SQL
44/48
Roles
• A role is a way to distinguish among various users as far as what these users can
access/update in the database.
• To create a role we use:
create a role <name>
• Example:
– create role instructor
• Once a role is created we can assign “users” to the role using:
– grant <role> to <users>
45/48
Roles Example
46/48
Authorization on Views
47/48
Thank you…
Hasan ÇİFCİ