Transcript Chapter 9:
Chapter 9: Structured Query Language (SQL) Benefits of a Standardized Relational Language Reduced training costs Productivity Application portability Application longevity Reduced dependence on a single vendor Cross-system communication Disadvantages of a standardized relational language Stifle creativity and innovation never enough to meet all needs offspring difficult Using of compromises to change special features may result in loss of portability Terminology Data Definition Language (DDL): • Commands that define a database, including creating, altering, and dropping tables and establishing constraints. Data Manipulation Language (DML) • Commands that maintain and query a database. Data Control Language (DCL) • Commands that control a database, including administering privileges and committing data. Common SQL Commands Data Definition Language (DDL): Create Alter Data Manipulation Language (DML): Select Insert Data Drop Rename Update Delete Control Language (DCL): Grant Revoke Querying a Database with SQL SQL statement is entered SQL> SELECT loc 2 FROM dept; Statement is sent to database Database Data is displayed LOC -----------NEW YORK DALLAS CHICAGO BOSTON Writing SQL Statements SQL statements are not case sensitive (but criteria within quotation marks are) SQL statements Clauses can be on one or more lines are usually placed on separate lines Keywords cannot be split across lines Tabs and spaces are allowed to enhance readability Each SQL statement (not line) ends with a semicolon (;) Data Definition Language (DDL) Creating tables: Identify appropriate datatypes Identify columns that should accept null values Identify columns that need to be unique Identify all PK/FK mates Determine any default values to be inserted Identify columns which need a domain specification Create the table DDL example in SQL CREATE TABLE ORDER (Order_Id char not null, Order_Date date default sysdate, Customer_Id char not null, Constraint Order_pk primary key (order_Id) , Constraint Order_fk foreign key (Customer_Id) references Customer(Customer_Id)); Cust_ID Order_ID Customer Order Order_Date Data Manipulation Language (DML) This is the major focus of our coverage of SQL Most useful for querying database based on specific criteria Includes: insert, delete, update, and select DML - Inserting Useful for populating a database Syntax is: INSERT INTO Product(Product_ID, Product _Name, Unit_Price, On_Hand) VALUES (1, ‘End Table’, 175, 8); Or INSERT INTO Ca_Customer SELECT * FROM Customer WHERE State=‘CA’; DML - Deleting DELETE FROM Customer WHERE State=‘HI’; Or DELETE FROM Customer; DML - Updating UPDATE Product SET Unit_Price = 775 WHERE Product_ID = 7; DML - SELECT Statement Syntax: SELECT [DISTINCT] column_list FROM table_list [WHERE conditional expression] [GROUP BY column_list] [HAVING conditional expression] [ORDER BY column_list] ; SELECT statement processing order The Basic SELECT Statement SELECT column1, column2, column3,... FROM table; SELECT identifies what columns FROM identifies which table Example SELECT Statement SQL> SELECT deptno, loc 2 FROM dept; DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON Selecting All Columns SQL> SELECT * 2 FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ––––––––––––NEW YORK DALLAS CHICAGO BOSTON Specifying Output Headings SQL> SELECT loc AS location 2 FROM dept; LOCATION ------------NEW YORK DALLAS CHICAGO BOSTON Note Upper-Case Heading Specifying Output Headings Double quotes SQL> SELECT loc AS “Location” 2 FROM dept; Location ------------NEW YORK DALLAS CHICAGO BOSTON Note Mixed-Case Heading Duplicate Output SQL> SELECT job 2 FROM emp; JOB --------PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN ... A total of 14 records display Suppressing Duplicate Output SQL> SELECT DISTINCT job 2 FROM emp; JOB --------ANALYST CLERK MANAGER PRESIDENT SALESMAN Each unique job is listed only once Limiting Rows with WHERE SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job = ‘CLERK’; ENAME ---------JAMES SMITH ADAMS MILLER JOB SAL --------- --------CLERK 950 CLERK 800 CLERK 1100 CLERK 1300 Case sensitive; single quotes WHERE Clause Criteria Text and dates (sometimes) are enclosed in single quotes Numbers are not enclosed in quotes Text values are case sensitive Date values are format sensitive Oracle’s default date format is DD-MON-YY, Access’ default is #MM/DD/YY# SQL> SELECT ename, hiredate 2 FROM emp 3 WHERE hiredate >= ’01-Jan-82'; SQL Comparison Operators OPERATOR = > >= < <= <> or != MEANING Equal to Greater than Greater than or equal to Less than Less than or equal to Not equal to SQL Comparison Operators OPERATOR MEANING BETWEEN . . . AND . . . Is between the values specified (inclusive) IN(list) Is in a list of values specified LIKE Matches a pattern (may include wildcards) IS NULL Is a null value BETWEEN Operator Example SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500; ENAME SAL ---------- --------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300 IN Operator Example SQL> SELECT ename, job 2 FROM emp 3 WHERE job IN(‘PRESIDENT’,’MANAGER’); ENAME ---------KING BLAKE CLARK JONES JOB --------PRESIDENT MANAGER MANAGER MANAGER LIKE Operator Example SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE ‘J%’; ENAME ---------JONES JAMES The % is a wildcard character that stands for zero to many characters. The underscore character (_) can be used to stand for exactly one character. [ LIKE is not the same as = ] IS NULL Operator Example SQL> SELECT ename, mgr 2 FROM emp 3 WHERE mgr IS NULL; ENAME MGR ---------- --------KING Boolean (Logical) Operators OPERATOR AND OR NOT MEANING Joins two or more conditions and returns results only when all conditions are true Joins two or more conditions and returns results when any condition is true Negates an expression AND Operator Example SQL> 2 3 4 SELECT ename, job, sal FROM emp WHERE job = ‘CLERK’ AND sal > 1000; ENAME ---------ADAMS MILLER JOB SAL --------- --------CLERK 1100 CLERK 1300 Both conditions must be true OR Operator Example SQL> 2 3 4 SELECT ename FROM emp WHERE ename LIKE ‘J%’ OR ename LIKE ‘M%’; ENAME ---------JONES MARTIN JAMES MILLER At least one condition must be true NOT Operator Example SQL> SELECT DISTINCT job 2 FROM emp 3 WHERE job NOT LIKE ‘C%’; JOB --------ANALYST MANAGER PRESIDENT SALESMAN Arithmetic Operators OPERATOR + – * / MEANING Addition Subtraction Multiplication Division Arithmetic Expression Example SQL> SELECT ename, sal, sal*12 AS annual 2 FROM emp 3 WHERE job = ‘CLERK’; ENAME SAL ANNUAL ---------- --------- --------JAMES 950 11400 SMITH 800 9600 ADAMS 1100 13200 MILLER 1300 15600 Sorting Rows with ORDER BY SQL> SELECT ename, job, sal 2 FROM emp 3 ORDER BY ename; ENAME ---------ADAMS ALLEN BLAKE CLARK FORD ... JOB SAL --------- --------CLERK 1100 SALESMAN 1600 MANAGER 2850 MANAGER 2450 ANALYST 3000 ... ... Sorting by Multiple Fields SQL> SELECT ename, job, sal 2 FROM emp 3 ORDER BY job, ename; ENAME ---------FORD SCOTT ADAMS JAMES MILLER ... JOB SAL --------- --------ANALYST 3000 ANALYST 3000 CLERK 1100 CLERK 950 CLERK 1300 ... ... The order of the list determines the precedence of the sort order Sorting in Descending Order SQL> SELECT ename, job, sal 2 FROM emp 3 ORDER BY sal DESC; ENAME ---------KING FORD SCOTT JONES BLAKE ... JOB SAL --------- --------PRESIDENT 5000 ANALYST 3000 ANALYST 3000 MANAGER 2975 MANAGER 2850 ... ... Aggregate Functions FUNCTION COUNT MIN MAX SUM AVG MEANING Number of occurrences Minimum value Maximum value Sum of values Average of values Aggregate Function Example SQL> SELECT AVG(sal) AS “SALARY AVG” 2 FROM emp 3 WHERE job = ‘SALESMAN’; SALARY AVG ---------1400 Aggregate Function Example SQL> SELECT COUNT(*) 2 FROM emp; COUNT(*) --------14 Note: COUNT(*) returns the number of rows in a table while COUNT(field) returns the number of rows that are nonnull for the field counted Subqueries Subqueries are useful when a query is based on unknown values (e.g., “Who has a salary greater than Blake?” when Blake’s salary is unknown) Subqueries involve placing an inner query (SELECT, FROM, WHERE) within a WHERE or HAVING clause of another (outer) query The inner query is a complete query that could stand on its own and serves to provide values for the search condition of the outer query Subquery Example The inner query is enclosed in parentheses; indenting is optional SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno = 7698); ENAME ---------KING JONES FORD SCOTT The inner query determines the salary of Blake (empno = 7698) and returns it to the outer query Aggregate Function Subquery SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp); The inner query ENAME JOB SAL ---------- --------- --------SMITH CLERK 800 determines the minimum salary of all employees and returns it to the outer query Processing Multiple Tables When relationships exist between tables, the tables can be linked together in queries Relationships between tables are established by setting up primary key to foreign key relationships between columns that are common to both tables We link related tables together in SQL queries by using either joins or subqueries Joins is defined as: “A relational operation that causes two tables with a common domain to be combined into a single table” A join A join is specified in SQL by using a WHERE clause to match values for the common field between the two tables (if you were joining three tables, you would need two joining WHERE clauses) Each row in the resultant table (i.e., the join product) contains data from rows in the input tables where values for the common field match Data from Multiple Tables EMP EMPNO -----7839 7698 7782 7566 ... DEPT ENAME ----KING BLAKE CLARK JONES ... ... DEPTNO ... -----... 10 ... 30 ... 10 ... 20 ... ... DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS EMPNO DEPTNO LOC ----- ------- -------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... ... ... LOC -------NEW YORK DALLAS CHICAGO BOSTON DEPTNO is the common field joining the EMP and DEPT tables Creating a Join in SQL SELECT table1.field, table2.field, ... FROM table1, table2 WHERE table1.fieldX = table2.fieldX; Write the join condition in the WHERE clause Prefix the column name with the table name when the same column name appears in more than one table (to avoid ambiguity) SELECT empno, emp.deptno, loc FROM emp, dept WHERE emp.deptno = dept.deptno; This is the query that is shown on the previous slide 3 Table Join Example SQL> 2 3 4 SELECT ord.orderdate, item.qty, product.descrip FROM ord, item, product Note: Table name WHERE ord.ordid = item.ordid prefixes are used AND item.prodid = product.prodid; here for all fields for clarity ORDERDATE QTY DESCRIP --------- --------- -----------------------------07-JAN-87 1 ACE TENNIS NET 11-JAN-87 1 ACE TENNIS RACKET II 15-JAN-87 100 ACE TENNIS RACKET I 01-MAY-86 1 SB ENERGY BAR-6 PACK 05-JUN-86 20 ACE TENNIS BALLS-3 PACK 15-JUN-86 3 ACE TENNIS NET ... ... ... Join Types “A join in which the joining condition is based on equality between values in the common columns. Common columns appear (redundantly) in the result table.” Equi-join: join: “Same as equi-join except one of the duplicate columns is eliminated in the result table.” Natural join: “A join in which rows that do not have matching values in common columns are nevertheless included in the result table.” Outer Self join: A join that represents a recursive unary relationship of a table with itself. Equi-join Example Note table name prefixes used to specify names for common fields Note joining WHERE clause SQL> SELECT ename, emp.deptno, dept.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno; Note duplicate columns ENAME DEPTNO DEPTNO DNAME ---------- --------- --------- -------------KING 10 10 ACCOUNTING BLAKE 30 30 SALES CLARK 10 10 ACCOUNTING JONES 20 20 RESEARCH MARTIN 30 30 SALES ALLEN 30 30 SALES ... ... ... ... Natural Join Example Note elimination of duplicate field SQL> SELECT ename, emp.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno; Note elimination of duplicate column ENAME DEPTNO DNAME ---------- --------- -------------KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING JONES 20 RESEARCH MARTIN 30 SALES ALLEN 30 SALES ... ... ... Outer Join Example First, let’s run this as a natural join SQL> SELECT ename, emp.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno; A total of 14 rows ENAME DEPTNO DNAME are returned ---------- --------- -------------KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING ... ... ... MILLER 10 ACCOUNTING Outer Join Example Now, we’ll run this as an outer join; note the (+) symbol SQL> SELECT ename, emp.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno (+) = dept.deptno; ENAME DEPTNO ---------- --------KING Included is this 10 BLAKE department 30 CLARK that has no 10 employees ... ... MILLER 10 A total of 15 rows DNAME are returned -------------ACCOUNTING SALES ACCOUNTING ... ACCOUNTING OPERATIONS Using Outer Joins The outer join operator (+) can appear on only one side of the equal sign in the WHERE clause; it is placed on the side that is deficient in information A condition involving an outer join cannot be linked to another condition by the OR operator A condition involving an outer join cannot use the IN operator Group by/Having The “group by” function groups rows where the values in those rows are the same for one or more columns The “having” function can only be used in conjunction with the “group by” function. It acts as a secondary where clause. Categorizing with GROUP BY SQL> SELECT job, AVG(sal) 2 FROM emp 3 GROUP BY job; JOB AVG(SAL) --------- --------ANALYST 3000 CLERK 1037.5 MANAGER 2758.3333 PRESIDENT 5000 SALESMAN 1400 Note: Any field or expression in the SELECT list that is not an aggregate function must be in the GROUP BY clause Categorizing with GROUP BY SQL> SELECT deptno, COUNT(deptno) 2 FROM emp 3 GROUP BY deptno; DEPTNO COUNT(DEPTNO) --------- ------------10 3 20 5 30 6 Note: The GROUP BY field does not have to be in the SELECT list Limiting GROUP BY with HAVING SQL> 2 3 4 SELECT deptno, COUNT(deptno) FROM emp GROUP BY deptno HAVING COUNT(deptno) >= 5; DEPTNO COUNT(DEPTNO) --------- ------------20 5 30 6 Advanced topics…. Self Joins Used to join a table to itself Useful to query a table involved in a recursive unary relationship with itself Aliases are used in order to be able to distinguish the side of the relationship the table being referenced is on • e.g., we could reference the emp table on the employee side of a “manages” unary relationship as “e” and the same table on the manager side of the relationship as “m” Preparation for Self Join Identify the common fields SQL> SELECT empno, ename, mgr 2 FROM emp; EMPNO --------7839 7698 7782 7566 7654 7499 ... ENAME MGR ---------- --------KING BLAKE 7839 CLARK 7839 JONES 7839 MARTIN 7698 ALLEN 7698 ... ... Self Join Example Aliases SQL> SELECT e.ename, m.ename AS manager 2 FROM emp e, emp m 3 WHERE e.mgr = m.empno (+); ENAME ---------KING BLAKE CLARK JONES MARTIN ... MANAGER ---------KING KING KING BLAKE ... Note: Aliases can be useful in other situations besides self joins. Any time you wish to abbreviate a table name you can use them Correlated sub-queries A query (outer query) with a nested query (inner query) in which processing the inner query depends on data from the outer query. The inner query is processed for each outer row. See number 10 in practice set 2 Exists/Not exists Existential qualifier: used in a where clause to test whether a table contains at least one row satisfying a specific condition. Returns a true or false. List all courses which were taken by no students in the most recent semester Select name from course where not exists (Select * from Schedule where course.course_ID=schedule.course_ID); Universal Qualifier SQL does not provide direct support for a universal qualifier, but it can be accomplished… List all the students who have taken every MIS class. Select name from student where not exists (Select * from course where not exists (Select * from schedule where student.student_ID=schedule.student_ID and course.course_ID=schedule.course_ID)); Referencing a Table by Owner If you are not the owner of a table (i.e., if you did not create the table), you must append the table owner’s User ID to the table name when you reference the table Example: SQL> SELECT ename, mgr 2 FROM demo.emp; Synonyms The User ID of the owner of the emp table is demo can be created by the DBA to reduce the necessity of this referencing A Final Example SQL> SELECT ename, emp.deptno, loc as city 2 FROM demo.emp, demo.dept 3 WHERE emp.deptno = dept.deptno 4 AND emp.deptno <> 10 How many 5 ORDER BY city, ename; different ENAME DEPTNO CITY ---------- ---------- ------------ALLEN 30 CHICAGO BLAKE 30 CHICAGO ... ... ... ADAMS 20 DALLAS ... ... ... SMITH 20 DALLAS skills are shown here? Do you understand the result of this query? (11 records)