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

Lecture 11

The document discusses SQL queries and clauses including SELECT, FROM, WHERE, and JOIN. It explains how to select specific columns, filter rows based on conditions, join tables, and rename or calculate selected values. Various operators, functions, and join types are covered to demonstrate the capabilities and syntax of SQL queries.

Uploaded by

Rana Gaballah
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views

Lecture 11

The document discusses SQL queries and clauses including SELECT, FROM, WHERE, and JOIN. It explains how to select specific columns, filter rows based on conditions, join tables, and rename or calculate selected values. Various operators, functions, and join types are covered to demonstrate the capabilities and syntax of SQL queries.

Uploaded by

Rana Gaballah
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 41

CSE 480: Database Systems

Lecture 11: SQL

1
SQL Query

SELECT <attribute list>


FROM <table list>
WHERE <condition that must be satisfied by a tuple>

– In MySQL, FROM and WHERE clauses are optional

– Example:

2
SELECT Clause

SELECT <attribute list>

 Attribute list may include


– * (wildcard)
– Keywords such as AS and DISTINCT
– Arithmetic expression
– String functions
– Boolean expression

3
Wildcard(*) in SELECT-Clause

 Retrieve the values for all columns of the selected tuples

4
AS in SELECT-Clause

 Rename the columns in query result


 Example: Find the names of employees who earn more
than their supervisors

SELECT E.FNAME AS EMP_FNAME, E.LNAME AS EMP_LNAME


FROM EMPLOYEE E, EMPLOYEE S
WHERE E.SUPERSSN=S.SSN AND E.SALARY >
S.SALARY;

Output: EMP_FNAME EMP_LNAME

5
DISTINCT in SELECT-Clause

 Eliminate duplicate tuples in query result

6
Arithmetic Expression in SELECT-Clause

 Query: Show the effect of giving employees a 10% raise

7
String functions in SELECT-Clause

8
String functions in SELECT-Clause

9
String functions in SELECT-Clause

For more string functions, go to


http://dev.mysql.com/doc/refman/4.1/en/string-functions.html

10
Boolean Expression in SELECT-Clause

11
FROM Clause

SELECT <attribute list>


FROM <table list>

 Table list may include


– Names of 1 or more tables
– Subquery for joined tables

12
Joined Relations in FROM-Clause
 Query 1: Retrieve the name and address of all employees who work
for the 'Research' department

SELECT Fname, Lname, Address


FROM EMPLOYEE, DEPARTMENT
WHERE Dname='Research' AND Dno=Dnumber

is equivalent to:

SELECT Fname, Lname, Address


FROM (EMPLOYEE JOIN DEPARTMENT ON Dno=Dnumber)
WHERE Dname='Research'

13
Joined Relations in FROM-Clause

 Many types of Join


– regular JOIN
– NATURAL JOIN
– CROSS JOIN
– LEFT OUTER JOIN
– RIGHT OUTER JOIN,
– etc

14
JOIN

R SELECT *
FROM R JOIN S on R.Id = S. Id S
Id Name
Id Value
111 John
foreach row r in table R 111 B
222 Mary
foreach row s in table S 111 A
333 Bill
if r.Id = s.Id then 222 A
444 Joe
output the merged
row of r and s

Id Name Id Value
111 John 111 B
111 John 111 A
222 Mary 222 A

15
JOIN – Example

Student Transcript
Id Name Addr Status StudId CrsCode Sem Grade
111 John ….. ….. 111 CSE305 S00 B
222 Mary ….. ….. 111 CSE306 S99 A
333 Bill ….. ….. 222 CSE304 F99 A
444 Joe ….. …..

SELECT * FROM Student JOIN Transcript on Id = StudId


Id Name Addr Status StudId CrsCode Sem Grade
111 John ….. ….. 111 CSE305 S00 B
111 John ….. ….. 111 CSE306 S99 A
222 Mary ….. ….. 222 CSE305 F99 A

Produces columns (attributes) with identical values, which is redundant


16
Natural Join

 Join condition equates all attributes with the same name


 Duplicate columns are automatically eliminated from result

R SELECT *
FROM R NATURAL JOIN S S
Id Name
foreach row r in table R Id Value
111 John
foreach row s in table S 111 B
222 Mary Examine their common attributes 111 A
333 Bill If their values are the same, then 222 A
444 Joe merge the rows while removing
their duplicate columns

Id Name Value
111 John B
111 John A
222 Mary A
17
Natural Join
Join attribute must have the same name (Id)
Student Transcript2
Id Name Addr Status Id CrsCode Sem Grade
111 John ….. ….. 111 CSE305 S00 B
222 Mary ….. ….. 111 CSE306 S99 A
333 Bill ….. ….. 222 CSE304 F99 A
444 Joe ….. …..

SELECT * FROM Student NATURAL JOIN Transcript2


Id Name Addr Status CrsCode Sem Grade
111 John ….. ….. CSE305 S00 B Duplicate attribute
111 John ….. ….. CSE306 S99 A (Id) was removed
222 Mary ….. ….. CSE305 F99 A

18
Cross Join

R SELECT *
FROM R CROSS JOIN S S
Id Name
Id Value
111 John
foreach row r in table R 111 B
222 Mary
foreach row s in table S 111 A
333 Bill
output the merged row r and s 222 A
444 Joe

Id Name Id Value
111 John 111 B
111 John 111 A
111 John 222 A
Output has 12 rows
… … … …
444 Joe 222 A
19
Left Outer Join
SELECT *
R FROM R LEFT OUTER JOIN S S
Id Name ON R.Id = S.Id
Id Value
111 John foreach row r in table R 111 B
222 Mary foreach row s in table S. 111 A
333 Bill if r.Id = S.Id then
222 A
444 Joe output the merged row r and s
if row r is not merged with any rows in S
output row r with NULL values for s

Id Name Id Value
111 John 111 B
111 John 111 A Output has 5 rows
222 Mary 222 A
333 Bill NULL NULL
444 Joe NULL NULL
20
Left Outer Join - Example

 Retrieve the name of all employees and their supervisors

SELECT E.Fname, E.Lname, S.Fname, S.Lname


FROM (EMPLOYEE E LEFT OUTER JOIN
EMPLOYEE S ON E.SUPERSSN=S.SSN)

21
Right Outer Join
SELECT *
R FROM R RIGHT OUTER JOIN S S
Id Name ON R.Id = S.Id
Id Value
111 John foreach row s in table S 111 B
222 Mary foreach row r in table R 111 A
333 Bill if r.Id = S.Id then
555 A
444 Joe output the merged row r and s
if row s is not merged with any rows in R
output row s with NULL values for r

Id Name Id Value
111 John 111 B
111 John 111 A Output has 3 rows
NULL NULL 555 A

22
WHERE-Clause

WHERE <condition>

 Selection condition is a Boolean expression


– Simple selection condition:
 <attribute> operator <constant>
 <attribute> operator <attribute>
 <attribute> operator <set> or <attribute> operator <relation>

– Complex conditions:
 <condition> AND <condition>
 <condition> OR <condition>
 NOT <condition>

23
Boolean Expression in WHERE-Clause

 <attribute> operator <constant>


 <attribute> operator <attribute>

– Operator: =, >, <, >=, <=, <> (not equal to)


– Applicable to integers, floats, strings, dates, etc. (except for
NULL)

SELECT *
FROM EMPLOYEE
WHERE SSN > SUPERSSN AND SALARY > 49999.99
AND MINIT='B' AND LNAME='SMITH'
AND BDATE >= '1980-01-01';

24
Substring Comparison in WHERE-Clause

 Find employees who live in “Houston, TX”.

 Use the LIKE operator to compare partial strings

 Two reserved characters are used:


– % matches an arbitrary number of characters
– _ matches a single arbitrary character
25
Substring Comparison

 Query: Retrieve all employees whose address is in


Houston, Texas.

SELECT FNAME, LNAME


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

26
Substring Comparison

 Query: Retrieve all employees who were born during the


1950s.

Q26: SELECT FNAME, LNAME


FROM EMPLOYEE
WHERE BDATE LIKE '195_ - _ _ - _ _‘;

27
Arithmetic Expression in WHERE-Clause

 Query: Retrieve the names of employees who earn more


than half the salary of their supervisors

SELECT E.FName, E.Lname


FROM EMPLOYEE AS E, EMPLOYEE AS S
WHERE E.Salary > S.Salary/2
AND E.SuperSSN = S.SSN;

28
Arithmetic Expression in WHERE-Clause

 Between comparison operator

 Query: Retrieve the first and last names of employees in


department 5 whose salary is between $30,000 and
$40,000.

SELECT Fname, Lname


FROM EMPLOYEE
WHERE (Salary BETWEEN 30000 AND 40000)
AND Dno = 5

29
UNSPECIFIED WHERE-clause

 If there is only one relation in the FROM-clause and there


is no join condition, this implies all tuples of the relation
are selected

SELECT SSN
FROM EMPLOYEE;

 If more than one relation is specified in the FROM-clause


and there is no join condition, then the CARTESIAN
PRODUCT (Cross Join) of tuples is selected

SELECT SSN, DNAME


FROM EMPLOYEE, DEPARTMENT;

30
NULLS IN SQL QUERIES

 Cannot use equality (=) comparison to check for null values

 Query: Retrieve the names of employees who do not have


supervisors
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE SUPERSSN IS
NULL;
 Query: Retrieve the names of employees who have supervisors

SELECT FNAME, LNAME


FROM EMPLOYEE
WHERE SUPERSSN IS NOT
NULL;
31
SET OPERATIONS

 SQL has directly incorporated some set operations


– UNION
– INTERSECT
– MINUS or EXCEPT

 The resulting relations of these set operations are sets of tuples;


duplicate tuples are eliminated from the result

 The set operations are applicable to union compatible relations


– the two SQL relations must have the same attributes and the attributes
must appear in the same order

 Note: MySQL supports only UNION; Oracle supports all 3 set


operations

32
Example in Oracle

Duplicate rows are eliminated

Not available
in MySQL

33
Example

 Query: List the names of projects that involve an


employee whose last name is 'Smith' as a worker or as a
manager of the department that controls the project

34
Example

 Query: List the names of 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');

35
Example

 Query: List the first name and last name of employees


who do not work on any project

36
Example

 Query: List the first name and last name of employees


who do not work on any project

(SELECT Fname, Lname


FROM EMPLOYEE)
MINUS
(SELECT Fname, Lname
FROM WORKS_ON, EMPLOYEE
WHERE ESSN=SSN);

Caution: Not applicable in MySQL


(see slide 40 on how to write this query in MySQL)

37
IN Operator

v IN W

 The comparison operator IN compares a value v with a


set of values W, and evaluates to TRUE if v is one of the
elements in W. This is SET membership test.

 Examples:
– 3 in {1, 2, 3} TRUE
– 0 in {1, 2, 3} FALSE

38
IN Operator

 Query: Retrieve the social security numbers of all


employees who work on project number 1, 2, or 3

SELECT DISTINCT ESSN


FROM WORKS_ON
WHERE (PNO = 1) OR (PNO = 2) OR (PNO = 3);

Using IN Operator:

SELECT DISTINCT ESSN


FROM WORKS_ON
WHERE PNO IN (1, 2, 3);

39
Example

 Query: List the first name and last name of employees


who do not work on any project

SELECT Fname, Lname


FROM EMPLOYEE
WHERE SSN NOT IN
(SELECT ESSN FROM WORKS_ON);

40
Exercise

 Find the names of supervisors who are also managers


 Find the names of employees who are not supervisors
 Find the names of supervisors who supervise exactly one
employee

 Try to write it in two ways:


– Using IN operator
– Using SET operations (UNION, INTERSECT, MINUS)

41

You might also like