SQL Playbook

All the queries in the SQL Playbook reference are available for copying and pasting so that you can run them without needing to retype..

1. A slow full toss

SELECT empfname FROM qemp WHERE deptname = 'Marketing';

2. Skinning a cat

2.1 Join (545 units)

SELECT DISTINCT itemname FROM qsale, qdept

WHERE qdept.deptname = qsale.deptname

AND deptfloor = 2;

2.2 In (8)

SELECT DISTINCT itemname FROM qsale

WHERE deptname IN

(SELECT deptname FROM qdept WHERE deptfloor = 2);

2.3 Correlated subquery (7,780)

SELECT DISTINCT itemname FROM qsale

WHERE deptname IN

(SELECT deptname FROM qdept

WHERE qdept.deptname = qsale.deptname

AND deptfloor = 2);

2.4 Exists (8,080)

SELECT DISTINCT itemname FROM qsale

WHERE EXISTS

(SELECT * FROM qdept

WHERE qsale.deptname = qdept.deptname

AND deptfloor = 2);

3. Another full toss

SELECT DISTINCT itemname FROM qsale, qdept

WHERE qsale.deptname = qdept.deptname

AND deptfloor <> 2;

4. Subtracting from all

SELECT DISTINCT itemname FROM qsale

WHERE itemname NOT IN

(SELECT DISTINCT itemname FROM qsale, qdept

WHERE qsale.deptname = qdept.deptname

AND deptfloor = 2);

5. Dividing

SELECT DISTINCT itemname FROM qitem

WHERE NOT EXISTS

(SELECT * FROM qdept WHERE deptfloor = 2

AND NOT EXISTS

(SELECT * FROM qsale

WHERE qsale.itemname = qitem.itemname

AND qsale.deptname = qdept.deptname));

SELECT qsale.itemname FROM qsale, qdept

WHERE qsale.deptname = qdept.deptname

and qdept.deptfloor = 2

GROUP BY qsale.itemname

HAVING count(distinct qdept.deptname) =

(SELECT count(distinct deptname)

from qdept where deptfloor = 2);

6. At least some number

SELECT itemname FROM qsale, qdept

WHERE qsale.deptname = qdept.deptname and deptfloor = 2

GROUP BY itemname

HAVING COUNT(DISTINCT qdept.deptname) > 1;

7. A friendly IN for an SQL traveler

SELECT empfname, empsalary FROM qemp

WHERE empno IN

(SELECT bossno FROM qemp WHERE empfname = 'Clare');

8. Joining a table with itself

SELECT wrk.empno, wrk.empfname FROM qemp wrk, qemp boss

WHERE wrk.bossno = boss.empno

AND boss.empsalary < wrk.empsalary;

9. A combination of subtract from all and a self-join

SELECT DISTINCT deptname FROM qemp

WHERE deptname <> 'Management'

AND deptname NOT IN

(SELECT wrk.deptname FROM qemp wrk, qemp boss

WHERE wrk.bossno = boss.empno

AND wrk.empsalary >= boss.empsalary);

 

10. Self-join with GROUP BY

SELECT boss.empno, boss.empfname, COUNT(*)

FROM qemp wrk, qemp boss

WHERE wrk.bossno = boss.empno

GROUP BY boss.empno, boss.empfname;

11. A self-join with two matching conditions

SELECT wrk.empfname, wrk.deptname, boss.empfname

FROM qemp wrk, qemp boss

WHERE wrk.bossno = boss.empno

AND wrk.deptname = boss.deptname;

12. Averaging with GROUP BY

SELECT deptname, AVG(empsalary) FROM qemp

GROUP BY deptname

HAVING AVG(empsalary) > 25000;

13. inner query GROUP BY and HAVING

SELECT wrk.deptname, AVG(wrk.empsalary)

FROM qemp wrk

WHERE wrk.empno NOT IN

(SELECT qdept.empno FROM qdept

WHERE wrk.empno = qdept.empno

AND wrk.deptname = qdept.deptname)

GROUP BY wrk.deptname

HAVING AVG(wrk.empsalary) > 25000;

14. An IN with GROUP BY and COUNT

SELECT empfname, empsalary FROM qemp

WHERE empno IN

(SELECT bossno FROM qemp

GROUP BY bossno HAVING COUNT(*) > 2);

15. A self-join with some conditions

SELECT wrk.empfname, wrk.empsalary, boss.empfname

FROM qemp wrk, qemp boss

WHERE wrk.bossno = boss.empno

AND wrk.deptname = 'Marketing'

AND wrk.empsalary > 25000;

16. Making comparisons

SELECT empfname, empsalary FROM qemp

WHERE empsalary >

(SELECT MAX(empsalary) FROM qemp

WHERE deptname = 'Marketing');

17. An IN with GROUP BY and SUM

18. A double divide!

SELECT DISTINCT itemname FROM qdel del

WHERE NOT EXISTS

(SELECT * FROM qspl

WHERE NOT EXISTS

(SELECT * FROM qitem WHERE itemtype = 'N'

AND NOT EXISTS

(SELECT * FROM qdel

WHERE qdel.itemname = qitem.itemname

AND qdel.splno = qspl.splno))

AND NOT EXISTS

(SELECT * FROM qdel WHERE qdel.itemname = del.itemname

AND qdel.splno = qspl.splno));

19. A slam dunk

SELECT DISTINCT qspl.splno, splname FROM qspl, qdel

WHERE qspl.splno = qdel.splno and itemname = 'Compass';

20. A 6-inch putt for a birdie

SELECT splno, splname FROM qspl

WHERE splno NOT IN

(SELECT splno FROM qdel WHERE itemname = 'Compass');

21. Making the count

SELECT DISTINCT qdel.splno, splname FROM qspl, qdel

WHERE qdel.splno = qspl.splno

AND itemname <> 'Compass'

AND qdel.splno IN

(SELECT splno FROM qdel WHERE itemname = 'Compass');

SELECT DISTINCT qdel.splno, splname FROM qspl, qdel

WHERE qdel.splno = qspl.splno

AND qdel.splno IN

(SELECT splno FROM qdel WHERE itemname = 'Compass')

GROUP BY qdel.splno, splname HAVING COUNT(DISTINCT itemname) > 1;

22. Minus and divide

SELECT deptname FROM qdept WHERE deptname NOT IN

(SELECT deptname FROM qdept

WHERE NOT EXISTS

(SELECT * FROM qitem WHERE itemtype = 'N'

AND NOT EXISTS

(SELECT * FROM qsale

WHERE qsale.deptname = qdept.deptname and

qsale.itemname = qitem.itemname)));

23. Division with copies

SELECT DISTINCT deptname FROM qdel del1

WHERE NOT EXISTS

(SELECT * FROM qdel del2

WHERE del2.deptname = del1.deptname

AND NOT EXISTS

(SELECT * FROM qsale

where del2.itemname = qsale.itemname

and del1.deptname = qsale.deptname));

SELECT DISTINCT deptname FROM qdel del1

WHERE NOT EXISTS

(SELECT * FROM qdel del2

WHERE del2.deptname = del1.deptname

AND itemname NOT IN

(SELECT itemname FROM qsale

WHERE deptname = del1.deptname));

24. A difficult pairing

SELECT splname, deptname FROM qdel del1, qspl

WHERE del1.splno = qspl.splno

AND NOT EXISTS

(SELECT * FROM qdel

WHERE qdel.deptname = del1.deptname

AND qdel.splno = del1.splno

AND itemname NOT IN

(SELECT itemname FROM qsale

WHERE qsale.deptname = del1.deptname));

25. Two divides and an intersection

SELECT itemname FROM qitem

WHERE NOT EXISTS

(SELECT * FROM qspl

WHERE NOT EXISTS

(SELECT * FROM qdel

where qdel.itemname = qitem.itemname

and qdel.splno = qspl.splno))

AND NOT EXISTS

(SELECT * FROM qdept WHERE deptname

NOT IN ('Management', 'Marketing', 'Personnel','Accounting', 'Purchasing')

AND NOT EXISTS

(SELECT * FROM qdel

where qdel.itemname = qitem.itemname

And qdel.deptname = qdept.deptname));

26. A divide with a matching condition

SELECT DISTINCT itemname FROM qsale sale

WHERE deptname IN

(SELECT deptname FROM qdept dept1

WHERE NOT EXISTS

(SELECT * FROM qdel

WHERE qdel.deptname = dept1.deptname

AND itemname NOT IN

(SELECT itemname FROM qsale

WHERE qsale.deptname = dept1.deptname)))

AND NOT EXISTS

(SELECT * FROM qsale

WHERE itemname = sale.itemname

AND deptname NOT IN

(SELECT deptname FROM qdept dept2

WHERE NOT EXISTS

(SELECT * FROM qdel

WHERE qdel.deptname = dept2.deptname

AND itemname NOT IN

(SELECT itemname FROM qsale

WHERE qsale.deptname = dept2.deptname))));

27. Restricted divide

SELECT splno, splname FROM qspl

WHERE NOT EXISTS

(SELECT * FROM qitem WHERE itemtype = 'N'

AND NOT EXISTS

(SELECT * FROM qdel

where qdel.splno = qspl.splno

and qdel.itemname = qitem.itemname));

28. A NOT IN variation on divide

SELECT splname FROM qspl

WHERE splno IN (SELECT splno FROM qdel)

AND NOT EXISTS

(SELECT * FROM qdel

WHERE qdel.splno = qspl.splno

AND itemname NOT IN

(SELECT itemname FROM qsale

WHERE deptname = 'Books'));

29. All and only

SELECT splname FROM qspl

WHERE NOT EXISTS

(SELECT * FROM qsale

WHERE deptname = 'Equipment'

AND itemname NOT IN

(SELECT itemname FROM qdel

WHERE qdel.splno = qspl.splno))

AND NOT EXISTS

(SELECT * FROM qdel

WHERE qdel.splno = qspl.splno

AND itemname NOT IN

(SELECT itemname FROM qsale

WHERE deptname = 'Equipment'));

30. Divide with an extra condition

SELECT splname FROM qspl

WHERE EXISTS (SELECT * FROM qdept

WHERE deptfloor = 2

AND NOT EXISTS (SELECT * FROM qitem

WHERE itemtype = 'C'

AND NOT EXISTS (SELECT * FROM qdel

WHERE qdel.splno = qspl.splno

AND qdel.itemname = qitem.itemname

AND qdel.deptname = qdept.deptname)));

31. At least some COUNT

SELECT qspl.splno, splname FROM qdel, qspl, qitem

WHERE itemtype = 'n'

AND qdel.splno = qspl.splno

AND qdel.itemname = qitem.itemname

GROUP BY qspl.splno, splname

HAVING COUNT(DISTINCT qdel.itemname) > 1;

32. Double divide with a restriction

CREATE VIEW v32 AS

(SELECT deptname FROM qdept

WHERE deptfloor = 2

AND NOT EXISTS (SELECT * FROM qitem

WHERE itemtype = 'R'

AND NOT EXISTS (SELECT * FROM qsale

WHERE qsale.itemname = qitem.itemname

AND qsale.deptname = qdept.deptname)));

SELECT splname FROM qspl

WHERE NOT EXISTS (SELECT * FROM qitem

WHERE itemtype = 'B'

AND NOT EXISTS (SELECT * FROM qdel

WHERE qdel.itemname = qitem.itemname

AND qdel.splno = qspl.splno

AND deptname IN (SELECT deptname FROM v32)));

33. Triple divide with an intersection

CREATE VIEW v33a AS

(SELECT deptname FROM qdept

WHERE NOT EXISTS (SELECT * FROM qitem

WHERE itemtype = 'N'

AND NOT EXISTS (SELECT * FROM qsale

WHERE qsale.deptname = qdept.deptname

AND qsale.itemname = qitem.itemname)));

CREATE VIEW v33b AS

(SELECT deptname FROM qdept

WHERE NOT EXISTS (SELECT * FROM qitem

WHERE itemtype = 'B'

AND NOT EXISTS (SELECT * FROM qdel

WHERE qdel.deptname = qdept.deptname

AND qdel.itemname = qitem.itemname)));

SELECT splname FROM qspl

WHERE NOT EXISTS (SELECT * FROM qitem

WHERE itemtype = 'B'

AND NOT EXISTS (SELECT * FROM qdel

WHERE qdel.splno = qspl.splno

AND qdel.itemname = qitem.itemname

AND EXISTS

(SELECT * FROM v33a

WHERE qdel.deptname = v33a.deptname)

AND EXISTS

(SELECT * FROM v33b

WHERE qdel.deptname = v33b.deptname)));

34. An easy one COUNT

SELECT itemname FROM qdel

GROUP BY itemname HAVING COUNT(DISTINCT splno) = 1;

35. The only one

SELECT DISTINCT qspl.splno, splname, itemname

FROM qspl, qdel del1

WHERE qspl.splno = del1.splno

AND itemname NOT IN

(SELECT itemname FROM qdel

WHERE qdel.splno <> del1.splno);

36. At least some number

SELECT qspl.splno, splname FROM qdel, qspl

WHERE qdel.splno = qspl.splno

GROUP BY qspl.splno, splname

HAVING COUNT(DISTINCT qdel.itemname) >= 10;

37. A three-table join

SELECT qitem.itemname, itemtype, qdept.deptname, deptfloor

FROM qitem, qsale, qdept

WHERE qsale.itemname = qitem.itemname

AND qsale.deptname = qdept.deptname;

38. Using NOT IN like NOT EXISTS

SELECT DISTINCT deptname FROM qdel del1

WHERE NOT EXISTS

(SELECT * FROM qdel del2

WHERE del2.deptname = del1.deptname

AND itemname NOT IN

(SELECT itemname FROM qdel del3

WHERE del3.deptname <> del1.deptname));

39. Minus after GROUP By

SELECT DISTINCT itemname FROM qdel

WHERE itemname NOT IN

(SELECT itemname FROM qdel

GROUP BY itemname, splno

HAVING COUNT(DISTINCT deptname) < 2);

40. Something to all

SELECT DISTINCT itemname FROM qdel del1

WHERE NOT EXISTS

(SELECT * FROM qdel del2

WHERE del2.itemname = del1.itemname

AND splno NOT IN

(SELECT splno FROM qdel

GROUP BY splno HAVING COUNT(DISTINCT deptname) =

(SELECT COUNT(*) FROM qdept

wHERE deptname NOT IN ('Management',

'Marketing', 'Personnel',

'Accounting', 'Purchasing'))));

41. Intersection (AND)

SELECT DISTINCT itemname FROM qitem

WHERE itemname IN

(SELECT itemname FROM qdel, qspl

WHERE qdel.splno = qspl.splno

AND splname = 'Nepalese corp.')

AND itemname IN

(SELECT itemname FROM qsale

WHERE deptname = 'Navigation');

42. Union (OR)

SELECT DISTINCT itemname FROM qitem

WHERE itemname IN

(SELECT itemname FROM qdel, qspl

WHERE qdel.splno = qspl.splno

AND splname = 'Nepalese corp.')

OR itemname IN

(SELECT itemname FROM qsale

WHERE deptname = 'Navigation');

43. Intersection/union

SELECT DISTINCT deptname FROM qsale

WHERE itemname IN

(SELECT qitem.itemname FROM qitem, qdel, qspl

WHERE qitem.itemname = qdel.itemname

AND qdel.splno = qspl.splno

AND splname = 'Nepalese corp.'

AND itemtype = 'e')

or itemname in

(SELECT itemname FROM qsale

WHERE deptname = 'Navigation');

44. Averaging with a condition

SELECT AVG(empsalary) FROM qemp

WHERE deptname = 'clothes';

45. Averaging with grouping

SELECT deptname, AVG(empsalary) FROM qemp

GROUP BY deptname;

46. Average with a join, condition, and grouping

SELECT qdept.deptname, AVG(empsalary) FROM qemp, qdept

WHERE qemp.deptname = qdept.deptname

AND deptfloor = 2

GROUP BY qdept.deptname;

47. Averaging with multiple joins

SELECT qdept.deptname, AVG(empsalary)

FROM qemp, qdept, qsale, qitem

WHERE qemp.deptname = qdept.deptname

AND qdept.deptname = qsale.deptname

AND qsale.itemname = qitem.itemname

AND itemtype = 'E'

GROUP BY qdept.deptname;

48. Complex counting

SELECT splname, COUNT(DISTINCT itemname)

FROM qdel del1, qspl

WHERE del1.splno = qspl.splno

AND NOT EXISTS

(SELECT * FROM qdept

WHERE deptname NOT IN

(SELECT deptname FROM qdel

WHERE qdel.splno = del1.splno)

AND deptname NOT IN

('Management', 'Marketing', 'Personnel',

'Accounting', 'Purchasing'))

GROUP BY splname;

49. Summing with joins and conditions

SELECT SUM(saleqty) FROM qitem, qsale, qdept

WHERE qitem.itemname = qsale.itemname

AND qdept.deptname = qsale.deptname

AND itemtype = 'E'

AND deptfloor = 2;

50. Summing with joins, conditions, and grouping

SELECT qitem.itemname, SUM(saleqty) FROM qitem, qsale, qdept

WHERE qitem.itemname = qsale.itemname

AND qdept.deptname = qsale.deptname

AND deptfloor = 2

GROUP BY qitem.itemname;

51. Advanced summing

SELECT qdel.splno, splname FROM qspl, qdel, qitem

WHERE qspl.splno = qdel.splno

AND qitem.itemname = qdel.itemname

AND (itemtype = 'C' or itemtype = 'N')

GROUP BY qdel.splno, splname HAVING SUM(delqty) > 100;

52. Comparing to the average with a join

CREATE VIEW v52(deptname, dpavgsal) AS

SELECT deptname, AVG(empsalary) FROM qemp

GROUP BY deptname;

SELECT empfname, (empsalary - dpavgsal) FROM v52, qemp

WHERE v52.deptname = qemp.deptname

AND qemp.deptname = 'Accounting';

53. Comparing to the average with a product

CREATE VIEW v53(allavgsal) AS

SELECT AVG(empsalary) FROM qemp;

SELECT empfname, (empsalary - allavgsal) FROM v53, qemp

WHERE deptname = 'Accounting';

54. Averaging with multiple grouping

SELECT qdel.splno, splname, deptname, AVG(delqty)

FROM qspl, qdel

WHERE qspl.splno = qdel.splno

GROUP BY qdel.splno, splname, deptname;

55. More than the average with grouping

SELECT deptname, AVG(empsalary) FROM qemp outt

WHERE empsalary > (SELECT AVG(empsalary) FROM qemp inn

WHERE outt.deptname = inn.deptname)

GROUP BY deptname;

56. The simplest average

SELECT AVG(empsalary) FROM qemp;

SELECT AVG(dpavgsal) FROM v52;

57. Difference from the average

SELECT empfname, empsalary,

dpavgsal, (empsalary - dpavgsal)

FROM v52, qemp

WHERE v52.deptname = qemp.deptname;

58. Averaging with multiple joins, multiple grouping, and a condition

SELECT qdel.splno, splname, qdel.itemname, AVG(delqty)

FROM qdel, qspl, qitem

WHERE qdel.splno = qspl.splno

AND qdel.itemname = qitem.itemname

AND itemtype = 'N'

GROUP BY qdel.splno, splname, qdel.itemname;

59. Detailed averaging

SELECT qdel.splno, splname, deptname, qdel.itemname, AVG(delqty)

FROM qdel, qspl, qitem

WHERE qdel.splno = qspl.splno

AND qdel.itemname = qitem.itemname

AND itemtype = 'N'

GROUP BY qdel.splno, splname, deptname, qdel.itemname;

60. Counting pairs

CREATE VIEW v60 AS

(SELECT DISTINCT splno, deptname FROM qdel, qitem

WHERE qdel.itemname = qitem.itemname

AND itemtype = 'E' );

SELECT COUNT(*) FROM v60;

61. No Booleans

SELECT COUNT(*) FROM qdept

WHERE deptfloor <> 3

and exists

(SELECT * FROM qsale, qitem

WHERE qsale.itemname = qitem.itemname

AND qsale.deptname = qdept.deptname

AND itemtype = 'C');

SELECT COUNT(*) FROM qdept

WHERE deptfloor = 3

AND EXISTS

(SELECT * FROM qsale, qitem

WHERE qsale.itemname = qitem.itemname

AND qsale.deptname = qdept.deptname

AND itemtype = 'C');

Data for tables

qsale

SALENO

saleqty

itemname

deptname

1001

2

Boots-snakeproof

Clothes

1002

1

Pith helmet

Clothes

1003

1

Sextant

Navigation

1004

3

Hat-polar explorer

Clothes

1005

5

Pith helmet

Equipment

1006

1

Pocket knife-Nile

Clothes

1007

1

Pocket knife--Nile

Recreation

1008

1

Compass

Navigation

1009

1

Geo positioning system

Navigation

1010

5

Map measure

Navigation

1011

1

Geo positioning system

Books

1012

1

Sextant

Books

1013

3

Pocket knife-Nile

Books

1014

1

Pocket knife-Nile

Navigation

1015

1

Pocket knife-Nile

Equipment

1016

1

Sextant

Clothes

1017

1

Sextant

Equipment

1018

1

Sextant

Recreation

1019

1

Sextant

Furniture

1020

1

Pocket knife-Nile

Furniture

1021

1

Exploring in 10 Easy Lessons

Books

1022

1

How to Win Foreign Friends

Books

1023

1

Compass

Books

1024

1

Pith helmet

Books

1025

1

Elephant polo stick

Recreation

1026

1

Camel saddle

Recreation

qspl

splno

splname

101

Global Books & Maps

102

Nepalese Corp.

103

All Sports Manufacturing

104

Sweatshops Unlimited

105

All Points, Inc.

106

São Paulo Manufacturing

qitem

itemname

itemtype

ITEMCOLOR

Boots-snakeproof

C

Green

Camel saddle

R

Brown

Compass

N

--

Elephant polo stick

R

Bamboo

Exploring in 10 Easy Lessons

B

--

Geo positioning system

N

--

Hammock

F

Khaki

Hat-polar explorer

C

White

How to Win Foreign Friends

B

--

Map case

E

Brown

Map measure

N

--

Pith helmet

C

Khaki

Pocket knife-Avon

E

Brown

Pocket knife-Nile

E

Brown

Safari chair

F

Khaki

Safari cooking kit

F

--

Sextant

N

--

Stetson

C

Black

Tent-2 person

F

Khaki

Tent-8 person

F

Khaki

qdept

deptname

deptfloor

DEPTPHONE

empno

Management

5

34

1

Books

1

81

4

Clothes

2

24

4

Equipment

3

57

3

Furniture

4

14

3

Navigation

1

41

3

Recreation

2

29

4

Accounting

5

35

5

Purchasing

5

36

7

Personnel

5

37

9

Marketing

5

38

2

 

qdel

DELNO

delqty

itemname

deptname

splno

51

50

Pocket knife-Nile

Navigation

105

52

10

Pocket knife-Nile

Books

105

53

10

Pocket knife-Nile

Clothes

105

54

10

Pocket knife-Nile

Equipment

105

55

10

Pocket knife-Nile

Furniture

105

56

10

Pocket knife-Nile

Recreation

105

57

50

Compass

Navigation

101

58

10

Geo positioning system

Navigation

101

59

10

Map measure

Navigation

101

60

25

Map case

Navigation

101

61

2

Sextant

Navigation

101

62

1

Sextant

Equipment

105

63

20

Compass

Equipment

103

64

1

Geo positioning system

Books

103

65

15

Map measure

Navigation

103

66

1

Sextant

Books

103

67

5

Sextant

Recreation

102

68

3

Sextant

Navigation

104

69

5

Boots-snakeproof

Clothes

105

70

15

Pith helmet

Clothes

105

71

1

Pith helmet

Clothes

101

72

1

Pith helmet

Clothes

102

73

1

Pith helmet

Clothes

103

74

1

Pith helmet

Clothes

104

75

5

Pith helmet

Navigation

105

76

5

Pith helmet

Books

105

77

5

Pith helmet

Equipment

105

78

5

Pith helmet

Furniture

105

79

5

Pith helmet

Recreation

105

80

10

Pocket knife-Nile

Navigation

102

81

1

Compass

Navigation

102

82

1

Geo positioning system

Navigation

102

83

10

Map measure

Navigation

102

84

5

Map case

Navigation

102

85

5

Compass

Books

102

86

5

Pocket knife-Avon

Recreation

102

87

5

Tent-2 person

Recreation

102

88

2

Tent-8 person

Recreation

102

89

5

Exploring in 10 Easy Lessons

Navigation

102

90

5

How to Win Foreign Friends

Navigation

102

91

10

Exploring in 10 Easy Lessons

Books

102

92

10

How to Win Foreign Friends

Books

102

93

2

Exploring in 10 Easy Lessons

Recreation

102

94

2

How to Win Foreign Friends

Recreation

102

95

5

Compass

Equipment

105

96

2

Boots-snakeproof

Equipment

105

97

20

Pith helmet

Equipment

106

98

20

Pocket knife-Nile

Equipment

106

99

1

Sextant

Equipment

106

100

3

Hat-polar explorer

Clothes

105

101

3

Stetson

Clothes

105

qemp

empno

empfname

empsalary

deptname

bossno

1

Alice

75000

Management

 

2

Ned

45000

Marketing

1

3

Andrew

25000

Marketing

2

4

Clare

22000

Marketing

2

5

Todd

38000

Accounting

1

6

Nancy

22000

Accounting

5

7

Brier

43000

Purchasing

1

8

Sarah

56000

Purchasing

7

9

Sophie

35000

Personnel

1

10

Sanjay

15000

Navigation

3

11

Rita

15000

Books

4

12

Gigi

16000

Clothes

4

13

Maggie

16000

Clothes

4

14

Paul

11000

Equipment

3

15

James

15000

Equipment

3

16

Pat

15000

Furniture

3

17

Mark

15000

Recreation

3

qdept

deptname

deptfloor

DEPTPHONE

empno

Management

5

34

1

Books

1

81

4

Clothes

2

24

4

Equipment

3

57

3

Furniture

4

14

3

Navigation

1

41

3

Recreation

2

29

4

Accounting

5

35

5

Purchasing

5

36

7

Personnel

5

37

9

Marketing

5

38

2


This page is part of the promotional and support material for Data Management (fifth edition) by Richard T. Watson
For questions and comments please contact the author

Revised: Mon, Sep 19, 2005