C20.0046: Database Management Systems Lecture #10

24
M.P. Johnson, DBMS, Stern/NYU, Sprin g 2005 1 C20.0046: Database Management Systems Lecture #10 Matthew P. Johnson Stern School of Business, NYU Spring, 2005

description

C20.0046: Database Management Systems Lecture #10. Matthew P. Johnson Stern School of Business, NYU Spring, 2005. Next topic: SQL. Standard language for querying and manipulating data Structured Query Language Many standards: ANSI SQL, SQL92/SQL2, SQL3/SQL99 - PowerPoint PPT Presentation

Transcript of C20.0046: Database Management Systems Lecture #10

Page 1: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

1

C20.0046: Database Management SystemsLecture #10

Matthew P. JohnsonStern School of Business, NYUSpring, 2005

Page 2: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

2

Next topic: SQL Standard language for querying and manipulating data

Structured Query Language

Many standards: ANSI SQL, SQL92/SQL2, SQL3/SQL99

Vendors support various subsets/extensions We’ll do SQL99/Oracle/MySQL

“No one ever got fired for buying Oracle.” Basic form (many more bells and whistles in addition):

SELECT attributes FROM relations (possibly multiple, joined) WHERE conditions (selections)

Page 3: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

3

SQL Query SemanticsSELECT a1, a2, …, akFROM R1 AS x1, R2 AS x2, …, Rn AS xnWHERE Conditions

Parallel assignment – all tuples

Doesn’t impose any order!

Answer = {}for all assignments x1 in R1, …, xn in Rn do if Conditions then Answer = Answer {(a1,…,ak)}return Answer

Page 4: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

4

SQL Query SemanticsSELECT a1, a2, …, akFROM R1 AS x1, R2 AS x2, …, Rn AS xnWHERE Conditions

Nested loops:

Answer = {}for x1 in R1 do for x2 in R2 do ….. for xn in Rn do if Conditions then Answer = Answer {(a1,…,ak)}return Answer

Page 5: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

5

Details: Disambiguating Attributes Sometimes two relations have the same attr:

Person(pname, address, worksfor)Company(cname, address)

SELECT DISTINCT pname, addressFROM Person, CompanyWHERE worksfor = cname

SELECT DISTINCT Person.pname, Company.addressFROM Person, CompanyWHERE Person.worksfor = Company.cname

Whichaddress?

Page 6: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

6

Details: Disambiguation in SQL Every selected field must be unambiguous For R(A,B),

Select A from R, R Select R1.A from R R1, R R2

Consider:

Why? * is shorthand for all fields, each must be unambiguous Select * from R R1, R R2

SQL> Select * from R, R;Select * from R, R *ERROR at line 1:ORA-00918: column ambiguously defined

Page 7: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

7

Details: Tuple Variables

SELECT DISTINCT x.store AS competitorFROM Purchase AS x, Purchase AS yWHERE x.product = y.product AND y.store = 'BestBuy'

Find all stores that sold at least one product that the store'BestBuy' also sold:

Answer (store)

Product (pname, price, category, manufacturer)Purchase (buyer, seller, store, product)Person(persname, phoneNumber, city)

Page 8: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

8

Details: Disambiguation in Oracle SQL Can rename fields by

Select name as n … Select name n …

But not by Select name=n…

Can rename relations only by … from tab t1, tab t2

Lesson: if you get errors, remove all =s, ASs

Page 9: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

9

R.A. & SQL Reps(ssn, name, etc.) Clients(ssn, name, rssn)

Q: Who are George’s clients, in R.A.? Clients.name(Reps.name='George' and Reps.ssn=rssn(Reps x

Clients)) In SQL?

Page 10: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

10

Ordering the Results Ordering is ascending, unless you specify the DESC

keyword per attribute.

Ordering is ascending, unless you specify the DESC keyword per attribute.

SELECT pname, price, manufacturerFROM ProductWHERE category=‘gizmo’ AND price > 50ORDER BY price, pname

SELECT pname, price, manufacturerFROM ProductWHERE category=‘gizmo’ AND price > 50ORDER BY price DESC, pname ASC

Page 11: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

11

Ordering the ResultsSELECT CategoryFROM ProductORDER BY PName

PName Price Category Manufacturer

Gizmo $19.99 Gadgets GizmoWorks

Powergizmo $29.99 Gadgets GizmoWorks

SingleTouch $149.99 Photography Canon

MultiTouch $203.99 Household Hitachi

?

Page 12: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

12

Details: Case-sensitivity By default, all matches and comparisons are case-

sensitive If want case-insensitive, some options: Convert all to upper or lower case - slow

SQL> select * from emp where upper(ename) = upper(‘Blake');

Create a function index Maybe later…

Modify the nls_sort setting: SQL> alter session set nls_sort=binary_ci; SQL> alter session set nls_comp=ansi; The other values: binary, binary_ai

Page 13: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

13

The LIKE operator s LIKE p: pattern matching on strings p may contain two special symbols:

_ = any single character % = zero or more chars

Product(Name, Price, Category, Manufacturer) Find all products whose name contains ‘gizmo’:

SELECT *FROM ProductsWHERE PName LIKE ‘%gizmo%’

Page 14: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

14

The LIKE operator Q: What it want to search for values

containing a ‘%’? PName LIKE ‘%%%’ won’t work

Instead, must use escape chars In C/C++/J, prepend ‘\’ In SQL, prepend an arbitrary escape char:

PName LIKE ‘%x%%’ ESCAPE ‘x’

Page 15: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

15

Details: More on escape chars SQL: no official default escape char In SQL*Plus: default escape char = '\'

Can set with SQL> set escape x

Other tools, DBMSs: your mileage may vary SQL string literals put in ‘ ‘:

'mystring' Single-quote literals escaped with single-

quotes: 'George''s string'

Page 16: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

16

Details: More on escape chars Q: Can an escape char be an escape string? A: No.

SQL> select * from newtable where a like '%\%%' escape '\';

A B---------- ----------h%i there

SQL> select * from newtable where a like '%\%%' escape '\\';select * from newtable where a like '%\%%' escape '\\' *ERROR at line 1:ORA-01425: escape character must be character string of length 1

Page 17: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

17

Details: More on single-quotes Dates with DATE:

DATE '1948-05-14'

Timestamps with TIMESTAMP: TIMESTAMP '1948-05-14 12:00:00'

Details may vary by DBMS

Page 18: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

18

Details: More on quotes Q: What about double quotes? A: Can’t be used in place of single quotes

But can be used when Oracle would otherwise misparse your command, e.g.:

1. Names with spaces: create table bad table name (a int, b int);

2. Reserved words as names: create table badfieldname(from int, b int);

Page 19: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

19

Complex RA/SQL Expressions Reps(ssn, name, etc.) Clients(ssn, name, rssn) Q: Who are George’s clients? Clients.name(Reps.name='George' and Reps.ssn=rssn(

Reps x Clients))

Or: Clients.name(Reps.ssn=rssn(

Reps.name='George'(Reps) x Clients))

Page 20: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

20

Complex RA Expressions People(ssn, name, street, city, state, state) Q: Who lives on George’s street? A: First, find George:

name='George'(People) Get George’s street/city/state:

street,city,state(name='George'(People)) Join with People:

People x street,city,state(name='George'(People))

Page 21: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

21

Complex RA Expressions How to specify street = street? Rename

p2(s2,c2)(People) x street,city(name='George'(People)) Now can select: street=s2 AND city=c2(p2(s2,c2)(People) x

street,city(name='George'(People))) Then project names… Only way? No. Join!

People street,city(name='George'(People)) Q: Would the following work?

street,city(name='George'(People ⋈ People))

Page 22: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

22

R.A. SQL People(ssn, name, street, city, state)

assume for clarity that cities are unique Q: Who lives on George’s street? In R.A.:street=s2 AND city=c2(p2(s2,c2)(People) x

street,city(name='George'(People))) In SQL? The other way in R.A.: People

street,city(name='George'(People)) In SQL? Later on…

Page 23: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

23

Complex RA Expressions Scenario:1. Purchase(pid, seller-ssn, buyer-ssn, etc.)2. Person(ssn, name, etc.)3. Product(pid, name, etc.)

Q: Who (give names) bought gizmos from Dick?

Where to start? Purchase uses pid, ssn, so must get them…

Page 24: C20.0046: Database Management Systems Lecture #10

M.P. Johnson, DBMS, Stern/NYU, Spring 2005

24

Complex RA Expressions

Person Purchase Person Product

name='Dick' name='Gizmo'

pid ssn

seller-ssn=ssn

pid=pid

buyer-ssn=Person.ssn

name