You are on page 1of 73

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

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

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

Join condition

SQL supports multiple types of join queries

Guide to Oracle 10g

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

Fig 3-43 to retrieve the student Id, student last and first names, advisor ID, and advisor last name.

Guide to Oracle 10g

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

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

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 students 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

Called inner table Called outer table

And matching rows from second 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 professors 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
SUB_PROJECT
P_ID PROJECT_NAME 1 Hardware Support Intranet 2 Hardware Support Interface 3 Hardware Support Database 4 T eller Support System 5 Internet Advertising 6 Network Design 7 Exploration Database CLIENT_ID 2 2 2 4 6 6 5 MGR_ID 105 103 102 105 105 104 102 5 1 1 PARENT_P_ID

PROJECT_NAME 1 Hardware Support Intranet 2 Hardware Support Interface 3 Hardware Support Database 4 T eller Support System 5 Internet Advertising 6 Network Design 7 Exploration Database

CLIENT_ID 2 2 2 4 6 6 5

MGR_ID 105 103 102 105 105 104 102

PARENT_P_ID 1 1

PROJECT
P_ID PROJECT_NAME 1 Hardware Support Intranet 2 Hardware Support Interface 3 Hardware Support Database 4 T eller Support System 5 Internet Advertising 6 Network Design CLIENT_ID 2 2 2 4 6 6 5 MGR_ID 105 103 102 105 105 104 102 5 1 1 PARENT_P_ID

Guide to Oracle 10g

31

7 Exploration Database

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 Retrieves values that main querys search condition must match

Subquery

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 querys 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 tables 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 members 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

SLName Brown

ROWID 13387289

In Oracle, ROWID is translated to physical location of row on disk

Jones
Smith Helgeson

13879872
58925789 29875018

Improves response time of searches and joins

Guide to Oracle 10g

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

Match one or more database rows

UPDATE action query DELETE command SELECT query

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

You might also like