Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
97 views

COMP163: Database Management Systems September 18, 2008

This lecture discusses SQL queries, including: - The basic SELECT command uses projection and selection to retrieve attributes from tables. - Joins must be expressed using selection and cross products in the basic form. - Aliases can disambiguate common attributes and improve readability. - Aggregate functions like COUNT, SUM apply attributes in the result. - Comparison operators like = and LIKE are used in the WHERE clause.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
97 views

COMP163: Database Management Systems September 18, 2008

This lecture discusses SQL queries, including: - The basic SELECT command uses projection and selection to retrieve attributes from tables. - Joins must be expressed using selection and cross products in the basic form. - Aliases can disambiguate common attributes and improve readability. - Aggregate functions like COUNT, SUM apply attributes in the result. - Comparison operators like = and LIKE are used in the WHERE clause.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 52

COMP163

Database Management Systems


September 18, 2008

Lecture 8 – Sections 8.4-8.5


SQL Queries
SQL
SQL (Structured Query Language)
is the standard language for commercial DBMSs
SEQUEL (Structured English QUEry Language)
was originally defined by IBM for SYSTEM R
 mid 1970s
 unofficial pronunciation (see-kwuhl) still sometimes used

standardization of SQL began in the 80s


current standard is SQL-99
 subsequent revisions are not fully accepted by all vendors

SQL is more than a query language:


it includes a DDL, DML and admin commands
SQL commands
Administration: Data Modification:
 CREATE DATABASE  INSERT
 CREATE SCHEMA  DELETE
 SET ROLE  UPDATE
 GRANT PRIVILEGES
Queries:
Data Definition:  SELECT
 CREATE TABLE
 ALTER TABLE
 DROP TABLE
 CREATE VIEW

48 commands listed in
SQL in a Nutshell
SQL Queries
Queries in SQL are variations
of the SELECT command

Basic SQL queries correspond to


the following relational algebra operations:
 select 
 project 
 cross product X
 joins must be expressed as  and X
Basic SELECT Command

project 

SELECT <attribute list>


FROM <table list> cross product X
WHERE <condition>;

select 
Single Table Queries ( and )
Ssn (Salary > 60000 (EMPLOYEE) )
SELECT Ssn
FROM EMPLOYEE
WHERE Salary > 60000;

City,State (Airport_code = ‘SFO’ (AIRPORT) )


SELECT City, State
FROM AIRPORT
WHERE Airport_code = ‘SFO’;
Join as Select & Cross
In the basic SELECT/FROM/WHERE form,
joins must be expressed as using  and X

Lname, Dname (EMPLOYEE ⋈ Ssn=Mgr_ssn DEPARTMENT)

Lname, Dname ( Ssn=Mgr_ssn (EMPLOYEE X DEPARTMENT) )

SELECT Lname, Dname


FROM EMPLOYEE, DEPARTMENT
WHERE Ssn = Mgr_ssn;
Basic SQL Queries
Retrieve the name and address of all employees who
work
for the 'Research' department.

SELECT FNAME, LNAME, ADDRESS


FROM EMPLOYEE, DEPARTMENT
WHERE DNAME='Research'
selection AND DNUMBER=DNO
join
condition condition
Basic SQL Queries
For every project located in 'Stafford', list the project number,
the controlling department number, and
the department manager's last name, address, and birthdate.

SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS

FROM PROJECT, DEPARTMENT, EMPLOYEE

WHERE DNUM=DNUMBER AND MGRSSN=SSN

AND PLOCATION='Stafford’ join


DEPARTMENT
join and EMPLOYEE
PROJECT and
DEPARTMENT
select
Tuple Variables (Aliases)
We can give names to the tuples coming
from each of the input relations
SELECT E.Lname, D.Dname
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.Ssn = D.Mgr_ssn;

This can disambiguate common attribute


names
and improve readability
Renaming Attributes
Attributes can also be renamed in the FROM
clause
 similar to alternate rename syntax in the algebra
SELECT Fn, Ln
FROM EMPLOYEE E(Fn, Mi, Ln, Bd, Ad, Sx, Sl, Sssn, Dn)
WHERE Dn = 4;
Self Join
For each employee, retrieve the employee's name,
and the name of his or her immediate supervisor.

SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME


FROM EMPLOYEE E, EMPLOYEE S
WHERE E.SUPERSSN=S.SSN

Aliases are necessary for this query

Think of E and S as two different copies of EMPLOYEE


 E represents employees in role of supervisees and
S represents employees in role of supervisors
Aliases: alternate syntax
Can also use the AS keyword to specify aliases
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE AS E, EMPLOYEE AS S
WHERE E.SUPERSSN=S.SSN

Can also simply use the relation names


(when non-ambiguous)
SELECT EMPLOYEE.Lname, DEPARTMENT.Dname
FROM EMPLOYEE, DEPARTMENT
WHERE EMPLOYEE.Ssn = DEPARTMENT.Mgr_ssn;
No   No WHERE
If there are no selection (or join) conditions,
the WHERE clause can be omitted
SELECT Ssn
Ssn EMPLOYEE
FROM EMPLOYEE

Two or more relations in FROM clause


with no join is a CROSS PRODUCT
SELECT Lname, Dname
FROM EMPLOYEE, DEPARTMENT
Lname, Dname (EMPLOYEE X DEPARTMENT)
No   *
To retrieve all the attribute values of the selected
tuples,
use *, which stands for all the attributes

SELECT *
FROM EMPLOYEE
WHERE DNO=5

SELECT *
FROM EMPLOYEE, DEPARTMENT
WHERE DNAME='Research' AND
DNO=DNUMBER
Tables as Sets  DISTINCT
SQL does not treat a relation as a set;
duplicate tuples can appear
To eliminate duplicate tuples in a query result,
the keyword DISTINCT is used

SELECT SALARY
may contain duplicates
FROM EMPLOYEE

SELECT DISTINCT SALARY duplicates eliminated


FROM EMPLOYEE
Set Operations
union operation (UNION)
intersection (INTERSECT)
set difference (MINUS, sometimes called EXCEPT)
 some implementations of SQL do not support all set operations

Set operation results are sets of tuples


duplicate tuples are eliminated from the result

The set operations apply only to union compatible


relations:
the two relations must have the same attributes and
the attributes must appear in the same order
Set Operations: Example
List project numbers for all projects that involve
an employee whose last name is 'Smith' as a worker
or as a manager of the department that controls the project.

(SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith')

UNION

(SELECT PNAME
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER=PNO AND ESSN=SSN AND NAME='Smith')
Multiset Operations
UNION ALL, INTERSECT ALL, EXCEPT ALL
Multiset operation results are multisets of
tuples
duplicate tuples are not eliminated
(SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith')
UNION ALL
(SELECT PNAME
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER=PNO AND ESSN=SSN AND NAME='Smith')
WHERE Clause
WHERE clause is a general boolean expression

Boolean operators:
AND, OR, NOT
Comparison operators:
=, <, <=, >, >=, <>
String comparison operators:
LIKE

Parentheses can be used to set precedence


String literals can be enclosed in "…" or '…'
String Comparison
The LIKE comparison operator
is used to compare partial strings

Two wildcard characters are used:

'%' replaces an arbitrary number of characters

'_' replaces a single arbitrary character


String Comparison Example
Retrieve all employees
whose address is in Houston, Texas.

The value of the ADDRESS attribute must


contain the substring “Houston, TX”.

SELECT FNAME, LNAME


FROM EMPLOYEE
WHERE ADDRESS LIKE '%Houston, TX%'

zero or more
characters, before
and after substring
String Comparison Example
Retrieve all employees who were born during the
1960s.

 ‘6' must be the 3rd character of the 10 character date string

SELECT FNAME, LNAME


FROM EMPLOYEE
WHERE BDATE LIKE '_ _ 6 _ _ _ _ _ _ _'

 Following would also work:

SELECT FNAME, LNAME


FROM EMPLOYEE assumes date format is YYYY-MM-DD
WHERE BDATE LIKE '_ _ 6 %'
Arithmetic Operation
The standard arithmetic operators '+', '-'. '*', and '/'
can be applied to numeric values in an SQL query result

Show the effect of giving all employees who work


on the 'ProductX' project a 10% raise.

SELECT FNAME, LNAME, 1.1*SALARY


FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE SSN=ESSN AND PNO=PNUMBER
AND PNAME='ProductX’
Aggregate Functions
Aggregate functions are applied to result attributes
COUNT, SUM, MAX, MIN, and AVG

Find the maximum salary, the minimum salary,


and the average salary among all employees.
SELECT MAX(Salary), MIN(Salary), AVG(Salary)
FROM EMPLOYEE

Find the total salary paid to employees


who work for the 'Research' department.
SELECT SUM(Salary)
FROM EMPLOYEE, DEPARTMENT
WHERE Dno=Dnumber AND Dname='Research'
Aggregate Functions
Retrieve the total number of employees in the
company and the number of employees in the
Research' department.

SELECT COUNT (*)


FROM EMPLOYEE

SELECT COUNT (*)


FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME='Research’
Join as X and 
mysql> SELECT * FROM r; mysql> SELECT * FROM s;
+---+------+ +---+------+
| x | y | | a | b |
+---+------+ +---+------+
| 3 | 4 | | 2 | 3 |
| 5 | 6 | | 4 | 7 |
| 7 | 8 | +---+------+
| 9 | 6 |
+---+------+

mysql> SELECT * FROM r,s WHERE y=a; R ⋈ y=a S


+---+------+---+------+
| x | y | a | b |
+---+------+---+------+
 y=a (R X S)
| 3 | 4 | 4 | 7 |
+---+------+---+------+
Explicit Join
Joins can be explicitly stated in the FROM
clause.
SELECT * FROM (r JOIN s ON y=a);
+---+------+---+------+
| x | y | a | b | R ⋈ y=a S
+---+------+---+------+
| 3 | 4 | 4 | 7 |
+---+------+---+------+
Left/Right Outer Join
SELECT * FROM (r LEFT JOIN s ON y=a);
+---+------+------+------+
| x | y | a | b |
+---+------+------+------+
| 3 | 4 | 4 | 7 |
| 5 | 6 | NULL | NULL |
| 7 | 8 | NULL | NULL |
| 9 | 6 | NULL | NULL |
+---+------+------+------+

SELECT * FROM (r RIGHT JOIN s ON y=a);


+------+------+---+------+
| x | y | a | b |
+------+------+---+------+
| NULL | NULL | 2 | 3 |
| 3 | 4 | 4 | 7 |
+------+------+---+------+
Full Outer Join
SELECT * FROM r FULL OUTER JOIN s ON y=a;

mysql doesn’t support full outer join,


so we’ll substitute an equivalent query:

(SELECT * FROM r LEFT JOIN s ON y=a) UNION


(SELECT * FROM r RIGHT JOIN s ON y=a);
+------+------+------+------+
| x | y | a | b |
+------+------+------+------+
| 3 | 4 | 4 | 7 |
| 5 | 6 | NULL | NULL |
| 7 | 8 | NULL | NULL |
| 9 | 6 | NULL | NULL |
| NULL | NULL | 2 | 3 |
+------+------+------+------+
Ordering Results
An ORDER BY clause can be added
to order the result tuples

SELECT * FROM t SELECT * FROM t


SELECT * FROM t; ORDER BY j; ORDER BY i;
+----+--------+ +----+--------+ +----+--------+
| i | j | | i | j | | i | j |
+----+--------+ +----+--------+ +----+--------+
| 10 | ten | | 11 | eleven | | 4 | four |
| 11 | eleven | | 4 | four | | 10 | ten |
| 20 | twenty | | 10 | ten | | 11 | eleven |
| 4 | four | | 20 | twenty | | 20 | twenty |
+----+--------+ +----+--------+ +----+--------+
ORDER BY Examples
order by Lname first,
then by Fname if Lname is the same:
SELECT Lname, Fname
FROM Employee
WHERE salary > 60000
ORDER BY Lname, Fname

order by Lname in ascending order,


then by salary in descending order
SELECT Lname, salary
FROM Employee
WHERE salary > 60000
ORDER BY Lname ASC, salary DESC
Grouping
Forms groups (subsets) of result tuples
before applying aggregate functions
Example: count the number of employees
in each department
(group employees by DNO, then count tuples in each
group) +-----+--------+
| Dno | COUNT |
SELECT Dno, COUNT(*) +-----+--------+
| 8 | 120 |
FROM Employee | 22 | 238 |
GROUP BY Dno | 7 | 82 |
| 20 | 169 |
DNO ℱCOUNT * (EMPLOYEE) +-----+--------+
GROUP BY Example
For each project, get the project name,
project number and the number of employees
working on that project
SELECT Pnumber, Pname, COUNT(*)
FROM PROJECT, WORKS_ON
WHERE Pnumber = Pno
GROUP BY Pnumber, Pname

Attributes in SELECT clause must be aggregates


or must appear in the GROUP BY clause
Filtering Groups: HAVING
We can throw away some groups
by adding a condition in a HAVING clause

example:
for each project that has more than two employees,
get the project name, project number and
the number of employees working on that project
SELECT Pnumber, Pname, COUNT(*)
FROM PROJECT, WORKS_ON
WHERE Pnumber = Pno
GROUP BY Pnumber, Pname
HAVING COUNT(*) > 2
GROUP BY Examples
SELECT COUNT(*) FROM e

GROUP BY dept;
+----------+
SELECT * FROM e; | count(*) |
+-----+--------+-------+ +----------+
| eid | salary | dept | | 3 |
+-----+--------+-------+ | 3 | SELECT dept, COUNT(*)
| E01 | 65000 | ADMIN | | 1 | FROM e GROUP BY dept;
| E12 | 58400 | ENGR | +----------+ +-------+----------+
| E08 | 76900 | ENGR | | dept | count(*) |
| E23 | 63800 | ADMIN | +-------+----------+
| E07 | 56900 | ADMIN | | ADMIN | 3 |
| E27 | 76400 | ENGR | | ENGR | 3 |
| E14 | 48000 | TEST | | TEST | 1 |
+-----+--------+-------+ +-------+----------+
GROUP BY Examples
SELECT dept, COUNT(*) SELECT dept, AVG(salary)
FROM e FROM e
GROUP BY dept GROUP BY dept
HAVING COUNT(*) > 1; HAVING COUNT(*) > 1;
+-------+----------+ +-------+-------------+
| dept | count(*) | | dept | AVG(salary) |
+-------+----------+ +-------+-------------+
| ADMIN | 3 | | ADMIN | 61900 |
| ENGR | 3 | | ENGR | 70566.66667 |
+-------+----------+ +-------+-------------+
Nested Queries
Nested queries can be used as set values
in the WHERE clause

Set comparison operators


 IN – set membership (“is in”, ∈)
 EXISTS – set not empty (∃)
 ALL – applies to all set members (∀)
 ANY – applies to any set member
 CONTAINS – proper superset
Nested Queries
find all employees who work on
a project with John Smith

SELECT Lname, Fname


FROM EMPLOYEE E1, WORKS_ON W1
WHERE E1.SSN = W1.ESSN
AND W1.Pno IN (SELECT Pno
FROM EMPLOYEE E2, WORKS_ON W2
WHERE E2.SSN = W2.ESSN
AND E2.Fname = “John”
AND E2.Lname = “Smith”)
Nested Queries

find the highest paid employee in department 5

SELECT Lname, Fname


FROM EMPLOYEE E1
WHERE E1.Dno=5
AND E1.Salary > ALL (SELECT E2.Salary
FROM EMPLOYEE E2
WHERE E2.Dno=5)
Nested Queries
List names of managers who have dependents

SELECT Lname, Fname


FROM EMPLOYEE E1
WHERE EXISTS (SELECT *
FROM DEPENDENT D1
WHERE E1.Ssn = D1.Essn)
AND
EXISTS (SELECT *
FROM DEPARTMENT D2
WHERE E1.Ssn = D2.Mgr_ssn)

This is an example of a correlated nested query,


since the nested queries refer to the relations in the outer query.
Nested Queries
List names of employees who work on
all projects controlled by department 5

SELECT Lname, Fname


FROM EMPLOYEE E
WHERE (SELECT W.Pno
FROM WORKS_ON W
WHERE E.Ssn = W.Essn)
CONTAINS
(SELECT P.Pnumber
FROM PROJECT P
WHERE P.Dnum=5)
Nested Queries
List names of all projects
controlled
by department 5 or department 7
SELECT P.Pname
FROM PROJECT P
WHERE P.Dnum IN (5,7)

explicit set of values


SELECT: Syntax Summary
SELECT <attribute and function list>
FROM <table list> required
WHERE <condition>
GROUP BY <grouping attributes>
HAVING <group condition> optional
ORDER BY <attribute list>
SELECT: conceptual execution
1.FROM: cross product of tables
2.WHERE: select tuples
3.GROUP BY: group tuples
4.HAVING: filter groups
5.SELECT: project attributes and apply aggregates
6.ORDER BY: sort the tuples

This is not an efficient way to execute the query,


simply a way to define the meaning of the query conceptually.
EXERCISE 1: Queries
1.First and last name of employees who have no supervisor.
2.First and last name of employees supervised
by Franklin Wong.
3.Last name of employees who have dependents.
4.Last name of employees who have daughters.
5.Last name of employees in department 5 who
work more than 10 hours/week on ProductX.
6.Last name of supervisors of employees in department 5
who work more than 10 hours/week on ProductX.
7.First and last names of all department managers.
8.Salaries of all employees
who have worked on the Reorganization project.
9.SSN of all employees who have worked on a project
that is controlled by a department different
than the department that they are assigned to.
10.Last name of all employees who are not married.
EXERCISE 2: Queries
1.List all airplane types that can land
at any airport in San Francisco.
2.List the ids and number of seats for all airplanes
that can land at any airport in Chicago.
3.List the name and phone number of all customers
with a seat reserved on a flight
that leaves Chicago O’Hara airport (ORD)
on October 31, 2008.
4.List all airlines that have seats available for flights
leaving Los Angeles (LAX) on September 25, 2008.
5.List all airlines that operate
at San Jose International Airport (SJC).
EXERCISE 3: Queries
1.Count the number of overdue books.

2.How many books by author Harry Crews are in the


database?

3.Determine the number of library cards assigned


to each borrower phone number.

4.Find names of all borrowers


who do not have any book loans.

5.Do any library branches have every book?


EXERCISE 1: Schema
EXERCISE 1:
Instance
Exercise 2: Schema
EXERCISE 3:
Schema

You might also like