0% found this document useful (0 votes)
27 views

Review: SQL: The Query Language

The document discusses the SQL query language and relational databases. It covers three main points in 3 sentences: SQL is the most widely used relational query language and allows querying and modifying data across related tables using operations like joins. It has a declarative interface using relational algebra and calculus that allows specifying what to retrieve without specifying how to compute it, enabling optimizations. The document provides examples of SQL queries on sample tables and explains the semantics and processing of SQL queries from joining tables to applying selection conditions.

Uploaded by

Hoàng Hải
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

Review: SQL: The Query Language

The document discusses the SQL query language and relational databases. It covers three main points in 3 sentences: SQL is the most widely used relational query language and allows querying and modifying data across related tables using operations like joins. It has a declarative interface using relational algebra and calculus that allows specifying what to retrieve without specifying how to compute it, enabling optimizations. The document provides examples of SQL queries on sample tables and explains the semantics and processing of SQL queries from joining tables to applying selection conditions.

Uploaded by

Hoàng Hải
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Review

SQL: The Query Language


Part 1 • Relational Algebra (Operational Semantics)
• Given a query, how to mix and match the
relational algebra operators to answer it
R &G - Chapter 5
• Used for query optimization
• Relational Calculus (Declarative Semantics)
• Given a query, what do I want my answer set to
include?
• Algebra and safe calculus are simple and powerful
The important thing is not to models for query languages for relational model
stop questioning.
– Have same expressive power
Albert Einstein • SQL can express every query that is expressible in
relational algebra/calculus. (and more)

Query Optimization Relational Query Languages


• Two sublanguages:
Rel. Algebra
Query 1 – DDL – Data Definition Language
• Define and modify schema (at all 3 levels)
Rel. Algebra – DML – Data Manipulation Language
SQL Query Query 2 • Queries can be written intuitively.
.
. • DBMS is responsible for efficient evaluation.
.
– The key: precise semantics for relational queries.
Rel. Algebra
Query n – Optimizer can re-order operations, without affecting
query answer.
– Choices driven by cost model: how many disk
Pick the accesses; how much CPU?
cheapest one

The SQL Query Language Example Database

• The most widely used relational query language.


• Standardized Sailors Boats
sid sname rating age bid bname color
(although most systems add their own “special sauce”
-- including PostgreSQL) 1 Fred 7 22 101 Nina red
2 Jim 2 39 102 Pinta blue
• We will study SQL92 -- a basic subset 3 Nancy 8 27 103 Santa Maria red

Reserves
sid bid day
1 102 9/12
2 102 9/13
Sailors
Review: SQL DDL The SQL DML sid sname rating age
sid sname rating age 1 Fred 7 22
CREATE TABLE Sailors ( 1 Fred 7 22
sid INTEGER, 2 Jim 2 39
sname CHAR(20), 2 Jim 2 39
3 Nancy 8 27
rating INTEGER, 3 Nancy 8 27
age REAL,
PRIMARY KEY sid); • Find all 18-year-old sailors:
bid bname color
CREATE TABLE Boats (
bid INTEGER, 101 Nina red
bname CHAR (20), 102 Pinta blue
SELECT * SELECT *
color CHAR(10)
PRIMARY KEY bid); 103 Santa Maria red FROM Sailors S FROM Sailors
WHERE S.age=18 WHERE age=18
CREATE TABLE Reserves (
sid INTEGER,
sid bid day
bid INTEGER,
day DATE, • To find just names and ratings, replace the first line:
1 102 9/12
PRIMARY KEY (sid, bid, date),
FOREIGN KEY sid REFERENCES Sailors, 2 102 9/13
FOREIGN KEY bid REFERENCES Boats); SELECT S.sname, S.rating

Querying Multiple Relations


Basic SQL Query
SELECT S.sname DISTINCT: optional keyword indicating target-list : A list of attributes
answer should not contain duplicates. of tables in relation-list
FROM Sailors S, Reserves R In SQL, default is that duplicates
WHERE S.sid=R.sid AND R.bid=102 are not eliminated! (Result is called
a “multiset”)
SELECT [DISTINCT] target-list
FROM relation-list
WHERE qualification
Sailors Reserves
sid sname rating age sid bid day
qualification : Comparisons
1 Fred 7 22 1 102 9/12 relation-list : A list of relation
combined using AND, OR and
2 Jim 2 39 2 102 9/13 NOT. Comparisons are Attr op names, possibly with a range-
3 Nancy 8 27 const or Attr1 op Attr2, where op is variable after each name
one of =,<,>,≠, etc.

Query Semantics SELECT [DISTINCT] target-list Find sailors who’ve reserved at least one
relation-list
FROM
boat
WHERE qualification

1. FROM : compute cross product of tables. SELECT S.sid


2. WHERE : Check conditions, discard tuples that fail. FROM Sailors S, Reserves R
3. SELECT : Delete unwanted fields.
WHERE S.sid=R.sid
4. DISTINCT (optional) : eliminate duplicate rows.

• Would adding DISTINCT to this query make a


Note: Probably the least efficient way to compute a query!
difference?
– Query optimizer will find more efficient ways to get the
same answer. • What is the effect of replacing S.sid by S.sname
in the SELECT clause?
– Would adding DISTINCT to this variant of the query
make a difference?
About Range Variables Arithmetic Expressions
• Needed when ambiguity could arise.
– e.g., same table used multiple times in FROM
(“self-join”)
SELECT S.age, S.age-5 AS age1, 2*S.age AS age2
SELECT x.sname, x.age, y.sname, y.age FROM Sailors S
FROM Sailors x, Sailors y WHERE S.sname = ‘dustin’
WHERE x.age > y.age

Sailors SELECT S1.sname AS name1, S2.sname AS name2


sid sname rating age FROM Sailors S1, Sailors S2
1 Fred 7 22 WHERE 2*S1.rating = S2.rating - 1
2 Jim 2 39
3 Nancy 8 27

String Comparisons Intermission

SELECT S.sname
FROM Sailors S
WHERE S.sname LIKE ‘B_%B’ Why are Databases useful?
Here’s why
`_’ stands for any one character and `%’ stands for 0 or
more arbitrary characters.

Yes, every other language in the world uses Perl-like regular expressions.
In fact, PostgreSQL supports this with substring(), but this is not
standard or portable.

Find sid’s of sailors who’ve reserved a red or a green boat Find sid’s of sailors who’ve reserved a red and a green
boat

SELECT R.sid
FROM Boats B, Reserves R
WHERE R.bid=B.bid AND
(B.color=‘red’ OR SELECT R.sid
B.color=‘green’) FROM Boats B,Reserves R
... or: WHERE R.bid=B.bid AND
SELECT R.sid (B.color=‘red’ AND B.color=‘green’)
FROM Boats B, Reserves R
WHERE R.bid=B.bid AND
B.color=‘red’
UNION
SELECT R.sid
FROM Boats B, Reserves R
WHERE R.bid=B.bid AND B.color=‘green’
Find sid’s of sailors who’ve reserved a red and a green Find sid’s of sailors who’ve reserved a red and a green
boat boat

• Could use a self-join:


SELECT S.sid
FROM Sailors S, Boats B, Reserves R
WHERE S.sid=R.sid
AND R.bid=B.bid SELECT R1.sid
FROM Boats B1, Reserves R1,
AND B.color=‘red’
Boats B2, Reserves R2
INTERSECT WHERE R1.sid=R2.sid
SELECT S.sid AND R1.bid=B1.bid
FROM Sailors S, Boats B, Reserves R AND R2.bid=B2.bid
WHERE S.sid=R.sid AND (B1.color=‘red’ AND B2.color=‘green’)
AND R.bid=B.bid
AND B.color=‘green’

Find sid’s of sailors who have not reserved a boat Nested Queries: IN

Names of sailors who’ve reserved boat #103:


SELECT S.sid SELECT S.sname
FROM Sailors S FROM Sailors S
WHERE S.sid IN
EXCEPT (SELECT R.sid
FROM Reserves R
SELECT S.sid WHERE R.bid=103)
FROM Sailors S, Reserves R
WHERE S.sid=R.sid

Nested Queries: NOT IN Nested Queries with Correlation

Names of sailors who’ve reserved boat #103:


Names of sailors who’ve not reserved boat #103:
SELECT S.sname
SELECT S.sname FROM Sailors S
FROM Sailors S WHERE EXISTS
WHERE S.sid NOT IN (SELECT *
(SELECT R.sid FROM Reserves R
FROM Reserves R WHERE R.bid=103 AND S.sid=R.sid)
WHERE R.bid=103)
• Subquery may need to be recomputed for each Sailors tuple.
– Think of subquery as a function call that runs a query!
• Also: NOT EXISTS.
More on Set-Comparison Operators A Tough One
• we’ve seen: IN, EXISTS
Find sailors who’ve reserved all boats.
• can also have: NOT IN, NOT EXISTS
• other forms: op ANY, op ALL

SELECT S.sname
• Find sailors whose rating is greater than that of FROM Sailors S Sailors S such that ...
some sailor called Horatio: WHERE NOT EXISTS ( SELECT B.bid
there is no boat B without
FROM Boats B ...
SELECT *
WHERE NOT EXISTS ( SELECT R.bid
FROM Sailors S
a Reserves tuple showing S reserved B FROM Reserves R
WHERE S.rating > ANY
WHERE R.bid=B.bid
(SELECT S2.rating
AND R.sid=S.sid))
FROM Sailors S2
WHERE S2.sname=‘Horatio’)

Summary

• Relational model has well-defined query semantics

• SQL provides functionality close to basic relational model


(some differences in duplicate handling, null values, set
operators, …)
• Typically, many ways to write a query
– DBMS figures out a fast way to execute a query,
regardless of how it is written.

You might also like