QBE - Computerinfo.in

advertisement
CS 222
Database Management System
Spring 2010-11
Lecture 3
Korra Sathya Babu
Department of Computer Science
NIT Rourkela
4/13/2015
Lecture 3
1
Commercial Query Languages
• RA and RC are formal and abstract Languages developed for the
Relational model in the database technology
• Many languages were commercialized taking the foundations from the
abstract query languages
– QBE
– QUEL
– SQL
4/13/2015
Lecture 3
2
Query-by-Example (QBE)
Query-by-Example (QBE)
• Developed by Moshe M. Zoolf at IBM Research
during mid 1970s (in parallel to the development of SQL)
• A graphical query language which is based on the
notion of DRC
– QBE queries can be translated to DRC directly but queries containing
aggregate operators, sorting etc cannot be converted
• Two dimensional syntax – system creates
templates of relations that are requested by users
• Queries are expressed “by example”
Query-by-Example (QBE)
• A “GUI” for expressing queries.
– Actually invented before GUIs.
– Very convenient for simple queries.
– Awkward for complex queries.
• QBE an IBM trademark.
– But has influenced many projects
– Especially PC Databases: Paradox, Access,
etc.
Syntax
• QBE Queries are posed by placing constants and variables
(example elements) into individual columns and thereby
creating an example tuple of the query result
• Variables used are domain variables
• Variable symbols are prefixed by underscore
• Commands are followed by a dot
• The field that should appear in the answer are specified by
the command P. (stands for Print (also called retrieval
command))
• Equal operator is by default . Other comparison operators
can also be used
• Link establishment between relations is done by example
elements
Syntax
• Aggregate functions and Groupings used by
adding prefixes are
–
–
–
–
–
–
–
–
CNT.ALL.
SUM.ALL.
CNT.UNQ.ALL.
MAX.ALL.
MIN.ALL
AVG.ALL
MOD.ALL
G. (Groupings)
• Sorting commands used are
– .DO
– .AO
(Descending Order)
( Ascending Order)
• General Commands used are
– P. (Print),
I. (Insert),
U. (Update),
D. (Delete)
Example
Sno
Sname
Rating
Age
Sid
bid
day
bid
bname
color
22
Dustine
7
45.0
22
101
10/10/08
101
Interlake
Blue
29
Brutus
1
33.0
22
102
10/10/08
102
Interlake
Red
31
Lubber
8
55.5
22
103
10/08/08
103
Clipper
Green
32
Andy
8
25.5
22
104
10/07/08
104
Marine
red
58
Rusty
10
35.0
31
102
10/10/08
64
Horatio
7
35.0
31
103
11/06/08
71
Zorba
10
16.0
31
104
11/12/08
74
Horatio
9
35.0
64
101
09/05/08
85
Art
3
25.5
64
102
09/08/08
95
Bob
3
63.5
74
103
09/08/08
Instance of Sailors
4/13/2015
Instance of Boats
Instance of Reserves
Lecture 3
8
`Example Tables’ in QBE
Relation name
• QBE has its own screen
editor
• Users specify a query by
filling in example tables, or
skeletons; we will use
these skeletons in our
examples.
attributes
Reserves sid bid
day
Boats bid bname color
Sailors sid sname rating age
`Creating Tables’ in QBE
Dictionary entry for Relation Reserves
I.P.I. Reserves
sid
bid
day
Represent the dictionary entry of file columns of table Reserves
Basics
• To print names and ages of all sailors:
Sailors sid sname rating age
P._N
P._A
 Print all fields for sailors with rating > 8, in
ascending order by (rating, age):
Sailors sid sname rating
age
P.
AO(1). >8 AO(2).

QBE puts unique new variables in blank
columns. Above query in DRC (no ordering):
 I, N, T, A | I, N, T, A  Sailors  T  8
And/Or Queries
• Names of sailors younger than 30 or older
than 20: Sailors sid sname rating age

P.
< 30
P.
> 20
Names of sailors younger than 30 and older than
20: Sailors sid sname rating age
_Id P.
_Id P.

< 30
> 20
Names of sailors younger than 30 and rating > 4:
Sailors sid sname rating age
_Id P.
> 4 < 30
Duplicates
• Single row with P: Duplicates not eliminated
by default; can force elimination by using
UNQ.
Sailors sid sname rating age
UNQ.
P.
< 30

Multiple rows with P: Duplicates eliminated by
default! Can avoid elimination by using ALL.
Sailors sid sname rating age
ALL. _Id P.
< 30
_Id P.
> 20
Join Queries
• Names of sailors who’ve reserved a boat for
11/06/2008 and are older than 25 (note
that dates and strings with blanks/special
chars are quoted):
Sailors
sid sname
_Id P._S
Reserves

sid
_Id
bid
rating
age
> 25
day
‘8/24/96’
Joins accomplished by repeating variables.
Join Queries (Contd.)
• Colors of boats reserved by sailors who’ve
reserved a boat for 8/24/96 and are older
than 25 :
Sailors sid sname rating age
_Id _S
> 25
Reserves sid bid day
_Id _B ‘8/24/96’
Boats bid bname
color
_B ‘Interlake’ P.
Join Queries (Contd.)
• Names and ages of sailors who’ve reserved
some boat that is also reserved by the sailor
with sid = 22:
Sailors sid sname rating age
_Id P.
P.
Reserves sid bid
22 _B
_Id _B
day
Unnamed Columns
• Useful if we want to print the result of an
expression, or print fields from 2 or more
relations.
– QBE allows P. to appear in at most one table!
Sailors sid sname rating age
_Id P.
_R _A P._D P.(_R/_A)
Reserves sid bid day
_Id
_D
“Negative Tables”
• Can place a negation marker in the
relation column:
Sailors sid sname rating age
_Id P._S

Reserves sid bid
_Id _B

day
Variables appearing in a negated table must
also appear in a positive table!
Aggregates
• QBE supports
AVG, COUNT, MIN, MAX, SUM
– None of these eliminate duplicates, except COUNT
– Also have AVG.UNQ. etc. to force duplicate elimination
Sailors sid sname rating
age
_Id G.
G.P.AO _A P.AVG._A

The columns with G. are the group-by fields; all
tuples in a group have the same values in these
fields.
The (optional) use of .AO orders the answers.
— Every column with P. must include G. or an
aggregate operator to get the aggregates.
—
Conditions Box
• Used to express conditions involving 2 or
more columns, e.g., _R/_A > 0.2.
• Can express a condition that involves a
group, similar to the HAVING clause in SQL:
Sailors sid sname rating age
G.P. _A

CONDITIONS
AVG._A > 30
Express conditions involving AND and OR:
Sailors sid sname rating age
P.
_A
CONDITIONS
20 < _A AND _A < 30
Find sailors who’ve reserved all boats
• A division query; need aggregates (or update
operations) to do this in QBE.
Sailors sid
sname rating age
P.G._Id
Reserves sid bid day
_Id _B1
CONDITIONS
COUNT._B1= COUNT._B2
Boats bid bname
_B2
color
Inserting Tuples
• Tuple insertion:
Sailors sid sname rating age
I.
74 Janice
7
14
Delete and Update
• Delete all reservations for sailors with rating < 4
Sailors sid sname rating age
_Id
<4
Reserves sid bid
D.
_Id

day
Increment the age of the sailor with sid = 74
Sailors sid sname rating age
74
U._A+1
Restrictions on Update Commands
• Cannot mix I., D. and U. in a single example
table, or combine them with P. or G.
• Cannot insert, update or modify tuples using
values from fields of other tuples in the same
table. Example of an update that violates
this rule:
Sailors sid sname rating age
john
_A
joe
U._A+1
Should we update every Joe’s age?
Which John’s age should we use?
Find sailors who’ve reserved all boats
(Again!)
• We want to find sailors _Id such that there
is no boat _B that is not reserved by _Id:
Sailors sid sname rating age
_Id P._S

Boats bid bname color
_B


Reserves sid bid
_Id _B
day
Illegal query! Variable _B does not appear in a
positive row. In what order should the two
negative rows be considered? (Meaning changes!)
A Solution Using Views
• Find sailors who’ve not reserved some boat _B:
Sailors sid sname rating age
_Id P._S
Boats bid bname color
_B

BadSids sid
I.
_Id

Reserves sid bid
_Id _B
day
Next, find sailors not in this `bad’ set:
Sailors sid sname rating age
_Id P._S

BadSids sid
_Id
Advantages of QBE
•
•
•
•
•
User-friendly
Order of the row is immaterial
Highly non procedural query language
Several ways to represent a query
QBE is interpreter based so debugging is easy
Disadvantages of QBE
• QBE doesn’t support complete views
• QBE doesn’t have a preprocessor for
optimization
• Implementation of QBE is not complete but
theoretically its complete
Summary
• QBE is an elegant, user-friendly query language
based on DRC.
• Simple queries are especially easy to write in
QBE, and there is a minimum of syntax to learn.
• Has influenced the graphical query facilities
offered in many products, including Borland’s
Paradox and Microsoft’s Access.
Download