Eloutassi Dbs Ch3 1
Eloutassi Dbs Ch3 1
Eloutassi Dbs Ch3 1
O. ELOUTASSI: [email protected]
Chapter 3: Introduction to SQL
(Structured query language)
Summary
O. ELOUTASSI: [email protected] 2
Chapter 3: Introduction to SQL
History 1/2
IBM Sequel language developed as part of System R project at the IBM
San Jose Research Laboratory
Renamed Structured Query Language (SQL)
ANSI (American National Standards Institute) and ISO (International
Organization for Standardization) are the two SQL standard :
• SQL-86
• SQL-89
• SQL-92
• SQL:1999 (included some OLAP concepts, Boolean data types, role-
based access)
• SQL 2003 (included some XML features, windows functions, more
OLAP features, and other features)
O. ELOUTASSI: [email protected] 3
Chapter 3: Introduction to SQL
History 2/2
SQL 2006 (includes more features related to Storing XML, XQuery,
etc.)
SQL 2008 (includes definitions for TRUNCATE statements, FETCH
Clauses, INSTEAD OF)
SQL 2011 (includes revisions for temporal data, some additional
definitions for Windows Functions and also the FETCH clause
SQL 2016 includes features related to JSON data(JavaScript Object
Notation), polymorphic table functions, and row pattern matching
SQL 2019 is related to the multidimensional arrays
MySQL is an open-source database product that implements SQL
O. ELOUTASSI: [email protected] 4
Chapter 3: Introduction to SQL
SQL Parts
1. DDL
2. DML
3. Transaction control.
5. Authorization
O. ELOUTASSI: [email protected] 5
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 6
Chapter 3: Introduction to SQL
SQL Parts
1. DDL -- includes commands:
specifying integrity constraints
Unauthorized as
AGE is an integer
Table 1 attribute
defining views View
Table 2
O. ELOUTASSI: [email protected] 7
Chapter 3: Introduction to SQL
SQL Parts
2. DML -- provides the ability to query information from the database:
insert tuples into
O. ELOUTASSI: [email protected] 8
Chapter 3: Introduction to SQL
SQL Parts
O. ELOUTASSI: [email protected] 9
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 10
Chapter 3: Introduction to SQL
Create Table Construct
An SQL relation is defined using the create table command:
create table r (A1 D1, A2 D2, ..., An Dn, (integrity-
constraint1),..., (integrity-constraintk))
• r is the name of the relation
• each Ai is an attribute name in the schema of relation r
• Di is the data type of values in the domain of attribute Ai
Example:
create table instructor (
ID char(5),
name varchar(20),
dept_name varchar(20),
salary numeric(8,2))
11
O. ELOUTASSI: [email protected]
Chapter 3: Introduction to SQL
Integrity Constraints in Created Table
Types of integrity constraints
• primary key (A1, ..., An )
• foreign key (Am, ..., An ) references r
• not null
SQL prevents any update to the database that violates an
integrity constraint.
Example:
create table instructor (
ID char(5),
name varchar(20) not null,
dept_name varchar(20),
salary numeric(8,2),
primary key (ID),
foreign key (dept_name) references department);
O. ELOUTASSI: [email protected] 12
Chapter 3: Introduction to SQL
Exercise
CREATE TABLE countries(
COUNTRY_ID varchar(2),
COUNTRY_NAME varchar(40),
REGION_ID decimal(10,0)
);
O. ELOUTASSI: [email protected] 13
Chapter 3: Introduction to SQL
Updates to tables
Insert
• insert into instructor values ('10211', 'Smith', 'Biology', 66000);
Delete
• Remove all tuples from the student relation
delete from student
Drop Table
• drop table r
Alter
• alter table r add A D
where A is the name of the attribute to be added to relation r
and D is the domain of A.
All exiting tuples in the relation are assigned null as the value
for the new attribute.
• alter table r drop A
where A is the name of an attribute of relation r
Dropping of attributes not supported by many databases. 14
O. ELOUTASSI: [email protected]
Chapter 3: Introduction to SQL
• Ai represents an attribute
• ri represents a relation
• P is a predicate.
The result of an SQL query is a relation.
O. ELOUTASSI: [email protected] 15
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 16
Chapter 3: Introduction to SQL
The select Clause 2/4
SQL allows duplicates in relations as well as in query results.
To force the elimination of duplicates, insert the keyword distinct
after select.
Find the department names of all instructors, and remove duplicates
select distinct dept_name
from instructor
The keyword all specifies that duplicates should not be removed.
O. ELOUTASSI: [email protected] 17
Chapter 3: Introduction to SQL
The select Clause 3/4
An asterisk in the select clause denotes “all attributes”
select *
from instructor
An attribute can be a literal with no from clause
select „92000'
• Results is a table with one column and a single row with value
“92000”
• Can give the column a name using:
select „92000' as Very High
An attribute can be a literal with from clause
select „Salary'
from instructor
• Result is a table with one column and N rows (number of tuples in the
instructors table), each row with value “A” 18
O. ELOUTASSI: [email protected]
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 19
Chapter 3: Introduction to SQL
The where Clause
The where clause specifies conditions that the result must satisfy
• Corresponds to the selection predicate of the relational algebra.
To find all instructors in Comp. Sci. dept
select name
from instructor
where dept_name = 'Comp. Sci.'
SQL allows the use of the logical connectives and, or, and not
The operands of the logical connectives can be expressions involving
the comparison operators <, <=, >, >=, =, and <>.
Comparisons can be applied to results of arithmetic expressions
To find all instructors in Comp. Sci. dept with salary > 70000
select name
from instructor
where dept_name = 'Comp. Sci.' and salary > 70000
O. ELOUTASSI: [email protected] 20
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 21
Chapter 3: Introduction to SQL
Find the names of all instructors who have a higher salary than
some instructor in 'Comp. Sci'.
• select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = 'Comp. Sci.’
O. ELOUTASSI: [email protected] 23
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 24
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 27
Chapter 3: Introduction to SQL
Where Clause Predicates
SQL includes a between comparison operator
Example: Find the names of all instructors with salary between
$90,000 and $100,000 (that is, $90,000 and $100,000)
• select name
from instructor
where salary between 90000 and 100000
Tuple comparison
• select name, course_id
from instructor, teaches
where (instructor.ID, dept_name) = (teaches.ID, 'Biology');
O. ELOUTASSI: [email protected] 28
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 29
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 30
Chapter 3: Introduction to SQL
It is possible for tuples to have a null value, denoted by null, for some
of their attributes
null signifies an unknown value or that a value does not exist.
The result of any arithmetic expression involving null is null
• Example: 5 + null returns null
The predicate is null can be used to check for null values.
• Example: Find all instructors whose salary is null.
select name
from instructor
where salary is null
The predicate is not null succeeds if the value on which it is applied
is not null.
O. ELOUTASSI: [email protected] 31
Chapter 3: Introduction to SQL
Null Values 2/2
SQL treats as unknown the result of any comparison involving a null
value (other than predicates is null and is not null).
• Example: 5 < null or null <> null or null = null
The predicate in a where clause can involve Boolean operations
(and, or, not); thus the definitions of the Boolean operations need to
be extended to deal with the value unknown.
• and : (true and unknown) = unknown,
(false and unknown) = false,
(unknown and unknown) = unknown
• or: (unknown or true) = true,
(unknown or false) = unknown
(unknown or unknown) = unknown
Result of where clause predicate is treated as false if it evaluates to
unknown
O. ELOUTASSI: [email protected] 32
Chapter 3: Introduction to SQL
Aggregate Functions
O. ELOUTASSI: [email protected] 33
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 35
Chapter 3: Introduction to SQL
Aggregation
O. ELOUTASSI: [email protected] 36
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 37
Chapter 3: Introduction to SQL
Nested Subqueries
SQL provides a mechanism for the nesting of subqueries. A subquery is
a select-from-where expression that is nested within another query.
The nesting can be done in the following SQL query
as follows:
• From clause: ri can be replaced by any valid subquery
• Where clause: P can be replaced with an expression of the form:
B <operation> (subquery)
B is an attribute and <operation> to be defined later.
• Select clause:
Ai can be replaced be a subquery that generates a single value.
O. ELOUTASSI: [email protected] 38
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 39
Chapter 3: Introduction to SQL
Find the total number of (distinct) students who have taken course
sections taught by the instructor with ID 10101
select count (distinct ID)
from takes
where (course_id, sec_id, semester, year) in
(select course_id, sec_id, semester, year
from teaches
where teaches.ID= 10101);
O. ELOUTASSI: [email protected] 41
Chapter 3: Introduction to SQL
0
(5 < some 5 ) = true since 5 < some tuple in the relation
6
0
(5 < some 5 ) = false since 5 = some tuple in the relation
0
(5 = some 5 ) = true since 5 = some tuple in the relation
0
(0 some 5 ) = true (since 0 5
(= some) in
( some) not in
O. ELOUTASSI: [email protected] 42
Chapter 3: Introduction to SQL
Find the names of all instructors whose salary is greater than the
salary of all instructors in the Biology department.
select name
from instructor
where salary > all (select salary
from instructor
where dept name = 'Biology');
O. ELOUTASSI: [email protected] 43
Chapter 3: Introduction to SQL
Definition of “all” Clause
F <comp> all r t r (F <comp> t)
0
(5 < all 5 ) = false
6
6
(5 < all 10 ) = true
4
(5 = all 5 ) = false
4
(5 all 6 ) = true (since 5 4 and 5 6)
( all) not in
However, (= all) in
O. ELOUTASSI: [email protected] 44
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 45
Chapter 3: Introduction to SQL
Use of “exists” Clause
Yet another way of specifying the query “Find all courses taught
in both the Fall 2017 semester and in the Spring 2018 semester”
select course_id
from section as S
where semester = 'Fall' and year = 2017 and
exists (select *
from section as T
where semester = 'Spring' and year= 2018
and S.course_id = T.course_id);
O. ELOUTASSI: [email protected] 46
Chapter 3: Introduction to SQL
Use of “not exists” Clause
Find all students who have taken all courses offered in the Biology
department.
O. ELOUTASSI: [email protected] 48
Chapter 3: Introduction to SQL
Subqueries in the Form Clause
SQL allows a subquery expression to be used in the from clause
Find the average instructors‟ salaries of those departments where the average
salary is greater than $42,000.”
select dept_name, avg_salary
from ( select dept_name, avg (salary) as avg_salary
from instructor
group by dept_name)
where avg_salary > 42000;
Note that we do not need to use the having clause
Another way to write above query
select dept_name, avg_salary
from ( select dept_name, avg (salary)
from instructor
group by dept_name)
as dept_avg (dept_name, avg_salary)
where avg_salary > 42000;
49
O. ELOUTASSI: [email protected]
Chapter 3: Introduction to SQL
With Clause
O. ELOUTASSI: [email protected] 50
Chapter 3: Introduction to SQL
Complex Queries using With Clause
Find all departments where the total salary is greater than the
average of the total salary at all departments
with dept _total (dept_name, value) as
(select dept_name, sum(salary)
from instructor
group by dept_name),
dept_total_avg(value) as
(select avg(value)
from dept_total)
select dept_name
from dept_total, dept_total_avg
where dept_total.value > dept_total_avg.value;
O. ELOUTASSI: [email protected] 51
Chapter 3: Introduction to SQL
Scalar Subquery
O. ELOUTASSI: [email protected] 52
Chapter 3: Introduction to SQL
Modification of the Database
O. ELOUTASSI: [email protected] 53
Chapter 3: Introduction to SQL
Deletion 1/2
Delete all instructors
delete from instructor
Deletion 2/2
Delete all instructors whose salary is less than the average salary of
instructors
delete from instructor
where salary < (select avg (salary)
from instructor);
O. ELOUTASSI: [email protected] 55
Chapter 3: Introduction to SQL
Insertion 1/2
Add a new tuple to course
insert into course
values ('CS-437', 'Database Systems', 'Comp. Sci.', 4);
or equivalently
O. ELOUTASSI: [email protected] 56
Chapter 3: Introduction to SQL
Insertion 2/2
Make each student in the Music department who has earned
more than 144 credit hours an instructor in the Music
department with a salary of $18,000.
insert into instructor
select ID, name, dept_name, 18000
from student
where dept_name = 'Music' and total_cred > 144;
O. ELOUTASSI: [email protected] 57
Chapter 3: Introduction to SQL
Updates 1/2
Give a 5% salary raise to all instructors
update instructor
set salary = salary * 1.05
Give a 5% salary raise to those instructors who earn less than 70000
update instructor
set salary = salary * 1.05
where salary < 70000;
Give a 5% salary raise to instructors whose salary is less than average
update instructor
set salary = salary * 1.05
where salary < (select avg (salary)
from instructor);
O. ELOUTASSI: [email protected] 58
Chapter 3: Introduction to SQL
Updates 1/2
Increase salaries of instructors whose salary is over $100,000
by 3%, and all others by a 5%
• Write two update statements:
update instructor
set salary = salary * 1.03
where salary > 100000;
update instructor
set salary = salary * 1.05
where salary <= 100000;
• The order is important
• Can be done better using the case statement (next slide)
O. ELOUTASSI: [email protected] 59
Chapter 3: Introduction to SQL
O. ELOUTASSI: [email protected] 60
Chapter 3: Introduction to SQL
Updates with Scalar Subqueries
Recompute and update tot_creds value for all students
update student S
set tot_cred = (select sum(credits)
from takes, course
where takes.course_id = course.course_id and
S.ID= takes.ID.and
takes.grade <> 'F' and
takes.grade is not null);
Sets tot_creds to null for students who have not taken any course
Instead of sum(credits), use:
case
when sum(credits) is not null then sum(credits)
else 0
end
O. ELOUTASSI: [email protected] 61
Chapter 3: Introduction to SQL
End of Chapter 3
O. ELOUTASSI: [email protected] 62