* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Lesson-C - uob.edu.bh
Survey
Document related concepts
Open Database Connectivity wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Microsoft SQL Server wikipedia , lookup
Ingres (database) wikipedia , lookup
Clusterpoint wikipedia , lookup
Entity–attribute–value model wikipedia , lookup
Relational algebra wikipedia , lookup
Object-relational impedance mismatch wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Relational model wikipedia , lookup
Database model wikipedia , lookup
Transcript
ITBIS373 Database Development Lecture3c - Chapter 3: Using SQL Queries to Insert, Update, Delete, and View Data Guide to Oracle 10g Lesson C Objectives After completing this lesson, you should be able to: Create SQL queries that join multiple tables Create nested SQL queries Combine query results using set operators Create and use database views Guide to Oracle 10g 2 Joining Multiple Tables Join Combine data from multiple database tables using foreign key references Syntax SELECT column1, column2, … FROM table1, table2 WHERE table1.joincolumn = table2.joincolumn AND search_condition(s); Guide to Oracle 10g 3 Joining Multiple Tables (continued) Must qualify column name in SELECT clause Join condition Specify name of table that contains column followed by period then column name Specifies table names to be joined and column names on which to join tables SQL supports multiple types of join queries Guide to Oracle 10g 4 Inner Joins Simplest type of join VALUES in one table equal to values in other table Also called: Equality join Equijoin Natural join Query design diagram Guide to Oracle 10g 5 Guide to Oracle 10g 6 Fig 3-43 to retrieve the student Id, student last and first names, advisor ID, and advisor last name. Guide to Oracle 10g 7 In SQL queries, you can join any number of tables in SELECT command. When join tables, the name of each table in the query must appear in the FROM clause. This includes tables whose columns are display columns, which are columns that appear in the SELECT clause, and whose columns are search columns, which appear in search condition. The primary key and foreign key columns on which you join the tables are called join columns. Guide to Oracle 10g 8 When you join multiple tables, sometimes you must join the tables using an intermediary table whose columns are not display or search columns, but whose columns are join columns that serve to join the two tables. For example, suppose you want to create a query that lists the last names of all faculty members who teach during the Summer 2007 term. Guide to Oracle 10g 9 Visual Representation of the Northwoods University Database Guide to Oracle 10g 10 Guide to Oracle 10g 11 Guide to Oracle 10g 12 Guide to Oracle 10g 13 A linking table does not contribute any as display columns or search condition columns, but contains join columns that link the other tables through shared foreign key values. Guide to Oracle 10g 14 Some times queries that join multiple tables can become complex. For example, suppose that you want to create a query to display the COURSE_NO and GRADE values for each of student ‘Tammy Jones’ courses. This query requires you to join four table: STUDENT (to search for S_FIRST and S_LAST), ENROLLMENT (to display GRADE), COURSE to display COURSE_NO), and COURSE_SECTION (to join ENROLLMENT to COURSE using the C_SEC_ID join column). Guide to Oracle 10g 15 Guide to Oracle 10g 16 Deriving a SQL Query From a Query Design Diagram Guide to Oracle 10g 17 Guide to Oracle 10g 18 If you accidentally omit a join condition in a multipletable query, the output retrieves more rows than you expect. When you omit a join condition, the query creates a Cartesian product, whereby every row in one table is joined with every row in the other table. For example , suppose you repeat the query to show each student row, along with each student’s advisor (see Fig 3-43), but you omit the join condition. Every row in the STUDENT table (six rows) is joined with every row in the FACULTY table (five rows). The result is 6 times 5 rows, or 30 rows. Guide to Oracle 10g 19 Guide to Oracle 10g 20 Outer Join An inner join returns rows only if values exist in all tables that are joined. If no values exist for a row in one of the joined tables, the inner join does not retrieve the row. For example suppose you want to retrieve the different locations of the courses included in the COURSE_SECTION table. This query requires joining rows in the LOCATION and COURSE_SECTION tables. Not every location in the LOCATION table has an associated COURSE_SECTION row, so the query retrieves rows only for locations that have associated COURSE_SECTION rows. Guide to Oracle 10g 21 Guide to Oracle 10g 22 SQL> SELECT c_sec_id, location.loc_id 2 From course_section, location 3 Where course_section.loc.id = location.loc_id; C_SEC_ID LOC_ID ----------------------1 1 11 1 3 2 8 3 6 5 7 5 10 5 13 5 9 5 4 6 12 6 5 6 2 7 Guide to Oracle 10g 23 An outer join returns all rows from one table , which is called the inner table. An outer join also retrieves matching rows from a second table, which is called the outer table. The query designer specifies which table is the inner table and which table is the outer table. In this case, because you want to retrieve all of the rows in the LOCATION table, you specify LOCATION as the inner table. Guide to Oracle 10g 24 Outer Joins Returns all rows from one table And matching rows from second table Called inner table Called outer table Syntax inner_table.join_column = outer_table.join_column(+) The outer join operator (+) signals the DBMS to insert a NULL value for the columns in the outer table that do not have matching rows in the inner table. Guide to Oracle 10g 25 Guide to Oracle 10g 26 Self-Joins Sometimes a relational database table contains a foreign key that references a column in the same table. For example, at Northwood's University each assistant and associate professor is assigned to full professor who serves as the junior professor’s supervisor. Guide to Oracle 10g 27 Self-Joins To create a query that lists the names of each junior faculty member and the names of their supervisor, you must join the FACULTY table to itself. When you create a query that joins a table to it self, you create a selfjoin. To create a self-join, you must create a table alias and structure the query as if you are joining the table to a copy of itself. The syntax to create a table alias in the FORM clause is: FROM table1 alias1,…… When you create a table alias, you must the use the table alias, rather than the table name, to qualify column names in the SELECT clause and in join condition. T o make the process easier to understand, you create two table aliases _FAC for faculty version of the table and SUPER for the supervisor version of the same table, as shown in Fig 3-51. Guide to Oracle 10g 28 Guide to Oracle 10g 29 Guide to Oracle 10g 30 PARENT_PROJECT P_ID Self Joins PROJECT_NAME 1 Hardware Support Intranet CLIENT_ID MGR_ID PARENT_P_ID 2 105 2 Hardware Support Interface 2 103 1 3 Hardware Support Database 2 102 1 4 T eller Support System 4 105 5 Internet Advertising 6 105 6 Network Design 6 104 7 Exploration Database 5 102 5 SUB_PROJECT P_ID PROJECT_NAME 1 Hardware Support Intranet CLIENT_ID MGR_ID PARENT_P_ID 2 105 2 Hardware Support Interface 2 103 1 3 Hardware Support Database 2 102 1 4 T eller Support System 4 105 5 Internet Advertising 6 105 6 Network Design 6 104 7 Exploration Database 5 102 5 PROJECT P_ID PROJECT_NAME 1 Hardware Support Intranet CLIENT_ID MGR_ID PARENT_P_ID 2 105 2 Hardware Support Interface 2 103 1 3 Hardware Support Database 2 102 1 4 T eller Support System 4 105 5 Internet Advertising 6 105 6 Network Design 6 104 7 Exploration Database 5 102 Guide to Oracle 10g 5 31 Self Join Example Guide to Oracle 10g 32 Creating Nested Queries Nested query Consists of main query and one or more subqueries Main query First query that appears in SELECT command Subquery Retrieves values that main query’s search condition must match Guide to Oracle 10g 33 Creating Nested Queries with Subqueries that Return a Single Value Guide to Oracle 10g 34 The query in Fig 3-54 to retrieve the names of all students who have the same S_CLASS value as student Jorge Perez. Guide to Oracle 10g 35 Creating Subqueries that Return Multiple Values. To create a nested query in which the subquery retrieves multiple values. You must use IN comparison operator instead of the equal to comparison operator. Ex: To retrieve the names of all students who have enrolled in the same course sections as Jorge Perez. Note that the main query’s search conditions uses the IN comparison operator, because the sub-query returns multiple values. Guide to Oracle 10g 36 ENROLLEMENT S_ID C_SEC_ID PE100 1 PE100 5 PE100 6 PE100 9 JO100 1 JO100 6 JO100 9 MA100 1 JO101 5 JO101 9 GRADE B A B B C C C B C C Guide to Oracle 10g 37 Guide to Oracle 10g 38 Using Multiple Subqueries Within a Nested Query Use AND and OR operators To join search conditions associated with subqueries. Ex: Fig 3-53 is used to retrieve the names of all students who have the same S_CLASS value as Jorge Perez and who have also been enrolled in course section with him Guide to Oracle 10g 39 Guide to Oracle 10g 40 Creating Nested Subqueries Nested subquery Subquery that contains second subquery that specifies its search expression Guide to Oracle 10g 41 USING SET Operator to Combine Query Results UNION set operator Joins output of two unrelated queries into single output result Syntax query1 UNION query2; Both queries must have the same number of display columns in their SELECT clauses must have the same data type For example, if the display columns retuned by query1 are a NUMBER data column and then a VARCHAR2 data column, then the display columns returned by query2 must also be a NUMBER data column followed by a VARCHAR2 data column. UNION ALL operator Same as UNION but includes duplicate rows Guide to Oracle 10g 42 Ex: Create a telephone directory of every student and faculty member at Northwood's University Guide to Oracle 10g 43 INTERSECT Finds intersection in two queries Requires that both queries have same number and data types of display columns in SELECT statement Automatically suppresses duplicate rows. Guide to Oracle 10g 44 Guide to Oracle 10g 45 INTERSECT Some queries require an output that finds the intersection, or matching rows, in two unrelated queries. For example, suppose you need to find a list of faculty members whose offices are in the BUS building and who have also taught a course in the BUS building. Guide to Oracle 10g 46 MINUS To find difference between two unrelated query result list. As with the UNION and INTERSECT operators, the MINUS operator requires that both queries have the same number of display columns in the SELECT statement, and that each column in the first query has the same data type as corresponding column in the second query. Guide to Oracle 10g 47 Guide to Oracle 10g 48 Guide to Oracle 10g 49 Creating and Using Database Views Source query Used to create view Specify subset of single table’s columns or rows or join multiple tables Updatable views Can be used to update database Guide to Oracle 10g 50 Database Views Logical table based on a query Does not physically exist in the database as table Presents data in a different format from underlying tables Uses: Security Simplifying complex queries Guide to Oracle 10g 51 Database Views Creating a view: CREATE VIEW view_name AS SQL_command; Views can be queried just like tables: SELECT * FROM view_name; Guide to Oracle 10g 52 Simple Views Based on SQL query that retrieves data from only one table View can support all table DML operations: INSERT UPDATE DELETE Can also execute update action queries and delete action queries using view Just as with database table Guide to Oracle 10g 53 Complex Views Based on query that retrieves data from multiple tables Can only be used to support SELECT operations No DML operations supported Guide to Oracle 10g 54 Creating Views If there is possibility that you have already created a view using a specific name, you can use the following command to create or replace the existing view according to this syntax. CREATE OR REPLACE VIEW view_name AS source_query; Guide to Oracle 10g 55 Ex: This view contains all of the FACULTY columns except F_PIN and F_IMAGE Guide to Oracle 10g 56 Executing Action Queries Using Views 1- To insert a row using the FACULTY_VIEW INSERT INTO faculty_view VALUE (6,’may’,’Lisa,’I’,11,’7155552508’,’INST’) 2- Type SELECT * FROM faculty_view; to determine whether the new faculty member is included in the table. Type DELETE FROM faculty_view WHERE f-last =‘MAY’; to delete the new faculty member. Guide to Oracle 10g 57 Retrieving Rows from Views. You can query a view using a SELECT statement, just as with a database table, and use the view in complex queries that involve join operations and subqueries. You create a query that joins FACULTY_VIEW with the LOCATION to list the names of each faculty member, along with the building code and room number of the faculty member’s office. Guide to Oracle 10g 58 Guide to Oracle 10g 59 Removing Views DROP VIEW command Remove view from user schema Syntax DROP VIEW view_name; Ex: DROP VIEW faculty_view; Guide to Oracle 10g 60 Selecting Records For Update Syntax: SELECT column1, column2, … FROM table1, table2, … WHERE search and join conditions FOR UPDATE OF column1, column2, … NOWAIT; Guide to Oracle 10g 61 The NOWAIT command causes the system to generate an error message immediately if another user has previously locked the selected records. If the NOWAIT command is omitted, the system forces the user to “wait” until the requested records are unlocked, and the user can do no further processing. Guide to Oracle 10g 62 Guide to Oracle 10g 63 Dynamic SQL Queries Queries that allow users to specify search conditions at runtime Approaches Substitution Values Runtime Variables Guide to Oracle 10g 64 Using Substitution Values Created when search expression is prefaced with an ampersand (&) System then prompts user for value Guide to Oracle 10g 65 Using Runtime Variables Runtime variable: variable defined in SQL*Plus environment Syntax: DEFINE variable_name = variable_value; You can then substitute the variable name for a query search condition value Guide to Oracle 10g 66 Using Runtime Variables Example: Guide to Oracle 10g 67 Indexes Index: Separate table is maintained that shows index keys and physical locations of corresponding records In Oracle, ROWID is translated to physical location of row on disk Improves response time of searches and joins Guide to Oracle 10g SLName ROWID Brown 13387289 Jones 13879872 Smith 58925789 Helgeson 29875018 68 Using Indexes Create table index AFTER table is populated with data Indexes make INSERT, UPDATE, and DELETE operations slower because index must also be maintained Guide to Oracle 10g 69 Indexing Strategies A table can have indexes on multiple fields Create indexes based on fields used for search or join operations Typically, indexes only speed retrievals when <15% of the table records are involved Each additional index adds processing overhead for INSERT, UPDATE, and DELETE operations In Oracle, primary keys are automatically indexed Guide to Oracle 10g 70 Creating Indexes Syntax: CREATE INDEX index_name ON tablename(index_field); Guide to Oracle 10g 71 Summary INSERT action query SQL search condition UPDATE action query DELETE command SELECT query Match one or more database rows DISTINCT qualifier Single row and group functions Guide to Oracle 10g 72 Summary (continued) Can change appearance of SQL*Plus environment Join multiple tables in SELECT query Inner join Outer join Nested queries Set operators Views Guide to Oracle 10g 73