430 likes | 574 Views
S Q L. STRUCTRED QUERY LANGUAGE DDL AND DML COMPONENTS RELATIONAL COMPLETE ANSI / ISO STANDARD + DIALECTS (e.g., Microsoft Jet SQL) SQL DATABASES ODBC - OPEN DATA BASE CONNECTIVITY. SELECT STATEMENT. SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY.
E N D
S Q L • STRUCTRED QUERY LANGUAGE • DDL AND DML COMPONENTS • RELATIONAL COMPLETE • ANSI / ISO STANDARD + DIALECTS (e.g., Microsoft Jet SQL) • SQL DATABASES • ODBC - OPEN DATA BASE CONNECTIVITY S Q L
SELECT STATEMENT SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... • SELECT STATEMENT WORKS ON TABLE(S) AND GENERATES A TABLE OF OUTPUT • RESULT COULD BE NULL S Q L
Relational Operations Project Select Select & Project S Q L
Set Operations UNION A È B A B A Ç B INTERSECT SUBTRACT A - B A A B B S Q L
Join Operations (1) SELECT * FROM A, B WHERE Join Criteria is true Most common Join: A is Parent and B is Child. Join the two tables together to find out who is related to who. SELECT * FROM A, B WHERE A.[PRIMARY KEY] = B.[FOREIGN KEY] S Q L
Join Operation (2) • The above is an example of an EQUI JOIN. • Assume A has m rows and B has n rows. • A Cartesian Product ( A x B ) of the two tables is formed first resulting in a ( m x n ) table (this is for illustration only). • The Join Criteria is applied to the table and only those that satisfy the Criteria are selected. S Q L
Join Operation (3) • Those columns specified will be Projected. • The GROUP BY, ORDER BY and HAVING operations will then be applied to the result table to produce the final result table. S Q L
Different Types of Joins (1) • EQUI Joins or Inner Joins • SELF Joins • OUTER Joins Sample Schema S Q L
Different Types of Joins (2) Sample Tables Employee Project Assignment Project S Q L
Different Types of Joins (3) • List Employees and the Projects they are working on. • Inner Join SELECT Name as [Employee], ProjectName as [Project], Format(PercentTime,"##0.00%") AS [Percent of Time] FROM Employee, [Project Assignment], Project WHERE Employee.[SSN] = [Project Assignment].[SSN] And [Project Assignment].[ProjectID] = Project.[ProjectID]; S Q L
Different Types of Joins (3a) • List Employees and the Projects they are working on. • Inner Join Results S Q L
Different Types of Joins (4) • List all Employees and the Projects they are working on (or blank). • Left Outer Join (MS Access dialect here) SELECT Name as [Employee], ProjectName as [Project], Format(PercentTime,"##0.00%") AS [Percent of Time] FROM Employee LEFT JOIN [Project + Assignment] ON Employee.[SSN] = [Project + Assignment].[SSN]; SELECT Project.ProjectID, ProjectName, SSN, PercentTime FROM Project INNER JOIN [Project Assignment] ON Project.ProjectID = [Project Assignment].ProjectID; S Q L
Different Types of Joins (4a) • List all Employees and the Projects they are working on (or blank). • Left Outer Join results S Q L
Different Types of Joins (5) • List all Employees and their Managers • Self Join SELECT A.Name AS Employee, B.Name AS Manager FROM Employee AS A, Employee AS B WHERE A.ManagerSSN = B.SSN ORDER BY A.Name; S Q L
Different Types of Joins (5a) • List all Employees and their Managers • Self Join result S Q L
Different Types of Joins (6) • List all Managers and their Employees • Self Join SELECT A.Name AS Manager, B.Name AS Employee FROM Employee AS A, Employee AS B WHERE A.SSN = B.ManagerSSN ORDER BY A.Name; S Q L
Different Types of Joins (6a) • List all Managers and their Employees • Self Join results S Q L
CROSSTAB QUERIES (1) ** MS Access Dialect ** TRANSFORMaggregate function AS [The Value] SELECTrow item, aggregate function FROMsome query GROUP BYrow item PIVOTcolumn item; S Q L
CROSSTAB QUERIES (2) • NEED EMPLOYEE SALES BY … QUERY • START WITH AN ENCOMPASSING QUERY: [EMPLOYEE SALES QUERY] SELECT * FROM EMPLOYEE,SALE,COMPSALE,INV WHERE EMPLOYEE.[EMPLOYEE ID NO] = SALE.[EMPLOYEE ID NO] AND SALE.[SALE ID NO] = COMPSALE.[SALE ID NO] AND INV.[ITEM NO] = COMPSALE.[ITEM NO]; S Q L
CROSSTAB QUERIES (3) • EMPLOYEESALES BY INV ITEMS TRANSFORM COUNT(COMPSALE.[ITEM NO]) AS [The Value] SELECT [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] AS EMPLOYEE, COUNT(COMPSALE.[ITEM NO]) AS COUNT FROM [EMPLOYEE SALES QUERY] GROUP BY [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] PIVOT[ITEM DESCRIPTION] ; S Q L
CROSSTAB QUERIES (4) • EMPLOYEE SALES BY INV ITEMS QUERY RESULTS (MORE COLUMNS NOT SHOWN): S Q L
CROSSTAB QUERIES (5) • EMPLOYEE SALES BY MONTH TRANSFORM COUNT(COMPSALE.[ITEM NO]) AS [The Value] SELECT [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] AS EMPLOYEE, COUNT(COMPSALE.[ITEM NO]) AS COUNT FROM [EMPLOYEE SALES QUERY] GROUP BY [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] PIVOTMONTH([SALE DATE]) ; S Q L
CROSSTAB QUERIES (6) • EMPLOYEE SALES BY MONTH QUERY RESULTS: S Q L
CROSSTAB QUERIES (7) • EMPLOYEE SALES BY YEAR MONTH TRANSFORM COUNT(COMPSALE.[ITEM NO]) AS [The Value] SELECT [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] AS EMPLOYEE, YEAR([SALE DATE]) AS YEAR, COUNT(COMPSALE.[ITEM NO]) AS COUNT FROM [EMPLOYEE SALES QUERY] GROUP BY [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME], YEAR([SALE DATE]) PIVOT MONTH([SALE DATE]); S Q L
CROSSTAB QUERIES (8) • EMPLOYEE SALES BY YEAR MONTH QUERY RESULTS: S Q L
CROSSTAB QUERIES (9) • EMPLOYEE SALES $ BY MONTH TRANSFORM SUM(COMPSALE.[QUANTITY SOLD]*[SALES PRICE]) AS [The Value] SELECT [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] AS EMPLOYEE, SUM([QUANTITY SOLD]*[SALES PRICE]) AS SALES FROM [EMPLOYEE SALES QUERY] GROUP BY [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME] PIVOT MONTH([SALE DATE]); S Q L
CROSSTAB QUERIES (10) • EMPLOYEE SALES $ BY MONTH QUERY RESULTS: S Q L
CROSSTAB QUERIES (11) • ITEM SALES BY EMPLOYEES TRANSFORM COUNT(COMPSALE.[ITEM NO]) AS [The Value] SELECT [ITEM DESCRIPTION] AS ITEM, COUNT(COMPSALE.[ITEM NO]) AS COUNT FROM [EMPLOYEE SALES QUERY] GROUP BY [ITEM DESCRIPTION] PIVOT [EMPLOYEE LAST NAME]&", "&[EMPLOYEE FIRST NAME]; S Q L
CROSSTAB QUERIES (12) • ITEM SALES BY EMPLOYEES QUERY RESULTS (SOME ROWS & COLUMNS NOT SHOWN): S Q L
CROSSTAB QUERIES (13) • ITEM SALES BY MONTH QUERY RESULTS: S Q L
CROSSTAB QUERIES (14) • ITEM SALES BY YEARMONTH QUERY RESULTS: S Q L
CROSSTAB QUERIES (15) • ITEM SALES BY STATE QUERY RESULTS (NEED CUSTOMER IN QUERY): S Q L
UNION QUERIES (1) JOIN TWO TABLES UNION TWO TABLES S Q L
UNION QUERIES (2) • THE TABLES MUST BE UNION COMPATIBLE • SAME NUMBER OF COLUMNS • CORRESPONDING COLUMNS MUST HAVE THE SAME DOMAIN • NO NEED FOR SAME COLUMN NAME • NOT SORTED SELECT … UNION SELECT ... S Q L
UNION QUERIES (3) TABLES • LIST TOP 2 EMPLOYEES BY SALES AMOUNT AND TOP 4 BY VOLUME FOR RECEIVING INCENTIVE AWARDS • NEED SEPARATE QUERIES TO FIND THOSE EMPLOYEES AND UNION THE TWO RESULTS SETS UNION A È B A B S Q L
UNION QUERIES (4) • QUERY [EMPLOYEE TOTAL SALES]: • QUERY [EMPLOYEE TOTAL VOLUME]: SELECT EMPLOYEE.[EMPLOYEE ID NO], SUM([QUANTITY SOLD]*[SALES PRICE]) AS [TOTAL SALES] FROM EMPLOYEE, SALE, COMPSALE WHERE EMPLOYEE.[EMPLOYEE ID NO]=SALE.[EMPLOYEE ID NO] AND SALE.[SALE ID NO]=COMPSALE.[SALE ID NO] GROUP BY EMPLOYEE.[EMPLOYEE ID NO] ORDER BY SUM([QUANTITY SOLD]*[SALES PRICE]) DESC; SELECT EMPLOYEE.[EMPLOYEE ID NO], COUNT([QUANTITY SOLD]) AS [TOTAL VOLUME] FROM EMPLOYEE, SALE, COMPSALE WHERE EMPLOYEE.[EMPLOYEE ID NO]=SALE.[EMPLOYEE ID NO] AND SALE.[SALE ID NO]=COMPSALE.[SALE ID NO] GROUP BY EMPLOYEE.[EMPLOYEE ID NO] ORDER BY COUNT([QUANTITY SOLD]) DESC; S Q L
UNION QUERIES (5) • QUERY [EMPLOYEE AWARDS] AND RESULTS (DUPLICATES ELIMINATED): SELECT TOP 2 [EMPLOYEE ID NO] FROM [EMPLOYEE TOTAL SALES] UNION SELECT TOP 4 [EMPLOYEE ID NO] FROM [EMPLOYEE TOTAL VOLUME]; S Q L
UNION QUERIES (6) • QUERY [EMPLOYEE AWARDS] AND RESULTS (DUPLICATES INCLUDED): SELECT TOP 2 [EMPLOYEE ID NO] FROM [EMPLOYEE TOTAL SALES] UNION ALL SELECT TOP 4 [EMPLOYEE ID NO] FROM [EMPLOYEE TOTAL VOLUME]; S Q L
UNION QUERIES (7) • To get additional information about the Employees from the query [EMPLOYEE AWARDS]: SELECT EMPLOYEE.[EMPLOYEE ID NO], [EMPLOYEE FIRST NAME]&" "&[EMPLOYEE LAST NAME] AS [EMPLOYEES] FROM EMPLOYEE, [EMPLOYEE AWARDS] WHERE EMPLOYEE.[EMPLOYEE ID NO]=[EMPLOYEE AWARDS].[EMPLOYEE ID NO]; ? How do you show who won which award (sales or volume) ? S Q L
SQL UPDATES (1) INSERTION OF A SINGLE ROW (TUPLE) INTO A TABLE INSERT INTO CUSTOMER ( [CUSTOMER ID NO], [CUSTOMER FIRST NAME], [CUSTOMER LAST NAME], [ADDRESS LINE ONE], [ADDRESS LINE TWO], CITY, STATE, [ZIP CODE], [AREA CODE], PHONE ) VALUES( '235568', 'JOHN', 'BENSON-SMITH', '23 WESTERN AVE', '', 'SAN JOSE', 'CA', '92113', '408', '2154552’); ** MS Access changes VALUES(...) to SELECT … ** S Q L
SQL UPDATES (2) DELETION OF ROW(S) FROM A TABLE DELETE FROM CUSTOMER WHERE [CUSTOMER ID NO] = ‘235568’; DELETE FROM CUSTOMER WHERE [STATE] = “WA”; S Q L
SQL UPDATES (3) UPDATE ROW(S) IN A TABLE UPDATE EMPLOYEE SET [SALARY REVIEW DATE] = #1/30/98# WHERE YEAR([SALARY REVIEW DATE]) = 1990; UPDATE INV SET [PRICE] = [PRICE] * 1.025 WHERE [ITEM DESCRIPTION] LIKE “*SONY*”; S Q L