Structured Query Language Introduction. Basic Select SELECT lname, fname, phone FROM employees;...

52
Structured Query Language Introduction

Transcript of Structured Query Language Introduction. Basic Select SELECT lname, fname, phone FROM employees;...

Structured Query Language

Introduction

Basic Select

SELECT lname, fname, phone FROM employees;

Employees Table

EMPIDEMPID LNAME FNAME DEPTDEPT PHONE SALARYSALARY

2323 Jones Mark ITRITR 555-1087 4500045000

2525 Smith Sara FINCFINC 555-2222 4900049000

2626 Billings David ACTGACTG 555-4356 4200042000

3131 Dance Ivanna ACTGACTG 444-4887 6000060000

3232 Jones Mary ITRITR 555-8745 7000070000

3535 Barker Bob ACTGACTG 555-6565 4400044000

3636 Woods Robin ITRITR 555-9812 9000090000

3737 Jones Mary FINCFINC 555-1234 5600056000

SEXSEX

MM

FF

MM

FF

FF

MM

MM

FF

Where Clause

SELECT lname, fname, phone FROM employees WHERE dept = ‘ACTG’;

Employees Table

EMPIDEMPID LNAME FNAME DEPT PHONE SALARYSALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 4500045000

2525 SmithSmith SaraSara FINC 555-2222555-2222 4900049000

2626 Billings David ACTG 555-4356 4200042000

3131 Dance Ivanna ACTG 444-4887 6000060000

3232 JonesJones MaryMary ITR 555-8745555-8745 7000070000

3535 Barker Bob ACTG 555-6565 4400044000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 9000090000

3737 JonesJones MaryMary FINC 555-1234 5600056000

SEXSEX

MM

FF

MM

FF

FF

MM

MM

FF

Virtual Fields

SELECT lname, fname, phone, salary/12 FROM employees WHERE dept = ‘ACTG’;

Employees Table

EMPIDEMPID LNAME FNAME DEPT PHONE SALARYSALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 4500045000

2525 SmithSmith SaraSara FINC 555-2222555-2222 4900049000

2626 Billings David ACTG 555-4356 4200042000

3131 Dance Ivanna ACTG 444-4887 6000060000

3232 JonesJones MaryMary ITR 555-8745555-8745 7000070000

3535 Barker Bob ACTG 555-6565 4400044000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 9000090000

3737 JonesJones MaryMary FINC 555-1234 5600056000

SEXSEX

MM

FF

MM

FF

FF

MM

MM

FF

SALARY/12

3500

5000

3666

Naming Virtual Fields

SELECT lname, fname, phone, salary/12 AS MonthlySal FROM employees WHERE dept = ‘ACTG’;

Employees Table

EMPIDEMPID LNAME FNAME DEPT PHONE SALARYSALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 4500045000

2525 SmithSmith SaraSara FINC 555-2222555-2222 4900049000

2626 Billings David ACTG 555-4356 4200042000

3131 Dance Ivanna ACTG 444-4887 6000060000

3232 JonesJones MaryMary ITR 555-8745555-8745 7000070000

3535 Barker Bob ACTG 555-6565 4400044000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 9000090000

3737 JonesJones MaryMary FINC 555-1234 5600056000

SEXSEX

MM

FF

MM

FF

FF

MM

MM

FF

MonthlySal

3500

5000

3666

Order By Clause

SELECT lname, fname, phone, salary/12 as MonthlySal FROM employees WHERE dept = ‘ACTG’ ORDER BY MonthlySal Desc

LNAME FNAME PHONE

Billings David 555-4356

Dance Ivanna 444-4887

Barker Bob 555-6565

MonthlySal

3500

5000

3666

Order By Clause (multiple keys)

SELECT lname, fname, phone, dept, salary FROM employees ORDER BY Dept ASC, Salary DESC

LNAME FNAME DEPTPHONE SALARY

Jones Mark ITR555-1087 45000

Smith Sara FINC555-2222 49000

Billings David ACTG555-4356 42000

Dance Ivanna ACTG444-4887 60000

Jones Mary ITR555-8745 70000

Barker Bob ACTG555-6565 44000

Woods Robin ITR555-9812 90000

Jones Mary FINC555-1234 56000

primary sort key secondary sort key

“Like”

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 45000

2525 SmithSmith Sara FINCFINC 555-2222555-2222 4900049000

2626 BillingsBillings David ACTGACTG 555-4356555-4356 4200042000

3131 DanceDance Ivanna ACTGACTG 444-4887444-4887 6000060000

32 Jones Mary ITR 555-8745 70000

3535 BarkerBarker Bob ACTGACTG 555-6565555-6565 4400044000

3636 WoodsWoods Robin ITRITR 555-9812555-9812 9000090000

37 Jones Mary FINC 555-1234 56000

Employees Table

SEX

M

FF

MM

FF

F

MM

MM

F

SELECT * FROM employees WHERE fname LIKE ‘M%’;

Combining Conditions

Retrieve all Columns for employees working in ITR that have a salary less than 50000.

Combining Conditions

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 45000

2525 SmithSmith SaraSara FINC 555-2222555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 42000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 60000

3232 JonesJones MaryMary ITR 555-8745555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 44000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 90000

3737 JonesJones MaryMary FINC 555-1234555-1234 56000

Employees Table

SEX

M

FF

MM

FF

FF

MM

MM

FF

SELECT * FROM employees WHERE dept = ‘ITR’ AND salary < 50000;

Combining Conditions:English is not very structured

Retrieve all Columns for all employees that work in the

finance and ITR departments.

Combining Conditions

EMPID LNAME FNAME DEPT PHONE SALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 4500045000

2525 SmithSmith SaraSara FINC 555-2222555-2222 4900049000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 4200042000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 6000060000

3232 JonesJones MaryMary ITR 555-8745555-8745 7000070000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 4400044000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 9000090000

3737 JonesJones MaryMary FINC 555-1234555-1234 5600056000

Employees Table

SEX

MM

FF

MM

FF

FF

MM

MM

FF

SELECT * FROM employees WHERE dept = ‘ITR’ AND dept=‘FINC’;

Combining Conditions

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 45000

25 Smith Sara FINC 555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 4200042000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 6000060000

32 Jones Mary ITR 555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 4400044000

36 Woods Robin ITR 555-9812 90000

37 Jones Mary FINC 555-1234 56000

Employees Table

SEX

M

F

MM

FF

F

MM

M

F

SELECT * FROM employees WHERE dept = ‘ITR’ OR dept=‘FINC’;

Combining Conditions:Order of Operation

Retrieve all Columns for all employees that work in either the finance or ITR departments and that also make less than $50000.

Combining Conditions

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 45000

25 Smith Sara FINC 555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 42000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 60000

32 Jones Mary ITR 555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 44000

36 Woods Robin ITR 555-9812 90000

3737 JonesJones MaryMary FINCFINC 555-1234555-1234 56000

Employees Table

SEX

M

F

MM

FF

F

MM

M

FF

SELECT * FROM employees WHERE dept = ‘ITR’ OR dept=‘FINC’ and salary < 50000

Combining Conditions

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 45000

25 Smith Sara FINC 555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 42000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 60000

3232 JonesJones MaryMary ITR 555-8745555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 44000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 90000

3737 JonesJones MaryMary FINC 555-1234555-1234 56000

Employees Table

SEX

M

F

MM

FF

FF

MM

MM

FF

SELECT * FROM employees WHERE (dept = ‘ITR’ OR dept=‘FINC’) and salary < 50000

IN comparator

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 45000

25 Smith Sara FINC 555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 4200042000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 6000060000

32 Jones Mary ITR 555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 4400044000

36 Woods Robin ITR 555-9812 90000

37 Jones Mary FINC 555-1234 56000

Employees Table

SEX

M

F

MM

FF

F

MM

M

F

SELECT * FROM employees WHERE dept IN(‘ITR’,’FINC’);

Distinct Key Word

EMPID LNAME FNAME DEPT PHONE SALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 4500045000

2525 SmithSmith SaraSara FINC 555-2222555-2222 4900049000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 4200042000

3131 DanceDance IvannaIvanna ACTG 444-4887444-4887 6000060000

3232 JonesJones MaryMary ITR 555-8745555-8745 7000070000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 4400044000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 9000090000

3737 JonesJones MaryMary FINC 555-1234555-1234 5600056000

Employees Table

SEX

MM

FF

MM

FF

FF

MM

MM

FF

SELECT DISTINCT dept FROM employees;

Analytic Functions

EMPID LNAME FNAME DEPT PHONE SALARY

2323 JonesJones MarkMark ITRITR 555-1087555-1087 45000

2525 SmithSmith SaraSara FINCFINC 555-2222555-2222 49000

2626 BillingsBillings DavidDavid ACTGACTG 555-4356555-4356 42000

3131 DanceDance IvannaIvanna ACTGACTG 444-4887444-4887 60000

3232 JonesJones MaryMary ITRITR 555-8745555-8745 70000

3535 BarkerBarker BobBob ACTGACTG 555-6565555-6565 44000

3636 WoodsWoods RobinRobin ITRITR 555-9812555-9812 90000

3737 JonesJones MaryMary FINCFINC 555-1234555-1234 56000

Employees Table

SEX

MM

FF

MM

FF

FF

MM

MM

FF

SELECT AVG(salary) FROM employees;

57000

AVG(SALARY)

SQL Analytic Functions

AVG( )MIN( )MAX( )SUM( )

COUNT( )VAR()STD()

Group Functions

EMPID LNAME FNAME DEPT PHONE SALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 45000

2525 SmithSmith SaraSara FINC 555-2222555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 420003131 DanceDance IvannaIvanna ACTG 444-4887444-4887 60000

3232 JonesJones MaryMary ITR 555-8745555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 44000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 90000

3737 JonesJones MaryMary FINC 555-1234555-1234 56000

Employees TableSEX

MM

FF

MMFF

FF

MM

MM

FF

SELECT dept, AVG(salary) FROM employees GROUP BY dept;

AVG(SALARY)

48666

52500

68333

Grouping by Multiple Attributes

DEPT

FINC

ACTGACTG

ITRITR

SEX

F

MF

FM

SELECT dept, sex, AVG(salary) FROM employees GROUP BY dept, sex;

AVG(SALARY)

60000

52500

67500

43000

70000

FINC M No male finance employees

Having ClauseBase Table

Inter. Result Set 1

WHERE

Inter. Result Set 2

GROUP BY

Inter. Result Set 3

HAVING

Final Results

ORDER BY

Having Clause (example)

EMPID LNAME FNAME DEPT PHONE SALARY

2323 JonesJones MarkMark ITR 555-1087555-1087 45000

2525 SmithSmith SaraSara FINC 555-2222555-2222 49000

2626 BillingsBillings DavidDavid ACTG 555-4356555-4356 420003131 DanceDance IvannaIvanna ACTG 444-4887444-4887 60000

3232 JonesJones MaryMary ITR 555-8745555-8745 70000

3535 BarkerBarker BobBob ACTG 555-6565555-6565 44000

3636 WoodsWoods RobinRobin ITR 555-9812555-9812 90000

3737 JonesJones MaryMary FINC 555-1234555-1234 56000

Employees TableSEX

MM

FF

MMFF

FF

MM

MM

FF

SELECT dept, AVG(salary) FROM employees GROUP BY dept HAVING AVG(salary)<50000;

AVG(SALARY)

48666

52500

68333

Nested QueriesGroup functions are likely candidates for Nested Queries.For Example:

SELECT lname, fname, phone, dept, salary FROM employees WHERE salary = (Select max(salary)

from employees);

The above query provides information on the employee with the highest salary. The inner query (shown in blue) will execute first and provide a numeric value which can be used to evaluate the condition on the outer query.

Nested Queries (Example 2)A nested query can also be created by replacing the table name in a WHERE clause with a subquery. For example:

SELECT count(dept)FROM (SELECT dept, avg(salary)

FROM employees GROUP BY dept HAVING avg(salary) > 40000)

The above query provides the number of departments that have an average salary greater than $40,000. The inner query produces a table. The outer query counts the rowsIn that table.

Retrieving Info from Multiple Tables

Programs TableEMPID LANGUAGE

2323

32

233132

PROFICIENCY

COBOL GOOD

SQLSQL

SQLJAVA

JAVA GOOD

GOOD

EXCELLENTEXCELLENTEXCELLENT

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 4500025 Smith Sara FINC 555-2222 5500026 Billings David ACTG 555-4356 4200031 Dance Ivanna ACTG 444-4887 6000032 Jones Mary ITR 555-8745 7000035 Barker Bob ACTG 555-6565 4400036 Woods Robin ITR 555-9812 9000037 Jones Mary FINC 555-1234 56000

Employees TableSEX

MFMFFMMF

3232

37

363636

VB GOOD

VBSQL

COBOLJAVA

COBOL EXCELLENT

GOOD

EXCELLENTEXCELLENTEXCELLENT

NAME

COBOL

SQLJAVA

VB

FULLNAME

COmmon Business Oriented Language

Structured Query LanguageJAVA

Visual Basic

Languages Table37 SQL FAIR

Key Relational Operators• Join (Product)

– Inner Join and Natural Inner Join– Outer Join and Natural Outer Join– Cross Join

• Intersect• Minus (Difference)• Union• Divide (not implemented by most DBMS)

Primary Key Foreign Key Pairs: The Basis for Joins

Programs TableEMPID LANGUAGE

2323

32

233132

PROFICIENCY

COBOL GOOD

SQLSQL

SQLJAVA

JAVA GOOD

GOOD

EXCELLENTEXCELLENTEXCELLENT

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 4500025 Smith Sara FINC 555-2222 5500026 Billings David ACTG 555-4356 4200031 Dance Ivanna ACTG 444-4887 6000032 Jones Mary ITR 555-8745 7000035 Barker Bob ACTG 555-6565 4400036 Woods Robin ITR 555-9812 9000037 Jones Mary FINC 555-1234 56000

Employees TableSEX

MFMFFMMF

3232363636

VB GOOD

VBSQL

JAVA

COBOL EXCELLENTEXCELLENTEXCELLENTEXCELLENT

NAME

COBOL

SQLJAVA

VB

FULLNAME

COmmon Business Oriented Language

Structured Query LanguageJAVA

Visual Basic

Languages Table37 COBOL GOOD37 SQL FAIR

Query Illustrating Join

Programs TableEMPID LANGUAGE

2323

32

233132

PROFICIENCY

COBOL GOOD

SQLSQL

SQLJAVA

JAVA GOOD

GOOD

EXCELLENTEXCELLENTEXCELLENT

Employees Table

3232363636

VB GOOD

VBSQL

JAVA

COBOL EXCELLENTEXCELLENTEXCELLENTEXCELLENT

SELECT language, employees.empid, lname, fname, phone FROM programs INNER JOIN employees ON programs.empID= employees.empID

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 4500025 Smith Sara FINC 555-2222 5500026 Billings David ACTG 555-4356 4200031 Dance Ivanna ACTG 444-4887 6000032 Jones Mary ITR 555-8745 7000035 Barker Bob ACTG 555-6565 4400036 Woods Robin ITR 555-9812 9000037 Jones Mary FINC 555-1234 56000

SEX

MFMFFMMF

37 COBOL GOOD37 SQL FAIR

Join SyntaxPrograms TableEMPID LANGUAGE

2323

32

233132

PROFICIENCYPROFICIENCY

COBOL GOODGOOD

SQLSQL

SQLJAVA

JAVA GOODGOOD

GOODGOOD

EXCELLENTEXCELLENTEXCELLENTEXCELLENTEXCELLENTEXCELLENT

EMPID LNAME FNAME DEPTDEPT PHONE SALARYSALARY

23 Jones Mark ITRITR 555-1087 450004500025 SmithSmith SaraSara FINCFINC 555-2222555-2222 550005500026 BillingsBillings DavidDavid ACTGACTG 555-4356555-4356 420004200031 Dance Ivanna ACTGACTG 444-4887 600006000032 Jones Mary ITRITR 555-8745 700007000035 BarkerBarker BobBob ACTGACTG 555-6565555-6565 440004400036 Woods Robin ITRITR 555-9812 900009000037 Jones Mary FINCFINC 555-1234 5600056000

Employees Table

SEXSEX

MMFFMMFFFFMMMMFF

3232

37

363636

VB GOODGOOD

VBSQL

COBOLJAVA

COBOL EXCELLENTEXCELLENT

GOODGOOD

EXCELLENTEXCELLENTEXCELLENTEXCELLENTEXCELLENTEXCELLENT

SELECT employees.empid, language, lname, fname, phone FROM programs INNER JOIN employees ON programs.empID= employees.empID

37 SQL FAIRFAIR

Initial result set before projection and selection

Programs Table Inner Join Employees TableEMPID LANGUAGE

2323

32

233132

PROFICIENCY

COBOL GOOD

SQLSQL

SQLJAVA

JAVA GOOD

GOOD

EXCELLENTEXCELLENTEXCELLENT

3232

37

363636

VB GOOD

VBSQL

COBOLJAVA

COBOL EXCELLENT

GOOD

EXCELLENTEXCELLENTEXCELLENT

SELECT * FROM programs INNER JOIN employees ON programs.empID= employees.empID

EMPID LNAME FNAME DEPT PHONE SALARY

31 Dance Ivanna ACTG 444-4887 6000032 Jones Mary ITR 555-8745 70000

37 Jones Mary FINC 555-1234 56000

SEX

FF

F

23 Jones Mark ITR 555-1087 45000M23 Jones Mark ITR 555-1087 45000M

32 Jones Mary ITR 555-8745 70000F32 Jones Mary ITR 555-8745 70000F32 Jones Mary ITR 555-8745 70000F36 Woods Robin ITR 555-9812 90000M36 Woods Robin ITR 555-9812 90000M36 Woods Robin ITR 555-9812 90000M

23 Jones Mark ITR 555-1087 45000M

37 SQL FAIR 37 Jones Mary FINC 555-1234 56000F

Join Result Set

LANGUAGE

COBOL

SQLSQL

SQLJAVA

JAVA

LNAME FNAME PHONE

Jones Mark 555-1087

Dance Ivanna 444-4887Jones Mary 555-8745

Woods Robin 555-9812

Jones Mary 555-1234

VB

VBSQL

COBOLJAVA

COBOL

SELECT language, employees.empid, lname, fname, phone FROM programs INNER JOIN employees ON programs.empID = employees.empID

Jones Mark 555-1087Jones Mark 555-1087

Jones Mary 555-8745Jones Mary 555-8745Jones Mary 555-8745

23

3132

36

37

EMPID

Woods Robin 555-9812Woods Robin 555-9812

3636

2323

323232

Jones Mary 555-1234SQL 37

Further Selection of Joined Data

LANGUAGE

SQLSQLSQL

LNAME FNAME PHONE

Dance Ivanna 444-4887

Jones Mary 555-1234SQLSQL

SELECT language, employees.empid, lname, fname, phone FROM programs INNER JOIN employees ON programs.empID = employees.empID WHERE Language = ‘SQL’

Jones Mark 555-1087

Jones Mary 555-874531

37

EMPID

Woods Robin 555-981236

23

32

OLD Inner Join SyntaxLANGUAGE

SQLSQLSQL

LNAME FNAME PHONE

Dance Ivanna 444-4887

Jones Mary 555-1234SQLSQL

SELECT language, employees.empid, lname, fname, phone FROM programs, employees WHERE programs.empID= employees.empID AND Language = ‘SQL’

Jones Mark 555-1087

Jones Mary 555-874531

37

EMPID

Woods Robin 555-981236

23

32

SELECT language, employees.empid, lname, fname, phone FROM programs INNER JOIN employees ON programs.empID= employees.empID WHERE Language = ‘SQL’

OLD

NEW

Three Table Inner Join Syntax

SELECT programs.empid, name, fullname, phone FROM programs, employees, languages WHERE programs.empID= employees.empID AND languages.name = programs.language AND Proficiency = ‘Excellent’

SELECT programs.empid, name, fullname, phone FROM programs INNER JOIN employees ON programs.empID= employees.empID INNER JOIN languages ON languages.name = programs.language WHERE Proficiency = ‘Excellent’

OLD

NEW

New Natural Join Syntax (if column names are the same)

LANGUAGE

SQLSQLSQL

LNAME FNAME PHONE

Dance Ivanna 444-4887

Jones Mary 555-1234SQLSQL

SELECT language, empid, lname, fname, phone FROM programs, employees WHERE programs.empID= employees.empID AND Language = ‘SQL’

Jones Mark 555-1087

Jones Mary 555-874531

37

EMPID

Woods Robin 555-981236

23

32

SELECT language, empid, lname, fname, phone FROM programs NATURAL INNER JOIN employees WHERE Language = ‘SQL’

OLD

NEW

Outer Join Result Set

LANGUAGE

COBOL

SQL

SQL

SQLJAVA

JAVA

LNAME FNAME PHONE

Jones Mark 555-1087

Dance Ivanna 444-4887Jones Mary 555-8745

Woods Robin 555-9812

Jones Mary 555-1234

VB

VBSQL

COBOLJAVA

COBOL

SELECT language, employees.empid, lname, fname, phone from programs RIGHT OUTER JOIN employees ON programs.empID = employees.empID

Jones Mark 555-1087Jones Mark 555-1087

Jones Mary 555-8745Jones Mary 555-8745Jones Mary 555-8745

23

3132

36

37

EMPID

Woods Robin 555-9812Woods Robin 555-9812

3636

2323

323232

Jones Mary 555-1234SQL 37

25 Smith Sara 555-222226 Billings David 555-4356

35 Barker Bob 555-6565

Outer Join SyntaxLNAME FNAME COUNT(Language)

Smith Sara 0

Jones Mary 4

SELECT employees.empID, lname, fname, count(language) FROM programs, employees WHERE programs.empID(+) = employees.empID GROUP BY employees.empID, lname, fname

Jones Mark 3

Billings David 0Dance Ivanna 1

SELECT employees.empID, lname, fname, count(language) FROM programs RIGHT OUTER JOIN employees ON programs.empID = employees.empID GROUP BY employees.empID, lname, fname

OLD

NEW

(Note: There is new FULL OUTER JOIN also which is a simultaneous LEFT and RIGHT outer JOIN.)

Jones Mary 2

Barker Bob 0Woods Robin 3

EMPID

2325263132353637

Cross Join Syntax

SELECT lname, fname, languages.name FROM employees, languages;

SELECT lname, fname, languages.name FROM employees CROSS JOIN languages;

OLD

NEW

(e.g. JOIN every row in languages table with every row in employees table. 8x4=32 rows returned)

When not to join?

If a client program needs data from two tables that does not necessarily mean that a join should occur. Unless the data needs to be viewed as a single table it may be appropriate to simple retrieve to result sets.

Which Employees know both JAVA and COBOL?What is the Query?

Programs TableEMPID LANGUAGE

2323

32

233132

PROFICIENCY

COBOL GOOD

SQLSQL

SQLJAVA

JAVA GOOD

GOOD

EXCELLENTEXCELLENTEXCELLENT

EMPID LNAME FNAME DEPT PHONE SALARY

23 Jones Mark ITR 555-1087 4500025 Smith Sara FINC 555-2222 5500026 Billings David ACTG 555-4356 4200031 Dance Ivanna ACTG 444-4887 6000032 Jones Mary ITR 555-8745 7000035 Barker Bob ACTG 555-6565 4400036 Woods Robin ITR 555-9812 9000037 Jones Mary FINC 555-1234 56000

Employees TableSEX

MFMFFMMF

3232

37

363636

VB GOOD

VBSQL

COBOLJAVA

COBOL EXCELLENT

GOOD

EXCELLENTEXCELLENTEXCELLENT

NAME

COBOL

SQLJAVA

VB

FULLNAME

COmmon Business Oriented Language

Structured Query LanguageJAVA

Visual Basic

Languages Table37 SQL FAIR

Intersect

Consider: Set R1 { a, b, d, f, h} Set R2 {b, c, f, k, p}

Which elements are common between the two sets?

Intersect

Consider: Set R1 { a, b, d, f, h} Set R2 {b, c, f, k, p}

Which elements are common between the two sets?

ab

c

df

p

k

h

Intersect Used for Desired Query:Programmers that know JAVA and COBOL

SELECT empidFROM programsWHERE language = 'JAVA' INTERSECTSELECT empidFROM programsWHERE language = 'COBOL';

23 32

37

36

JAVA programmers

COBOL programmers

Minus Used for Desired Query:Programmers that know JAVA but not COBOL

SELECT empidFROM programsWHERE language = 'JAVA' MINUSSELECT empidFROM programsWHERE language = 'COBOL';

23 32

37

36

JAVA programmers

COBOL programmers

Minus Used for Desired Query:Programmers that know COBOL but not JAVA

SELECT empidFROM programsWHERE language = 'COBOL'; MINUSSELECT empidFROM programsWHERE language = 'JAVA'

23 32

37

36

JAVA programmers

COBOL programmers

UNION can be used to combine elements (rows) from two sets

SELECT lname, fname, phone FROM customersWHERE city = 'Radford'; UNIONSELECT lname, fname, phoneFROM employeesWHERE city = 'Radford'

Example: Construct a single list of customer and employeephone numbers for people that live in Radford.

Fieldnames do not have to match but the first set of fieldNames will be used for the result set. The fields must be ofthe same data type.

Combining Relational Operations

SELECT empid, fname, lname, count(language)FROM employees NATURAL LEFT OUTER JOIN programsGROUP BY empid, fname, lname

Like any math operations, relational operations can beCombined to handle more complex situations. Example:Give the empid, First Name, Last Name, and number ofProgramming languages knows for all employees:

In this case an OUTER JOIN has been combined with aGROUP BY operation.

Need for CASE statement

PROFICIENCY

EXCELLENT

GOOD

EXCELLENT

EXCELLENT31

32

EMPID

FAIR37

23

36

SELECT empID, proficiency FROM programs WHERE Language = 'SQL' ORDER BY proficiency;

Use of CASE statement

PROFICIENCY

EXCELLENT

GOOD

EXCELLENT

EXCELLENT31

32

EMPID

FAIR37

23

36

SELECT empID, proficiency FROM programs WHERE Language = 'SQL' ORDER BY (CASE proficiency

WHEN 'EXCELLENT' THEN 1WHEN 'GOOD' THEN 2WHEN 'FAIR' THEN 3

END);

Use of old DECODE statement

PROFICIENCY

EXCELLENT

GOOD

EXCELLENT

EXCELLENT31

32

EMPID

FAIR37

23

36

SELECT empID, proficiency FROM programs WHERE Language = 'SQL' ORDER BY DECODE(proficiency, 'EXCELLENT' , 1, 'GOOD',2, 'FAIR',3 );