Professional Documents
Culture Documents
P R O F. I L K E R B E K M E Z C İ
1
SQL STATEMENTS
2
DATABASE MODIFICATIONS
• A modification command does not return a result (as a query does), but changes the
database in some way.
• Three kinds of modifications:
1. Insert a tuple or tuples.
2. Delete a tuple or tuples.
3. Update the value(s) of an existing tuple or tuples.
3
INSERTION
4
SPECIFYING ATTRIBUTES IN INSERT
5
EXAMPLE: SPECIFYING ATTRIBUTES
Another way to add the fact that Sally likes Bud to Likes(drinker, beer):
6
INSERTING MANY TUPLES
9
EXAMPLE: DELETION
• Delete from Likes(drinker, beer) the fact that Sally likes Bud:
DELETE FROM Likes
WHERE drinker = ’Sally’ AND
beer = ’Bud’;
10
EXAMPLE: MULTIPLE TUPLE DELETION
• Delete from Likes(drinker, beer) the fact that Sally likes Bud:
DELETE FROM Likes
WHERE beer = ’Bud’;
11
EXAMPLE: DELETE ALL TUPLES
12
13
UPDATES
14
EXAMPLE: UPDATE
15
EXAMPLE: UPDATE SEVERAL TUPLES
16
17
SQL STATEMENTS
18
SELECT-FROM-WHERE STATEMENTS
SELECT desired attributes
FROM one or more tables
WHERE condition about tuples of
the tables
19
OUR RUNNING EXAMPLE
• All our SQL queries will be based on the following database schema.
– Underline indicates key attributes.
Beers(name, manf)
Bars(name, addr, license)
Drinkers(name, addr, phone)
Likes(drinker, beer)
Sells(bar, beer, price)
Frequents(drinker, bar)
20
EXAMPLE
21
RESULT OF QUERY
name
Bud The answer is a relation with a single attribute,
Bud Lite name, and tuples with the name of each beer
Michelob by Anheuser-Busch, such as Bud.
...
22
MEANING OF SINGLE-RELATION QUERY
23
OPERATIONAL SEMANTICS
SELECT name
name manf FROM Beers
WHERE manf = ’Anheuser-Busch’;
Tuple-variable t
loops over all
tuples 24
OPERATIONAL SEMANTICS - GENERAL
25
26
SELECT-FROM-WHERE STATEMENTS
SELECT desired attributes
FROM one or more tables
WHERE condition about tuples of
the tables
27
* IN SELECT CLAUSES
• When there is one relation in the FROM clause, * in the SELECT clause
stands for “all attributes of this relation.”
• Example: Using Beers(name, manf):
SELECT *
FROM Beers
WHERE manf = ’Anheuser-Busch’;
28
RESULT OF QUERY:
name manf
Bud Anheuser-Busch
Bud Lite Anheuser-Busch
Michelob Anheuser-Busch
... ...
29
RENAMING ATTRIBUTES
• If you want the result to have different attribute names, use “AS <new name>”
to rename an attribute.
• Example: Using Beers(name, manf):
SELECT name AS beer, manf
FROM Beers
WHERE manf = ’Anheuser-Busch’
30
RESULT OF QUERY:
beer manf
Bud Anheuser-Busch
Bud Lite Anheuser-Busch
Michelob Anheuser-Busch
... ...
31
EXPRESSIONS IN SELECT CLAUSES
32
RESULT OF QUERY
33
EXAMPLE: CONSTANTS AS EXPRESSIONS
SELECT drinker,
’likes Bud’ AS whoLikesBud
FROM Likes
WHERE beer = ’Bud’;
34
RESULT OF QUERY
drinker whoLikesBud
Sally likes Bud
Fred likes Bud
… …
35
36
SELECT-FROM-WHERE STATEMENTS
SELECT desired attributes
FROM one or more tables
WHERE condition about tuples of
the tables
37
COMPLEX CONDITIONS IN WHERE
CLAUSE
38
EXAMPLE: COMPLEX CONDITION
• Using Sells(bar, beer, price), find the price Kazan charges for Bud:
SELECT price
FROM Sells
WHERE bar = ’Kazan’ AND
beer = ’Bud’;
39
PATTERNS
40
EXAMPLE: LIKE
• Using Drinkers(name, addr, phone) find the drinkers with exchange 555:
SELECT name
FROM Drinkers
WHERE phone LIKE ’%555%’;
41
42
NULL VALUES
• Tuples in SQL relations can have NULL as a value for one or more
components.
• Meaning depends on context. Two common cases:
– Missing value : e.g., we know Kazan has some address, but we don’t know
what it is.
– Inapplicable : e.g., the value of attribute spouse for an unmarried person.
43
COMPARING NULL’S TO VALUES
44
SURPRISING EXAMPLE
UNKNOWN UNKNOWN
UNKNOWN 45
REASON: 2-VALUED LAWS != 3-
VALUED LAWS
46
47
SELECT-FROM-WHERE STATEMENTS
SELECT desired attributes
FROM one or more tables
WHERE condition about tuples of
the tables
48
MULTIRELATION QUERIES
• Interesting queries often combine data from more than one relation.
• We can address several relations in one query by listing them all in the FROM clause.
• Distinguish attributes of the same name by “<relation>.<attribute>” .
49
EXAMPLE: JOINING TWO RELATIONS
• Using relations Likes(drinker, beer) and Frequents(drinker, bar), find the beers
liked by at least one person who frequents Kazan.
SELECT beer
FROM Likes, Frequents
WHERE bar = ’Kazan’ AND
Frequents.drinker = Likes.drinker;
50
FORMAL SEMANTICS
51
OPERATIONAL SEMANTICS
52
EXAMPLE
SELECT beer
FROM Likes, Frequents
WHERE bar = ’Kazan’ AND
Frequents.drinker = Likes.drinker;
tv1 tv2
Sally Bud
Sally Kazan
check
Likes
for Kazan
Frequents
check these to output
are equal 53
EXPLICIT TUPLE-VARIABLES
54
EXAMPLE: SELF-JOIN
• From Beers(name, manf), find all pairs of beers by the same
manufacturer.
– Do not produce pairs like (Bud, Bud).
– Produce pairs in alphabetic order, e.g. (Bud, Miller), not (Miller, Bud).
SELECT b1.name, b2.name
FROM Beers b1, Beers b2
WHERE b1.manf = b2.manf AND
b1.name < b2.name;
55
JOIN EXPRESSIONS
56
JOIN EXPRESSIONS
• In MySQL
– INNER JOIN: Returns records that have matching values in both tables
– LEFT JOIN: Returns all records from the left table, and the matched records from the right table
– RIGHT JOIN: Returns all records from the right table, and the matched records from the left table
– CROSS JOIN: Returns all records from both tables
57
JOIN EXPRESSIONS
https://ssbi-blog.de/blog/technical-topics-english/join-types-in-power-query-see-how-it-works/
58
DIFFERENT DBMS DIFFERENT SEMANTICS
• In Oracle
– NATURAL JOIN
– LEFT OUTER JOIN
– RIGHT OUTER JOIN
– CROSS JOIN
– INNER JOIN
59
60
SUBQUERIES
• A parenthesized SELECT-FROM-WHERE statement (subquery ) can
be used as a value in a number of places, including FROM and
WHERE clauses.
• Example: in place of a relation in the FROM clause, we can use a
subquery and then query its result.
– Must use a tuple-variable to name tuples of the result.
61
EXAMPLE: SUBQUERY IN FROM
• Find the beers liked by at least one person who frequents of Kazan.
SELECT beer
Drinkers who
FROM Likes, (SELECT drinker frequent Kazan
FROM Frequents
WHERE bar = ’Kazan’)JD
WHERE Likes.drinker = JD.drinker;
62
SUBQUERIES THAT RETURN ONE TUPLE
• If a subquery is guaranteed to produce one tuple, then the subquery can
be used as a value.
– Usually, the tuple has one component.
– A run-time error occurs if there is no tuple or more than one tuple.
63
EXAMPLE: SINGLE-TUPLE SUBQUERY
• Using Sells(bar, beer, price), find the bars that serve Miller for the
same price Kazan charges for Bud.
• Two queries would surely work:
1. Find the price Kazan charges for Bud.
2. Find the bars that serve Miller at that price.
64
QUERY + SUBQUERY SOLUTION
SELECT bar
FROM Sells
WHERE beer = ’Miller’ AND
price = (SELECT price
FROM Sells
WHERE bar = ’Kazan’
The price at
which Joe AND beer = ’Bud’);
sells Bud
65
66
THE IN OPERATOR
• <tuple> IN (<subquery>) is true if and only if the tuple is a member of the relation produced by
the subquery.
– Opposite: <tuple> NOT IN (<subquery>).
• IN-expressions can appear in WHERE clauses.
67
EXAMPLE: IN
• Using Beers(name, manf) and Likes(drinker, beer), find the name and
manufacturer of each beer that Fred likes.
SELECT *
FROM Beers
WHERE name IN (SELECT beer
FROM Likes
WHERE drinker = ’Fred’);
The set of
beers Fred
likes
68
EXAMPLE: IN AND JOIN
SELECT a
Two 2’s
FROM R
WHERE b IN (SELECT b FROM S);
a b b c (1,2) satisfies
1 2 2 5 the condition;
3 4 2 6 1 is output once.
One loop, over
R S
the tuples of R
69
EXAMPLE: IN AND JOIN
SELECT a
FROM R, S
WHERE R.b = S.b;
70
71
THE EXISTS OPERATOR
72
EXAMPLE: EXISTS
Notice scope rule: manf refers
SELECT name to closest nested FROM with
a relation having that attribute.
FROM Beers b1
WHERE NOT EXISTS (
SELECT *
Set of beers
with the same FROM Beers Notice the
manf as WHERE manf = b1.manf AND SQL “not
b1, but not the equals”
name <> b1.name);
same beer operator
73
THE OPERATOR ANY
74
THE OPERATOR ALL
75
EXAMPLE: ALL
• From Sells(bar, beer, price), find the beer(s) sold for the highest price.
SELECT beer
FROM Sells
WHERE price >= ALL( price from the outer
Sells must not be
SELECT price less than any price.
FROM Sells);
76
77
UNION, INTERSECTION, AND DIFFERENCE
• Union, intersection, and difference of relations are expressed by the following forms, each
involving subqueries:
– (<subquery>) UNION (<subquery>)
– (<subquery>) INTERSECT (<subquery>)
– (<subquery>) EXCEPT (<subquery>)
78
EXAMPLE: INTERSECTION
79
Notice trick:
subquery is
really a stored
table.
The drinker frequents
a bar that sells the
(SELECT * FROM Likes) beer.
INTERSECT
(SELECT drinker, beer
FROM Sells, Frequents
WHERE Frequents.bar = Sells.bar
);
80
BAG SEMANTICS
• Although the SELECT-FROM-WHERE statement uses bag semantics, the default for union,
intersection, and difference is set semantics.
– That is, duplicates are eliminated as the operation is applied.
81
MOTIVATION: EFFICIENCY
82
83
CONTROLLING DUPLICATE ELIMINATION
84
EXAMPLE: DISTINCT
• From Sells(bar, beer, price), find all the different prices charged for beers:
SELECT DISTINCT price
FROM Sells;
• Notice that without DISTINCT, each price would be listed as many times as there were
bar/beer pairs at that price.
85
EXAMPLE: ALL
86
87