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.