1.264 lecture 5 · 2004. 9. 20. · • ms access syntax for previous example: – select ordernbr,...

24
1.264 Lecture 7 Introduction to SQL

Upload: others

Post on 06-May-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

1.264 Lecture 7

Introduction to SQL

Page 2: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Structured Query Language (SQL)

• Lecture 7– SELECT, INSERT, DELETE, UPDATE– Joins

• Lecture 8– Subqueries– Views (virtual tables)– Indexes– Transactions– Security– Performance

Page 3: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SQL

• Structured query language (SQL) used for– Data definition: tables and views (virtual tables)– Data retrieval: by user (ad hoc queries) or program– Data manipulation: user or program can add, delete, change

data– Access control– Data sharing: by concurrent users– Data integrity: by defining integrity constraints

• Not a complete language like Java, Visual Basic or C++– SQL is sub-language of about 30 statements– Usually embedded in another language or tool for database

access– SQL has several inconsistencies; NULLs are problematic– Portable across operating systems and somewhat among

vendors

Page 4: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Things that vary among SQL implementations

• Error codes• Data types supported (dates/times, currency, string

variations)• System tables, about the structure of the database

itself• Interactive SQL• Programming interface: no vendor follows the

standard• Dynamic SQL, used for report writers and query

tools• Implementor-defined variations within the standard• Database initialization, opening and connection

Page 5: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Basic SQL statement types

• Basic types– SELECT– INSERT– UPDATE – DELETE

• SELECT is most important and complex. Used:– By itself to retrieve data (into forms, reports,

queries, programs)– Part of INSERT to produce new rows– Part of UPDATE to update rows– Part of DELETE to remove rows

Page 6: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SQL SELECT

• SELECT constructed of clauses to get columns and rows from one or more tables or views. Clauses must be in order:– SELECT columns– FROM table or view– INTO new table– WHERE specific rows or a join is created– GROUP BY grouping conditions (columns)– HAVING group-property (specific rows)– ORDER BY ordering criterion

Page 7: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Example tablesOrderNbr Cust Prod Qty Amt Disc

1 211 Bulldozer 7 $31,000.00 0.22 522 Riveter 2 $4,000.00 0.33 522 Crane 1 $500,000.00 0.4

Orders

CustNbr Company CustRep CreditLimit211 Connor Co 89 $50,000.00522 AmaratungaEnterprise 89 $40,000.00890 Feni Fabricators 53 $1,000,000.00

Customers

RepNbr Name RepOffice Quota Sales53 Bill Smith 1 $100,000.00 $0.0089 Jen Jones 2 $50,000.00 $130,000.00

SalesReps

OfficesOfficeNbr City State Region Target Sales Phone

1 Denver CO West $3,000,000.00 $130,000.00 970.586.33412 New York NY East $200,000.00 $300,000.00 212.942.5574

57 Dallas TX West $0.00 $0.00 214.781.5342

Page 8: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Example schema

OfficeNbrCityRegionTargetSalesStatePhone

Offices

RepNbrNameQuotaSalesOfficeNbr (FK) (IE)

SalesReps

CustNbrCompanyCreditLimitRepNbr (FK) (IE)

CustomersOrderNbrProdQtyAmtCustNbr (FK) (IE)Disc

Orders

Page 9: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SQL queries: SELECT

• List the sales reps– SELECT Name, Sales, Quota FROM SalesReps;

• Find the amount each rep is over or under quota– SELECT Name, Sales, Quota, (Sales-Quota) FROM

SalesReps;• Find the slackers

– SELECT Name, Sales, Quota, (Sales-Quota) FROM SalesReps WHERE Sales < Quota;

RepNbr Name RepOffice Quota Sales53 Bill Smith 1 $100,000.00 $0.0089 Jen Jones 2 $50,000.00 $130,000.00

Page 10: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SQL queries: calculation, insert, delete, update

• Find the average sale– SELECT AVG(Amt) FROM Orders;

• Find the average sale for a customer– SELECT AVG(Amt) FROM Orders WHERE Cust = 211;

• Add an office– INSERT INTO Offices (OfficeNbr, City, Region, Target, Sales)

VALUES (‘55’, ‘Dallas’, ‘West’, 200000, 0);• Delete a customer

– DELETE FROM Customers WHERE Company = ‘Connor Co’;• Raise a credit limit

– UPDATE CustomersSET CreditLimit = 75000 WHERE Company = ‘Amaratunga

Enterprises’;

Page 11: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SELECT: * and duplicates

• Select all columns (fields)– SELECT * FROM Offices;

• Duplicate rows: query will get two instances of ‘West’– SELECT Region FROM Offices;

• Eliminate duplicates:– SELECT DISTINCT Region FROM Offices;– (MS Access wizards use nonstandard

DISTINCTROW keyword, which is different than DISTINCT when there are joins)

Page 12: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

NULLs

• NULL values evaluate to NOT TRUE in all cases.– Insert ‘NewRep’ with NULL (blank or empty) Quota

• The following two queries will not give all sales reps:– SELECT Name FROM SalesReps WHERE Sales > Quota;– SELECT Name FROM SalesReps WHERE Sales <= Quota;– A new rep with a NULL quota will not appear in either list

• Check for NULLS by:– SELECT Name FROM SalesReps WHERE Quota IS NULL;

Page 13: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SELECT Operators• SELECT * FROM <table>

– WHERE Disc*Amt > 50000; (Orders)– WHERE Quota BETWEEN 50000 AND 100000; (SalesReps)

• Range is inclusive (>=50000 and <=100000)– WHERE State IN (‘CO’, ‘UT’, ‘TX’); (Offices)– WHERE RepNbr IS NOT NULL; (SalesReps)– WHERE Phone NOT LIKE ‘21%’; (Offices)

• SQL standard only has 2 wildcards• % any string of zero or more characters (* in Access)• _ any single character (? in Access)

• Most databases have additional/different wildcards. MS Access has:

• ? (any single character), • * (any number of characters), • # (any single digit), • [list] any single character in list, • [!list]

Page 14: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

SELECT: COUNT, GROUP BY

• Number of parts from vendor A– SELECT COUNT(*) FROM Parts WHERE Vendor = ‘A’;– Result: 4

• Number of parts from each vendor– SELECT Vendor, COUNT(*) AS PartsCount FROM Part

GROUP BY Vendor;– Result:

PartID Vendor123 A234 A345 B362 A

2345 C3464 A4533 C

Parts

Vendor PartsCountA 4B 1C 2

Page 15: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Exercises

• What is the average credit limit of customers whose credit limit is less than $1,000,000?

• How many sales offices are in the West region?

• Increase the price of bulldozers by 30% in all orders

• Delete any sales rep with a NULL quota

Page 16: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Exercises

• What is the average credit limit of customers whose credit limit is less than $1,000,000?– SELECT AVG(CreditLimit) FROM Customers WHERE

CreditLimit < 1000000;• How many sales offices are in the West region?

– SELECT Count(*) FROM Offices WHERE Region= 'West‘;• Increase the price of bulldozers by 30% in all

orders– UPDATE Orders SET Amt= Amt*1.3 WHERE Prod=

'Bulldozer‘;• Delete any sales rep with a NULL quota

– DELETE FROM SalesReps WHERE Quota IS NULL;

Page 17: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Joins• Relational model permits you to bring data from

separate tables into new and unanticipated relationships.

• Relationships become explicit when data is manipulated: when you query the database, not when you create it.– This is critical; it allows extensibility in databases. The

FAA never thought its data would be used in 1.264 along with DOT carrier data, a zip code table and some new order tables. This is reuse!

– You can join on any columns in tables, as long as data types match and the operation makes sense. They don’t need to be keys, though they usually are.

• Good joins– Join column is usually key column: either primary key or

foreign key– Join columns must have compatible data types– Nulls will never join

Page 18: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Joins• List all orders, showing order number and amount, and name

and credit limit of customer– Orders has order number and amount, but no customer names or

credit limits– Customers has customer names and credit limit, but no order info

• SELECT OrderNbr, Amt, Company, CreditLimit FROM Customers, Orders WHERE Cust = CustNbr;(Standard SQL)

• SELECT OrderNbr, Amt, Company, CreditLimit FROM Customers INNER JOIN Orders ON Customers.CustNbr = Orders.Cust;(Access)

CustNbr Company CustRep CreditLimit211 Connor Co 89 $50,000.00522 Amaratunga Enterprises 89 $40,000.00890 Feni Fabricators 53 $1,000,000.00

OrderNbr Cust Prod Qty Amt Disc1 211 Bulldozer 7 $31,000.00 0.22 522 Riveter 2 $4,000.00 0.33 522 Crane 1 $500,000.00 0.4

Join

Page 19: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

OrderNbr Cust Prod Qty Amt Disc1 211 Bulldozer 7 $31,000.00 0.22 522 Riveter 2 $4,000.00 0.33 522 Crane 1 $500,000.00 0.4

Join with 3 tables• List orders over $25,000, including the name of the

salesperson who took the order and the name of the customer who placed it.– SELECT OrderNbr, Amt, Company, Name FROM Orders,

Customers, SalesReps WHERE Cust = CustNbr AND CustRep = RepNbr AND Amt >= 25000; (Standard SQL)

CustNbr Company CustRep CreditLimit211 Connor Co 89 $50,000.00522 Amaratunga Enterprises 89 $40,000.00890 Feni Fabricators 53 $1,000,000.00

RepNbr Name RepOffice Quota Sales53 Bill Smith 1 $100,000.00 $0.0089 Jen Jones 2 $50,000.00 $130,000.00

OrderNbr Amt Company Name1 $34,000.00 Connor Co Jen Jones3 $500,000.00 AmaratungaEnterprise Jen Jones

Result:

Page 20: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Join notes

• MS Access syntax for previous example:– SELECT OrderNbr, Amt, Company, Name

FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr = Orders.Cust) ON SalesReps.RepNbr = Customers.CustRep WHERE Amt >= 25000;

– This is messy; we will use MS Access query tool to build SQL

• Use * carefully in joins– It gives all columns from all tables being joined

• If a field has the same name in the tables being joined, qualify the field name:– Use table1.fieldname, table2.fieldname– Customers.CustNbr, Orders.Amt, etc.

Page 21: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Self joinsEmpNbr Name Title Mgr

105 Mary Smith Analyst 104109 Jill Jones Sr Analyst 107104 Sally Silver Manager 111107 Pat Brown Manager 111111 Eileen Howe President

• We want to list the analysts and their managers– Manager could be foreign key into manager table, but it has to

be a ‘foreign’ key into the employee table itself in this case• Attempt 1:

– SELECT Name, Name FROM Employee, Employee WHERE Mgr = EmpNbr; (Standard SQL)

– Fails because it references Employee table twice– Removing 2nd reference also fails; query looks for rows

where person is her own manager, which is not what we want.

Page 22: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Self joinsEmpNbr Name Title Mgr

105 Mary Smith Analyst 104109 Jill Jones Sr Analyst 107104 Sally Silver Manager 111107 Pat Brown Manager 111111 Eileen Howe President

• Attempt 2: Pretend there are 2 copies of Employee table, once named Emp, the other named Mgr:– SELECT Emp.Name, Mgr.Name FROM Emp, Mgr WHERE

Emp.Mgr = Mgr.EmpNbr; (Std SQL)• SQL essentially lets us do this by giving aliases. Valid:

– SELECT Emp.Name, Mgr.Name FROM Employee Emp, Employee Mgr WHERE Emp.Mgr = Mgr.EmpNbr (Std SQL)

– SELECT Emp.Name, Mgr.Name FROM Employee AS Emp INNER JOIN Employee AS Mgr ON Emp.Mgr = Mgr.EmpNbr (Access)

– We actually only need to use 1 alias (Mgr)

Page 23: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Exercises

• List customer names whose credit limit is greater than their sales rep’s quota. Also list the credit limit and quota.

• List each rep’s name and phone number

Page 24: 1.264 Lecture 5 · 2004. 9. 20. · • MS Access syntax for previous example: – SELECT OrderNbr, Amt, Company, Name FROM SalesReps INNER JOIN (Customers INNER JOIN Orders ON Customers.CustNbr

Exercises

• List customer names whose credit limit is greater than their sales rep’s quota. Also list the credit limit and quota.– SELECT CreditLimit, Quota, Company FROM SalesReps

INNER JOIN Customers ON SalesReps.RepNbr = Customers.CustRep WHERE CreditLimit>Quota;

• List each rep’s name and phone number– SELECT Name, Phone FROM Offices INNER JOIN

SalesReps ON Offices.OfficeNbr = SalesReps.RepOffice;