Matthew P. Johnson, OCL2, CISDD CUNY, January 20051 OCL2 Oracle 10g: SQL & PL/SQL Session #5 Matthew P. Johnson CISDD, CUNY January, 2005.

Slides:



Advertisements
Similar presentations
1 Lecture 4: Advanced SQL. 2 INTERSECT and EXCEPT: (missing from MySQL) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM.
Advertisements

1 Lecture 5: SQL Schema & Views. 2 Data Definition in SQL So far we have see the Data Manipulation Language, DML Next: Data Definition Language (DDL)
SQL Introduction Standard language for querying and manipulating data Structured Query Language Many standards out there: SQL92, SQL2, SQL3. Vendors support.
CSE 544 Constraints Lecture #3 Friday, January 13, 2011 Dan Suciu , Winter
M.P. Johnson, DBMS, Stern/NYU, Sp20041 C : Database Management Systems Lecture #13 Matthew P. Johnson Stern School of Business, NYU Spring, 2004.
1 Lecture 03: Advanced SQL. 2 Outline Unions, intersections, differences Subqueries, Aggregations, NULLs Modifying databases, Indexes, Views Reading:
1 Introduction to Database Systems CSE 444 Lecture 05: Views, Constraints April 9, 2008.
M.P. Johnson, DBMS, Stern/NYU, Spring C : Database Management Systems Lecture #11 M.P. Johnson Stern School of Business, NYU Spring, 2008.
M.P. Johnson, DBMS, Stern/NYU, Spring C : Database Management Systems Lecture #12 M.P. Johnson Stern School of Business, NYU Spring, 2008.
1 Data Definition in SQL So far we have see the Data Manipulation Language, DML Next: Data Definition Language (DDL) Data types: Defines the types. Data.
SQL April 25 th, Agenda Grouping and aggregation Sub-queries Updating the database Views More on views.
1 Lecture 06: SQL Friday, January 14, Outline Indexes Defining Views (6.7) Constraints (Chapter 7) We begin E/R diagrams (Chapter 2)
M.P. Johnson, DBMS, Stern/NYU, Spring C : Database Management Systems Lecture #14 M.P. Johnson Stern School of Business, NYU Spring, 2005.
1 Lecture 05: SQL Wednesday, October 8, Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.
M.P. Johnson, DBMS, Stern/NYU, Spring C : Database Management Systems Lecture #13 M.P. Johnson Stern School of Business, NYU Spring, 2005.
1 INTERSECT and EXCEPT: (may no be in MySQL) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A,
1 Lecture 03: SQL Friday, January 7, Administrivia Have you logged in IISQLSRV yet ? HAVE YOU CHANGED YOUR PASSWORD ? Homework 1 is now posted.
M.P. Johnson, DBMS, Stern/NYU, Spring C : Database Management Systems Lecture #12 M.P. Johnson Stern School of Business, NYU Spring, 2005.
Database Modifications A modification command does not return a result as a query does, but it changes the database in some way. There are three kinds.
Matthew P. Johnson, OCL4, CISDD CUNY, Sept OCL4 Oracle 10g: SQL & PL/SQL Session #5 Matthew P. Johnson CISDD, CUNY June, 2005.
M.P. Johnson, DBMS, Stern/NYU, Spring C : Database Management Systems Lecture #15 M.P. Johnson Stern School of Business, NYU Spring, 2005.
M.P. Johnson, DBMS, Stern/NYU, Sp20041 C : Database Management Systems Lecture #12 Matthew P. Johnson Stern School of Business, NYU Spring, 2004.
Correlated Queries SELECT title FROM Movie AS Old WHERE year < ANY (SELECT year FROM Movie WHERE title = Old.title); Movie (title, year, director, length)
1 Lecture 3: More SQL Friday, January 9, Agenda Homework #1 on the web site today. Sign up for the mailing list! Next Friday: –In class ‘activity’
CSE544: SQL Monday 3/27 and Wednesday 3/29, 2006.
Integrity Constraints An important functionality of a DBMS is to enable the specification of integrity constraints and to enforce them. Knowledge of integrity.
+ From Relational Algebra to SQL W2013 CSCI 2141.
Exercises Product ( pname, price, category, maker) Purchase (buyer, seller, store, product) Company (cname, stock price, country) Person( per-name, phone.
1 Lecture 4: More SQL Monday, January 13th, 2003.
1 Lecture 7: End of Normal Forms Outerjoins, Schema Creation and Views Wednesday, January 28th, 2004.
SQL (almost end) April 26 th, Agenda HAVING clause Views Modifying views Reusing views.
SQL April 22 th, Agenda Union, intersections Sub-queries Modifying the database Views Modifying views Reusing views.
1 SQL cont.. 2 Outline Unions, intersections, differences (6.2.5, 6.4.2) Subqueries (6.3) Aggregations (6.4.3 – 6.4.6) Hint for reading the textbook:
More SQL: Complex Queries, Triggers, Views, and Schema Modification UMM AL QURA UNIVERSITY College of Computer Dr. Ali Al Najjar 1.
1 Lecture 04: SQL Wednesday, January 11, Outline Two Examples Nulls (6.1.6) Outer joins (6.3.8) Database Modifications (6.5)
1 Lecture 6: Views Friday, January 17th, Updating Views How can I insert a tuple into a table that doesn’t exist? Employee(ssn, name, department,
1 SQL Constraints and Programming. 2 Agenda Constraints in SQL Systems aspects of SQL.
SQL SQL Review. SQL Introduction Standard language for querying and manipulating data Structured Query Language Many standards out there: ANSI SQL, SQL92.
SQL. SQL Introduction Standard language for querying and manipulating data Structured Query Language Many standards out there: ANSI SQL, SQL92 (a.k.a.
1 SQL Constraints and Programming. 2 Agenda Constraints in SQL Systems aspects of SQL.
1 SQL Additional Notes. 2  1 Group and Aggregation*  2 Execution Order*  3 Join*  4 Find the maximum  5 Line Format SQL Additional Notes *partially.
1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.
1 Lecture 5: Outerjoins, Schema Creation and Views Wednesday, January 15th, 2003.
Aggregation SELECT Sum(price) FROM Product WHERE manufacturer=“Toyota” SQL supports several aggregation operations: SUM, MIN, MAX, AVG, COUNT Except COUNT,
1 Lecture 03: SQL Monday, January 9, Project t/Default.aspxhttp://iisqlsrv.cs.washington.edu/444/Projec.
1 Lecture 06 Data Modeling: E/R Diagrams Wednesday, January 18, 2006.
1 Lecture 05: SQL Wednesday, October 8, Outline Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes Defining Views (6.7)
SQL. SQL Introduction Standard language for querying and manipulating data Structured Query Language Many standards out there: ANSI SQL, SQL92 (a.k.a.
1 Constraints and Triggers in SQL. 2 Constraints are conditions that must hold on all valid relation instances SQL2 provides a variety of techniques for.
SQL.
Lecture 05: SQL Wednesday, January 12, 2005.
Cours 7: Advanced SQL.
Lecture 04: SQL Monday, January 10, 2005.
Introduction to Database Systems CSE 444 Lecture 04: SQL
Introduction to Database Systems CSE 444 Lecture 03: SQL
Introduction to Database Systems CSE 444 Lecture 03: SQL
SQL Introduction Standard language for querying and manipulating data
Lecture 05 Views, Constraints
Lecture 12: SQL Friday, October 20, 2000.
Lecture 4: SQL Thursday, January 11, 2001.
Lecture 3 Monday, April 8, 2002.
Lecture 06: SQL Monday, October 11, 2004.
Lecture 4: SQL Wednesday, April 10, 2002.
Lecture 03: SQL Friday, October 3, 2003.
CSE544 SQL Monday, April 5, 2004.
Lecture 04: SQL Monday, October 6, 2003.
Lecture 05: SQL Wednesday, October 9, 2002.
Lecture 14: SQL Wednesday, October 31, 2001.
Presentation transcript:

Matthew P. Johnson, OCL2, CISDD CUNY, January OCL2 Oracle 10g: SQL & PL/SQL Session #5 Matthew P. Johnson CISDD, CUNY January, 2005

Matthew P. Johnson, OCL2, CISDD CUNY, January Live examples Examples from sqlzoo.netsqlzoo.net Q: produce a list of employees and their bosses  What if no boss? Or no subordinate? Joins on emp, emp man:  Comma-based  Inner  Natural  Cross  Outer – left, right, full

Matthew P. Johnson, OCL2, CISDD CUNY, January More live examples Inner joins require an ON clause  Like a where clause  Arbitrary boolean expression  If always true (1=1), reduces to cross join New compar op: BETWEEN  a between 5 and 10  a >= 5 and a <= 10 Q: produce a list of employees with their salary grades  emp, salgrade

Matthew P. Johnson, OCL2, CISDD CUNY, January Null/logic review TRUE AND UNKNOWN = ? TRUE OR UNKNOWN = ? UNKNOWN OR UNKNOWN = ? X = NULL = ?

Matthew P. Johnson, OCL2, CISDD CUNY, January INTERSECT and EXCEPT (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) SELECT R.A, R.B FROM R WHERE EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) SELECT R.A, R.B FROM R WHERE EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) (SELECT R.A, R.B FROM R) EXCEPT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM R) EXCEPT (SELECT S.A, S.B FROM S) SELECT R.A, R.B FROM R WHERE NOT EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) SELECT R.A, R.B FROM R WHERE NOT EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) If R, S have no duplicates, then can write without subqueries (HOW?)

Matthew P. Johnson, OCL2, CISDD CUNY, January Agenda More SQL 1. Grouping & aggregation 2. Modifications 3. Defining schemata 4. Views

Matthew P. Johnson, OCL2, CISDD CUNY, January Grouping & Aggregation In SQL:  aggregation operators in SELECT,  Grouping in GROUP BY clause Recall aggregation operators:  sum, avg, min, max, count strings, numbers, dates  Each applies to scalars  Count also applies to row: count(*)  Can DISTINCT inside aggregation op: count(DISTINCT x) Grouping: group rows that agree on single value  Each group becomes one row in result

Matthew P. Johnson, OCL2, CISDD CUNY, January Straight aggregation In R.A.  sum(x)  total (R) In SQL: Just put the aggregation op in SELECT NB: aggreg. ops applied to each non-null val  count(x) counts the number of nun-null vals in field x  Use count(*) to count the number of rows SELECT SUM(x) AS total FROM R SELECT SUM(x) AS total FROM R

Matthew P. Johnson, OCL2, CISDD CUNY, January Straight Aggregation example COUNT applies to duplicates, unless otherwise stated: Better: Can we say: SELECT Count(category) FROM Product WHERE year > 1995 SELECT Count(category) FROM Product WHERE year > 1995 SELECT Count(DISTINCT category) FROM Product WHERE year > 1995 SELECT Count(DISTINCT category) FROM Product WHERE year > 1995 same as Count(*), except excludes nulls SELECT category, Count(category) FROM Product WHERE year > 1995 SELECT category, Count(category) FROM Product WHERE year > 1995

Matthew P. Johnson, OCL2, CISDD CUNY, January Straight Aggregation example Purchase(product, date, price, quantity) Q: Find total sales for the entire database: Q: Find total sales of bagels: SELECT SUM(price * quantity) FROM Purchase SELECT SUM(price * quantity) FROM Purchase SELECT SUM(price * quantity) FROM Purchase WHERE product = ‘bagel’ SELECT SUM(price * quantity) FROM Purchase WHERE product = ‘bagel’

Matthew P. Johnson, OCL2, CISDD CUNY, January Straight grouping Group rows together by field values Produces one row for each group  I.e., by each (combin. of) grouped val(s)  Don’t select non-grouped fields Reduces to DISTINCT selections: SELECT product FROM Purchase GROUP BY product SELECT product FROM Purchase GROUP BY product SELECT DISTINCT product FROM Purchase SELECT DISTINCT product FROM Purchase

Matthew P. Johnson, OCL2, CISDD CUNY, January Grouping & aggregation Sometimes want to group and compute aggregations by group  Aggreg. op applied to rows in group, not all rows in table Q: How many sales of each product? SELECT product, count(*) AS numSales FROM cia GROUP BY product SELECT product, count(*) AS numSales FROM cia GROUP BY product

Matthew P. Johnson, OCL2, CISDD CUNY, January Evaluation of G&A Evaluation steps: Compute the FROM-WHERE part as usual to obtain a table with all attributes in R 1,…,R n Group by the attributes a 1,…,a k Compute the aggregates in C 2 and keep only groups satisfying C 2 Compute aggregates in S and return the result SELECTS FROMR 1,…,R n WHEREC 1 GROUP BYa 1,…,a k HAVINGC 2 SELECTS FROMR 1,…,R n WHEREC 1 GROUP BYa 1,…,a k HAVINGC 2

Matthew P. Johnson, OCL2, CISDD CUNY, January G & A for constructed relations Can do the same thing for larger, non-atomic relations Scenario:  Movie(title,year,producerSsn,length)  MovieExec(name,ssn,netWorth) Q: How many mins. of film did each producer make?  What happens to non-producer movie-execs? SELECT name, sum(length) AS total FROM Movie, MovieExec WHERE producerSsn = ssn GROUP BY name SELECT name, sum(length) AS total FROM Movie, MovieExec WHERE producerSsn = ssn GROUP BY name

Matthew P. Johnson, OCL2, CISDD CUNY, January Illustrated G&A example Usually want aggregations on certain parts of the relation Purchase(product, date, price, quantity) Find total sales after 10/18 per product that sold > $20: SELECT product, SUM(price*quantity) AS TotalSales FROM Purchase WHERE date > DATE ’ ’ GROUP BY product SELECT product, SUM(price*quantity) AS TotalSales FROM Purchase WHERE date > DATE ’ ’ GROUP BY product

Matthew P. Johnson, OCL2, CISDD CUNY, January Illustrated G&A example Purchase

Matthew P. Johnson, OCL2, CISDD CUNY, January First compute the FROM-WHERE clauses (date > DATE ’ ’) then GROUP BY product: Illustrated G&A example

Matthew P. Johnson, OCL2, CISDD CUNY, January SELECT product, SUM(price*quantity) AS TotalSales FROM Purchase WHERE d date > DATE ’ ’ GROUP BY product SELECT product, SUM(price*quantity) AS TotalSales FROM Purchase WHERE d date > DATE ’ ’ GROUP BY product Finally, aggregate: Illustrated G&A example

Matthew P. Johnson, OCL2, CISDD CUNY, January Illustrated G&A example GROUP BY may be reduced to (maybe more complicated) subquery SELECT product, Sum(price*quantity) AS TotalSales FROM Purchase WHERE date > DATE ’ ’ GROUP BY product SELECT product, Sum(price*quantity) AS TotalSales FROM Purchase WHERE date > DATE ’ ’ GROUP BY product SELECT DISTINCT x.product, (SELECT Sum(y.price*y.quantity) FROM Purchase y WHERE x.product = y.product AND y.date > DATE ’ ’) AS TotalSales FROM Purchase x WHERE x.date > DATE ’ ’ SELECT DISTINCT x.product, (SELECT Sum(y.price*y.quantity) FROM Purchase y WHERE x.product = y.product AND y.date > DATE ’ ’) AS TotalSales FROM Purchase x WHERE x.date > DATE ’ ’

Matthew P. Johnson, OCL2, CISDD CUNY, January SELECT product, Sum(price * quantity) AS SumSales Max(quantity) AS MaxQuantity FROM Purchase GROUP BY product SELECT product, Sum(price * quantity) AS SumSales Max(quantity) AS MaxQuantity FROM Purchase GROUP BY product For every product, what is the total sales and max quantity sold? Another example

Matthew P. Johnson, OCL2, CISDD CUNY, January Live group by e.g. Q: How many people (immediate subordinates) does each manager manage? Join emp with self… If want non-managers, do outer join…

Matthew P. Johnson, OCL2, CISDD CUNY, January HAVING clauses Sometimes we want to limit which tuples may be grouped Q: How many mins. of film did each rich producer (i.e., netWorth > ) make? Q: Is HAVING necessary here? A: No, could just add rich req. to SELECT SELECT name, sum(length) AS total FROM Movie, MovieExec WHERE producerSsn = ssn GROUP BY name HAVING netWorth > SELECT name, sum(length) AS total FROM Movie, MovieExec WHERE producerSsn = ssn GROUP BY name HAVING netWorth >

Matthew P. Johnson, OCL2, CISDD CUNY, January HAVING clauses Sometimes we want to limit which tuples may be grouped, based on properties of the group Q: How many mins. of film did each old producer (i.e., started before 1930) make? SELECT name, sum(length) AS total FROM Movie, MovieExec WHERE producerSsn = ssn GROUP BY name HAVING min(year) < 1930 SELECT name, sum(length) AS total FROM Movie, MovieExec WHERE producerSsn = ssn GROUP BY name HAVING min(year) < 1930

Matthew P. Johnson, OCL2, CISDD CUNY, January General form of G&A S = may contain attributes As and/or any aggregates but no other attributes C1 = condition on the attributes in R 1,…,R n C2 = condition on aggregations or attributes from As Why? NB: “Any attribute of relations in the FROM clause may be aggregated in the HAVING clause, but only those attributes that are in the GROUP BY list may appear unaggregated in the HAVING clause (the same rule as for the SELECT clause)” (Ullman, p283). SELECTS FROMR1,…,Rn WHEREC1 GROUP BYAs HAVINGC2 Why?

Matthew P. Johnson, OCL2, CISDD CUNY, January Live example Q: produce list of bosses and underling- counts, for bosses with >1 underling Just add HAVING clause…

Matthew P. Johnson, OCL2, CISDD CUNY, January More A&G Examples Web pages, and their authors: Author(login,name) Document(url, title) Wrote(login,url) Mentions(url,word)

Matthew P. Johnson, OCL2, CISDD CUNY, January Web page examples Find all authors who wrote at least 10 documents Author(login,name), Wrote(login,url) Attempt 1: with nested queries SELECT DISTINCT Author.name FROM Author WHERE count(SELECT Wrote.url FROM Wrote WHERE Author.login=Wrote.login) > 10 SELECT DISTINCT Author.name FROM Author WHERE count(SELECT Wrote.url FROM Wrote WHERE Author.login=Wrote.login) > 10 Bad!

Matthew P. Johnson, OCL2, CISDD CUNY, January Web page examples Find all authors who wrote at least 10 documents: Attempt 2: Simplify with GROUP BY SELECT Author.name FROM Author, Wrote WHERE Author.login=Wrote.login GROUP BY Author.name HAVING count(wrote.url) > 10 SELECT Author.name FROM Author, Wrote WHERE Author.login=Wrote.login GROUP BY Author.name HAVING count(wrote.url) > 10 Good! No need for DISTINCT: get for free from GROUP BY

Matthew P. Johnson, OCL2, CISDD CUNY, January Web page examples Find all authors who have a vocabulary over words: SELECT Author.name FROM Author, Wrote, Mentions WHERE Author.login=Wrote.login AND Wrote.url=Mentions.url GROUP BY Author.name HAVING count(distinct Mentions.word) > SELECT Author.name FROM Author, Wrote, Mentions WHERE Author.login=Wrote.login AND Wrote.url=Mentions.url GROUP BY Author.name HAVING count(distinct Mentions.word) > Author(login,name), Wrote(login,url), Mentions(url, world)

Matthew P. Johnson, OCL2, CISDD CUNY, January Summary: SQL queries Only SELECT, FROM required Can’t have HAVING without GROUP BY Can have GROUP BY without HAVING Any clauses must appear in this order: SELECT L FROM Rs WHERE s GROUP BY L2 HAVING s2 ORDER BY L3 SELECT L FROM Rs WHERE s GROUP BY L2 HAVING s2 ORDER BY L3

Matthew P. Johnson, OCL2, CISDD CUNY, January New topic: Modifications Three kinds of modifications 1. Insertions 2. Deletions 3. Updates Sometimes “update” used as a synonym for “modification”

Matthew P. Johnson, OCL2, CISDD CUNY, January Insertions General form: Missing attribute  NULL (or other default value) INSERT INTO R(A1,…., An) VALUES (v1,…., vn) INSERT INTO Purchase(buyer, seller, product, store) VALUES (‘Joe’, ‘Fred’, ‘wakeup-clock-espresso-machine’, ‘The Sharper Image’) INSERT INTO Purchase(buyer, seller, product, store) VALUES (‘Joe’, ‘Fred’, ‘wakeup-clock-espresso-machine’, ‘The Sharper Image’) Example: Insert a new purchase to the database:

Matthew P. Johnson, OCL2, CISDD CUNY, January Insertions If we’re sure we have all values in the right order, can just say: Only do this if you’re sure of order in which the table fields were defined INSERT INTO R VALUES (v1,…., vn) INSERT INTO Purchase VALUES (‘Joe’, ‘Fred’, ‘wakeup-clock-espresso-machine’, ‘The Sharper Image’) INSERT INTO Purchase VALUES (‘Joe’, ‘Fred’, ‘wakeup-clock-espresso-machine’, ‘The Sharper Image’)

Matthew P. Johnson, OCL2, CISDD CUNY, January Insertions Can insert the result of a query; Scenario:  Product(name, etc.)  Purchase(buyerssn, prodName, etc.)  Maybe some purchases name missing products   add those to the Product table  Subquery replaces VALUES INSERT INTO R(As) (query) INSERT INTO R(As) (query)

Matthew P. Johnson, OCL2, CISDD CUNY, January Insertion example Premise: data corruption  lose some Product data  every product referred to in Purchase should exist in Product, but some are missing namelistPricecategory gizmo100gadgets prodNamebuyerName cameraJohn gizmoSmith cameraSmith Product Product(name, listPrice, category) Purchase(prodName, buyerName, price) Product(name, listPrice, category) Purchase(prodName, buyerName, price) Purchase

Matthew P. Johnson, OCL2, CISDD CUNY, January Insertion example namelistPricecategory gizmo100Gadgets cameraNULL INSERT INTO Product(name) SELECT prodName FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product) INSERT INTO Product(name) SELECT prodName FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product) namelistPricecategory gizmo100gadgets ProductProduct’ prodNamebuyerName cameraJohn gizmoSmith cameraSmith Purchase cameraNULL Q: Or do we get: A: Depends on implementation!

Matthew P. Johnson, OCL2, CISDD CUNY, January Deletions General form: Example: Q: How do you delete just one row with SQL simpliciter? A: You can’t! Although Oracle has the ROWID pseudo-field… As usual, WHERE can contain subqueries DELETE FROM PURCHASE WHERE seller = ‘Joe’ AND product = ‘Brooklyn Bridge’ DELETE FROM PURCHASE WHERE seller = ‘Joe’ AND product = ‘Brooklyn Bridge’ DELETE FROM Table WHERE condition DELETE FROM Table WHERE condition

Matthew P. Johnson, OCL2, CISDD CUNY, January Updates General form: Example: As usual, WHERE can contain subqueries UPDATE Product SET field1 = value1, field2 = value2 WHERE condition UPDATE Product SET field1 = value1, field2 = value2 WHERE condition UPDATE Product SET price = price/2 WHERE Product.name IN (SELECT product FROM Purchase WHERE Date = DATE‘Oct, 25, 1999’); UPDATE Product SET price = price/2 WHERE Product.name IN (SELECT product FROM Purchase WHERE Date = DATE‘Oct, 25, 1999’);

Matthew P. Johnson, OCL2, CISDD CUNY, January New topic: Defining schemata So far, have done queries and data manipulation Now doing data definition Recall data types:  INT or INTEGER (variant: SHORTINT)  FLOAT or REAL: floating-point numbers DOUBLE PRECISION: DECIMAL(n,d):  E.g. decimal(5,2): five decimal digits, with the decimal point two positions from the right: e.g  DATE and TIME  Character strings Fixed length: CHAR(n) Variable length: VARCHAR(n)

Matthew P. Johnson, OCL2, CISDD CUNY, January Creating tables Form: Example: CREATE TABLE Table-name ( field field-type, … field field-type ) CREATE TABLE Table-name ( field field-type, … field field-type ) No comma! CREATE TABLE People ( nameVARCHAR(30), ssnCHAR(9), ageSHORTINT, cityVARCHAR(30), genderBIT(1), BirthdateDATE ) CREATE TABLE People ( nameVARCHAR(30), ssnCHAR(9), ageSHORTINT, cityVARCHAR(30), genderBIT(1), BirthdateDATE ) Not supported in Oracle

Matthew P. Johnson, OCL2, CISDD CUNY, January Default Values Specify defaults when creating table: The default default: NULL CREATE TABLE People ( nameVARCHAR(30), ssnCHAR(9), ageSHORTINTDEFAULT 100, cityVARCHAR(30)DEFAULT ‘New York’, genderBIT(1), BirthdateDATEDEFAULT DATE ‘ ’00’, ) CREATE TABLE People ( nameVARCHAR(30), ssnCHAR(9), ageSHORTINTDEFAULT 100, cityVARCHAR(30)DEFAULT ‘New York’, genderBIT(1), BirthdateDATEDEFAULT DATE ‘ ’00’, )

Matthew P. Johnson, OCL2, CISDD CUNY, January Deleting and modifying schemata Delete data, indices, schema: Delete data and indices: Either way, use EXTREME CAUTION! Add or delete attributes: ALTER TABLE Person ADD phone CHAR(12); ALTER TABLE Person DROP age; ALTER TABLE Person ADD phone CHAR(12); ALTER TABLE Person DROP age; Q: What’s put in the new fields? DROP TABLE Person TRUNCATE TABLE Person

Matthew P. Johnson, OCL2, CISDD CUNY, January New topic: Indices Very important speeding up query processing Index on field(s) = data structure that makes searches/comparisons on those fields fast Suppose we have a relation Person (name, age, city) Sequential scan of the whole Person file may take a very long time SELECT * FROM Person WHERE name = ‘Waksal’ SELECT * FROM Person WHERE name = ‘Waksal’

Matthew P. Johnson, OCL2, CISDD CUNY, January Creating Indices Syntax: Here: No searching by name is much faster How much faster? Log-time, say Base-what? Doesn’t matter, but say 2 If all New Yorkers, #comparisons:  log 2 ( ) ~= 23 (i.e., 2 23 ~= ) CREATE INDEX nameIndex ON Person(name) CREATE INDEX index-name ON R(field(s))

Matthew P. Johnson, OCL2, CISDD CUNY, January How do indices work? What the data structure?  Different possibilities 1 st intuition: index on field f is an ordered list of all values in the table’s f field  each item has address (“rowid”) of its row Where do we get the ordered list? 2 nd intuition: put all f values in a BST  searching BST take log time (why?) DBMSs actually use a variant: B+Tree  See Ullman’s book or data structures texts…

Matthew P. Johnson, OCL2, CISDD CUNY, January Creating Indices Indexes can be useful in range queries too: CREATE INDEX ageIndex ON Person (age) SELECT * FROM Person WHERE age > 25

Matthew P. Johnson, OCL2, CISDD CUNY, January Using indices Indices can be created on multiple attributes: Helps in: And in: But not in: SELECT * FROM Person WHERE age = 55 AND city = ‘Seattle’ SELECT * FROM Person WHERE city = ‘Seattle’ CREATE INDEX doubleindex ON Person (age, city) SELECT * FROM Person WHERE age = 55 Idea: our sorted list is sorted on age;city, not city;age Q: In Movie tbl, should index be on year;title or title;year?

Matthew P. Johnson, OCL2, CISDD CUNY, January The Index Selection Problem Big Q: Why not just indexes all the fields?  how does the list/B+Tree stay up to date? We are given a workload: a set of SQL queries and their frequencies Q is: What indices should we build to speed up the workload? A:  Attributes in FROM/WHERE clauses  favor an index  Attributes in INSERT/UPDATE clauses  discourage an index  In Oracle: your primary key fields get indexed automatically (why?)

Matthew P. Johnson, OCL2, CISDD CUNY, January New topic: Views Stored relations physically exist and persist Views are relations that don’t  in some texts, “table” = stored relation = “base table” Basically names/references given to queries  maybe a relevant subset of a table Employee(ssn, name, department, project, salary) Payroll has access to Employee, others only to Developers CREATE VIEW Developers AS SELECT name, project FROM Employee WHERE department = “Development” CREATE VIEW Developers AS SELECT name, project FROM Employee WHERE department = “Development”

Matthew P. Johnson, OCL2, CISDD CUNY, January A Different View Person(name, city) Purchase(buyer, seller, product, store) Product(name, maker, category) We have a new virtual table: Seattle-view(buyer, seller, product, store) CREATE VIEW Seattle-view AS SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer CREATE VIEW Seattle-view AS SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer

Matthew P. Johnson, OCL2, CISDD CUNY, January A Different View Now we can query the view: SELECT name, store FROM Seattle-view, Product WHERE Seattle-view.product = Product.name AND Product.category = ‘shoes’ SELECT name, store FROM Seattle-view, Product WHERE Seattle-view.product = Product.name AND Product.category = ‘shoes’ CREATE VIEW Seattle-view AS SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer CREATE VIEW Seattle-view AS SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer

Matthew P. Johnson, OCL2, CISDD CUNY, January What happens when we query a view? SELECT name, Seattle-view.store FROM Seattle-view, Product WHERE Seattle-view.product = Product.name AND Product.category = ‘shoes’ SELECT name, Seattle-view.store FROM Seattle-view, Product WHERE Seattle-view.product = Product.name AND Product.category = ‘shoes’ SELECT name, Purchase.store FROM Person, Purchase, Product WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer AND Purchase.poduct = Product.name AND Product.category = ‘shoes’ SELECT name, Purchase.store FROM Person, Purchase, Product WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer AND Purchase.poduct = Product.name AND Product.category = ‘shoes’

Matthew P. Johnson, OCL2, CISDD CUNY, January Can rename view fields CREATE VIEW Seattle-view(seabuyer, seaseller, prod, store) AS SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer CREATE VIEW Seattle-view(seabuyer, seaseller, prod, store) AS SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = ‘Seattle’ AND Person.name = Purchase.buyer

Matthew P. Johnson, OCL2, CISDD CUNY, January Types of Views Views discussed here:  Used in databases  Computed only on-demand – slow at runtime  Always up to date Sometimes talk about “materialized” views  Used in data warehouses  Pre-computed offline – fast at runtime  May have stale data  Maybe more later…

Matthew P. Johnson, OCL2, CISDD CUNY, January Updating Views How can I insert a tuple into a table that doesn’t exist? Employee(ssn, name, department, project, salary) CREATE VIEW Developers AS SELECT name, project FROM Employee WHERE department = ‘Development’ CREATE VIEW Developers AS SELECT name, project FROM Employee WHERE department = ‘Development’ INSERT INTO Developers VALUES(‘Joe’, ‘Optimizer’) INSERT INTO Employee(ssn, name, department, project, salary) VALUES(NULL, ‘Joe’, NULL, ‘Optimizer’, NULL) If we make the following insertion: It becomes:

Matthew P. Johnson, OCL2, CISDD CUNY, January Non-Updatable Views Person(name, city) Purchase(buyer, seller, product, store) How can we add the following tuple to the view? (‘Seattle’, ‘Nine West’) We don’t know the name of the person who made the purchase cannot set to NULL (why?) CREATE VIEW City-Store AS SELECT Person.city, Purchase.store FROM Person, Purchase WHERE Person.name = Purchase.buyer CREATE VIEW City-Store AS SELECT Person.city, Purchase.store FROM Person, Purchase WHERE Person.name = Purchase.buyer

Matthew P. Johnson, OCL2, CISDD CUNY, January Constraints in SQL A constraint = a property that we’d like our database to hold The system will enforce the constraint by taking some actions:  forbid an update  or perform compensating updates

Matthew P. Johnson, OCL2, CISDD CUNY, January Constraints in SQL Constraints in SQL: Keys, foreign keys Attribute-level constraints Tuple-level constraints Global constraints: assertions The more complex the constraint, the harder it is to check and to enforce simplest Most complex

Matthew P. Johnson, OCL2, CISDD CUNY, January Keys OR: CREATE TABLE Product ( name CHAR(30) PRIMARY KEY, category VARCHAR(20)) CREATE TABLE Product ( name CHAR(30) PRIMARY KEY, category VARCHAR(20)) CREATE TABLE Product ( name CHAR(30), category VARCHAR(20) PRIMARY KEY (name)) CREATE TABLE Product ( name CHAR(30), category VARCHAR(20) PRIMARY KEY (name))

Matthew P. Johnson, OCL2, CISDD CUNY, January Keys with Multiple Attributes CREATE TABLE Product ( name CHAR(30), category VARCHAR(20), price INT, PRIMARY KEY (name, category)) CREATE TABLE Product ( name CHAR(30), category VARCHAR(20), price INT, PRIMARY KEY (name, category)) NameCategoryPrice GizmoGadget10 CameraPhoto20 GizmoPhoto30 GizmoGadget40

Matthew P. Johnson, OCL2, CISDD CUNY, January Other Keys CREATE TABLE Product ( productID CHAR(10), name CHAR(30), category VARCHAR(20), price INT, PRIMARY KEY (productID), UNIQUE (name, category)) CREATE TABLE Product ( productID CHAR(10), name CHAR(30), category VARCHAR(20), price INT, PRIMARY KEY (productID), UNIQUE (name, category)) There is at most one PRIMARY KEY; there can be many UNIQUE

Matthew P. Johnson, OCL2, CISDD CUNY, January Foreign Key Constraints CREATE TABLE Purchase ( prodName CHAR(30) REFERENCES Product(name), date DATETIME) CREATE TABLE Purchase ( prodName CHAR(30) REFERENCES Product(name), date DATETIME) prodName is a foreign key to Product(name) name should be a key in Product Referential integrity constraints

Matthew P. Johnson, OCL2, CISDD CUNY, January NameCategory Gizmogadget CameraPhoto OneClickPhoto ProdNameStore GizmoWiz CameraRitz CameraWiz ProductPurchase

Matthew P. Johnson, OCL2, CISDD CUNY, January Foreign Key Constraints Or: (name, category) must be a PRIMARY KEY in its table CREATE TABLE Purchase ( prodName CHAR(30), category VARCHAR(20), date DATETIME, FOREIGN KEY (prodName, category) REFERENCES Product(name, category) CREATE TABLE Purchase ( prodName CHAR(30), category VARCHAR(20), date DATETIME, FOREIGN KEY (prodName, category) REFERENCES Product(name, category)

Matthew P. Johnson, OCL2, CISDD CUNY, January NameCategory Gizmogadget CameraPhoto OneClickPhoto ProdNameStore GizmoWiz CameraRitz CameraWiz ProductPurchase What happens during updates? Types of updates: In Purchase: insert/update In Product: delete/update

Matthew P. Johnson, OCL2, CISDD CUNY, January What happens during updates? SQL has three policies for maintaining referential integrity: Reject violating modifications (default) Cascade: after a delete/update do a delete/update Set-null set foreign-key field to NULL

Matthew P. Johnson, OCL2, CISDD CUNY, January Constraints on Attributes and Tuples Constraints on attributes: NOT NULL-- obvious meaning... CHECK condition-- any condition (except subqueries) Constraints on tuples CHECK condition

Matthew P. Johnson, OCL2, CISDD CUNY, January CREATE TABLE Purchase ( prodName CHAR(30) CHECK (prodName IN SELECT Product.name FROM Product), date DATETIME NOT NULL) CREATE TABLE Purchase ( prodName CHAR(30) CHECK (prodName IN SELECT Product.name FROM Product), date DATETIME NOT NULL) What is the difference from Foreign-Key?

Matthew P. Johnson, OCL2, CISDD CUNY, January General Assertions Supported in SQL standard: In Oracle, supported/simulated with triggers CREATE ASSERTION myAssert CHECK NOT EXISTS( SELECT Product.name FROM Product, Purchase WHERE Product.name = Purchase.prodName GROUP BY Product.name HAVING count(*) > 200) CREATE ASSERTION myAssert CHECK NOT EXISTS( SELECT Product.name FROM Product, Purchase WHERE Product.name = Purchase.prodName GROUP BY Product.name HAVING count(*) > 200)

Matthew P. Johnson, OCL2, CISDD CUNY, January Final Comments on Constraints Can give them names, and alter later We need to understand exactly when they are checked We need to understand exactly what actions are taken if they fail