SQL Queries
SQL Queries
1
Why SQL?
§ SQL is a very-high-level language
§ Say “what to do” rather than “how to do it”
§ Avoid a lot of data-manipulation details
needed in procedural languages like C++ or
Java
§ Database management system figures
out “best” way to execute query
§ Called “query optimization”
2
Select-From-Where Statements
SELECT desired attributes
FROM one or more tables
WHERE condition about tuples of
the tables
3
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)
4
Example
5
Result of Query
name
Od. Cl.
Eventyr
Blålys
...
The answer is a relation with a single attribute,
name, and tuples with the name of each beer
by Albani Bryggerierne, such as Odense Classic.
6
Meaning of Single-Relation Query
§ Begin with the relation in the FROM
clause
§ Apply the selection indicated by the
WHERE clause
§ Apply the extended projection indicated
by the SELECT clause
7
Operational Semantics
name manf
Tuple-variable t
loops over all
tuples 8
Operational Semantics – General
§ Think of a tuple variable visiting each
tuple of the relation mentioned in FROM
§ Check if the “current” tuple satisfies the
WHERE clause
§ If so, compute the attributes or
expressions of the SELECT clause using
the components of this tuple
9
* In SELECT clauses
10
Result of Query:
name manf
Od.Cl. Albani
Eventyr Albani
Blålys Albani
... ...
13
Expressions in SELECT Clauses
14
Result of Query
bar beer priceInEuro
C.Ch. Od.Cl. 2.68
C.Ch. Er.Wei. 4.69
… … …
15
Example: Constants as Expressions
16
Result of Query
drinker whoLikesAlbani
Peter likes Albani
Kim likes Albani
… …
17
Example: Information Integration
§ We often build “data warehouses” from
the data at many “sources”
§ Suppose each bar has its own relation
Menu(beer, price)
§ To contribute to Sells(bar, beer, price)
we need to query each bar and insert
the name of the bar
18
Information Integration
19
Complex Conditions in WHERE
Clause
§ Boolean operators AND, OR, NOT
§ Comparisons =, <>, <, >, <=, >=
§ And many other operators that produce
boolean-valued results
20
Example: Complex Condition
SELECT price
FROM Sells
WHERE bar = ’Cafe Bio’ AND
beer = ’Od.Cl.’;
21
Patterns
22
Example: LIKE
SELECT name
FROM Drinkers
WHERE address LIKE ’%, 5___ %’;
23
NULL Values
UNKNOWN 27
2-Valued Laws != 3-Valued Laws
§ Some common laws, like commutativity
of AND, hold in 3-valued logic
§ But not others, e.g., the law of the
excluded middle: p OR NOT p = TRUE
§ When p = UNKNOWN, the left side is
MAX( ½, (1 – ½ )) = ½ != 1
28
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>”
29
Example: Joining Two Relations
§ Using relations Likes(drinker, beer) and
Frequents(drinker, bar), find the beers liked
by at least one person who frequents C. Ch.
SELECT beer
FROM Likes, Frequents
WHERE bar = ’C.Ch.’ AND
Frequents.drinker =
Likes.drinker;
30
Formal Semantics
§ Almost the same as for single-relation
queries:
1. Start with the product of all the relations
in the FROM clause
2. Apply the selection condition from the
WHERE clause
3. Project onto the list of attributes and
expressions in the SELECT clause
31
Operational Semantics
§ Imagine one tuple-variable for each
relation in the FROM clause
§ These tuple-variables visit each
combination of tuples, one from each
relation
§ If the tuple-variables are pointing to
tuples that satisfy the WHERE clause,
send these tuples to the SELECT clause
32
Example
t1 t2
Peter Od.Cl.
Peter C.Ch.
check
For C.Ch. Likes
Frequents
check these to output
are equal
33
Explicit Tuple-Variables
38
Example: Single-Tuple Subquery
§ Using Sells(bar, beer, price), find the
bars that serve Pilsener for the same
price Cafe Chino charges for Od.Cl.
§ Two queries would surely work:
1. Find the price Cafe Chino charges for Od.Cl.
2. Find the bars that serve Pilsener at that
price
39
Query + Subquery Solution
SELECT bar
FROM Sells
WHERE beer = ’Pilsener’ AND
price = (SELECT price
FROM Sells
WHERE bar = ’Cafe Chino’
The price at
Which C.Ch. AND beer = ’Od.Cl.’);
sells Od.Cl.
40
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
41
Example: IN
SELECT a
FROM R, S
WHERE R.b = S.b;
SELECT a
FROM R
WHERE b IN (SELECT b FROM S);
43
IN is a Predicate About R’s Tuples
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;
One loop, over
3 4 2 6 1 is output once
the tuples of R
R S
44
This Query Pairs Tuples from R, S
SELECT a
FROM R, S
WHERE R.b = S.b;
46
Example: EXISTS
SELECT name Notice scope rule: manf refers
to closest nested FROM with
FROM Beers b1 a relation having that attribute