Title: SQL
1SQL
- SQL is a very-high-level language, in which the
programmer is able to avoid specifying a lot of
data-manipulation details that would be necessary
in languages like C. - What makes SQL viable is that its queries are
optimized quite well, yielding efficient query
executions.
2Select-From-Where Statements
- The principal form of a query is
- SELECT desired attributes
- FROM one or more tables
- WHERE condition about tuples of the tables
3Our Running Example
- Our SQL queries will be based on the following
database schema. - Movie(title, year, length, inColor, studioName,
producerC) - StarsIn(movieTitle, movieYear, starName)
- MovieStar(name, address, gender, birthdate)
- MovieExec(name, address, cert, netWorth)
- Studio(name, address, cert, netWorth)
-
- Find all movies produced by Disney Studios in
1990. -
- SELECT
- FROM Movie
- WHERE studioName 'Disney' AND year 1990
4Meaning 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.
5(Extended) Projection in SQL
SELECT title, length FROM Movie WHERE
studioName 'Disney' AND year 1990 SELECT
title AS name, length AS duration FROM
Movie WHERE studioName 'Disney' AND year
1990 SELECT title AS name, length0.016667 AS
lenghtInHours FROM Movie WHERE studioName
'Disney' AND year 1990 SELECT title AS
name, length/60 AS length, 'hrs.' AS
inHours FROM Movie WHERE studioName 'Disney'
AND year 1990
6Selection in SQL
- The selection of the relational algebra is
available through the WHERE clause of SQL. - We may build expressions by using the operators
-
- ltgt
- lt
- gt
- lt
- gt
- The string constants are surrounded by single
quotes. - studioName 'Disney'
- Numeric constants are for e.g. -12.34, 1.23E45
- Boolean operators are AND, OR, NOT.
- SELECT title
- FROM Movie
- WHERE (year gt 1970) AND NOT (inColor'C')
7Selection in SQL (Cont.)
- Which Disney movies are after 1970 or have length
greater than 90 mins? - SELECT title
- FROM Movie
- WHERE (year gt 1970 OR length lt 90) AND
studioName'Disney' - The parenthesis are needed because the precedence
of OR is less than that of AND.
8Comparision of strings
- Strings can as well be compared
(lexicographically) with the same operators -
- ltgt
- lt
- gt
- lt
- gt
- For instance fodderltfoo bar lt bargain
9Patterns
- WHERE clauses can have conditions in which a
string is compared with a pattern, to see if it
matches. - General form
- ltAttributegt LIKE ltpatterngt
- ltAttributegt NOT LIKE ltpatterngt
- Pattern is a quoted string with
- any string
- _ any character.
- Examples. Suppose we remember a movie Star
something. - SELECT title
- FROM Movie
- WHERE title LIKE 'Star '
- SELECT title
- FROM Movie
- WHERE title LIKE '''s'
- Two consecutive apostrophes in a string represent
itself and not the end of the string.
10Comparison of Strings (Continued)
- What if the pattern we wish to use in a LIKE
expression involves the characters or _? - We should escape their special meaning
proceeding them by some escape character. - In UNIX and C we use backslash \ as the escape
character. - SQL allows us to use any character we like.
- s LIKE 'xx' ESCAPE 'x'
- x will be the escape character.
- A string that is matched by this pattern is for
example aaaa - SELECT title
- FROM Movie
- WHERE title LIKE 'xx' ESCAPE 'x'
11Ordering the Input
- We may ask the tuples produced by a query to be
presented in sorted order. - ORDER BY ltlist of attributesgt
- Example. Find the Disney movies of 1990.
- Movie(title, year, length, inColor, studioName,
producerC) - To get the movies listed by length, shortest
first, and among movies of equal length, sort
alphabetically - SELECT
- FROM Movie
- WHERE studioName 'Disney'
- ORDER BY length, title
- Ordering is ascending, unless you specify the
DESC keyword to an attribute. - Ties are broken by the second attribute on the
ORDER BY list, etc.
12NULL 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 the length has some
value, but we dont know what it is. - Inapplicable e.g., the value of attribute
spouse for an unmarried person.
13Comparing NULLs to Values
- The logic of conditions in SQL is really 3-valued
logic TRUE, FALSE, UNKNOWN. - When any value is compared with NULL, the truth
value is UNKNOWN. - But a query only produces a tuple in the answer
if its truth value for the WHERE clause is TRUE
(not FALSE or UNKNOWN).
14Three-Valued Logic
- To understand how AND, OR, and NOT work in
3-valued logic, think of - TRUE 1, FALSE 0, and UNKNOWN ½.
- AND MIN
- OR MAX
- NOT(x) 1-x
- Example
- TRUE AND (FALSE OR NOT(UNKNOWN))
- MIN(1, MAX(0, (1 - ½ )))
- MIN(1, MAX(0, ½ )) MIN(1, ½ ) ½.
15Surprising Example
- SELECT
- FROM Movie
- WHERE length lt120 OR length gt 120
- Suppose that we have some NULL values in the
length. - Whats the result?
16Products and Joins in SQL
- SQL has a simple way to couple relations in one
query list each relation in the FROM clause. - All the relations in the FROM clause are coupled
through Cartesian product - Then we can put conditions in the WHERE clause in
order to get the various kinds of join. - Example. We want to know the name of the producer
of Star Wars. - To answer we need the information from both of
the relations - Movie(title, year, length, inColor, studioName,
producerC) - MovieExec(name, address, cert, netWorth)
- SELECT name
- FROM Movie, MovieExec
- WHERE title 'Star Wars' AND producerC cert
17Disambiguating Attributes
- When we involve two or more relations in a query,
we can have attributes with the same name among
these relations. - We solve the problem of disambiguating between
them by putting the name of the relation followed
by a dot and then the name of the attribute. - Example. Suppose we wish to find pairs (star,
movie executive) living in the same address. - MovieStar(name, address, gender, birthdate)
- MovieExec(name, address, cert, netWorth)
- SELECT MovieStar.name, MovieExec.name
- FROM MovieStar, MovieExec
- WHERE MovieStar.address MovieExec.address
18Tuple Variables
- Sometimes we need to ask a query that involves
two or more tuples from the same relation. We may
list a relation R as many times we want in the
from clause but we need a way to refer to each
occurrence of R. - SQL allows us to define, for each occurrence in
the FROM clause, an alias which we call tuple
variable. - Example. We like to know about two stars who
share an address. - SELECT Star1.name, Star2.name
- FROM MovieStar AS Star1, MovieStar AS Star2
- WHERE Star1.address Star2.address
- AND Star1.name lt Star2.name
- AS is not supported in Oracle.
19In Oracle
- SELECT Star1.name, Star2.name
- FROM MovieStar Star1, MovieStar Star2
- WHERE Star1.address Star2.address
- AND Star1.name ltgt Star2.name
20Tuple Variables (Continued)
- Why we have the condition
- Star1.name lt Star2.name ?
- Without this condition we would produce also
pairs of identical star names. - This conditions forces us to produce each pair of
stars with a common address only. - Why we used the operator lt and not ltgt?
- If we had used ltgt the we would have produced
pairs of married stars twice, like - Star1.name Star2.name
- Alec Baldwin Kim Basinger
- Kim Basinger Alec Baldwin
21Conversion to Relational Algebra
- Another approach to interpret SQL queries is to
relate them to relational algebra. - Start with the relations in the FROM clause and
take their Cartesian Product. - Having created the product, we apply a selection
operator to it by converting the WHERE clause to
a selection condition. - Finally from the list of attributes in the SELECT
clause we do a projection.
22An Unintuitive Consequence of SQL semantics
- Suppose R, S, T are unary relations each having
attribute A alone. - We wish to compute R?(S?T).
- We might expect the following SQL query to do the
job. - SELECT R.A
- FROM R, S, T
- WHERE R.A S.A OR R.A T.A
- However, consider the situation in which T is
empty. Since R.A T.A can never be satisfied, we
might expect the query to produce exactly R?T. - But using the interpretation the result is empty.
- If we use the conversion to RA, the Cartesian
product R x S x T is ?.
23Union, Intersection, and Difference of Queries
- If two SQL queries produce relations with the
same set of attributes then we can combine the
queries using the set operations UNION,
INTERSECT and EXCEPT. - Example. Suppose we want the names and addresses
of all female movie stars who are also movie
executives with a net worth over 1,000,000. - MovieStar(name, address, gender, birthdate)
- MovieExec(name, address, cert, netWorth)
- (SELECT name, address
- FROM MovieStar
- WHERE gender 'F')
- INTERSECT
- (SELECT name, address
- FROM MovieExec
- WHERE netWorth gt 1000000)
24Union, Intersection, and Difference of Queries
(Continued)
- Example. Give the names and addresses of movie
stars who are not also movie executives. - (SELECT name, address
- FROM MovieStar)
- EXCEPT
- (SELECT name, address
- FROM MovieExec)
-
- In ORACLE the EXCEPT is MINUS.
- Example. We want all the titles and years of
movies that appeared in either the Movie or
StarsIn relation. - (SELECT title, year FROM Movie)
- UNION
- (SELECT title, year FROM StarsIn)