Vous êtes sur la page 1sur 18

SQL advanced select using Oracle

7. Multiple Tables: Joins and Set Operations 8. Subqueries: Nested Queries


SQL advanced select using Oracle 1

Select, 156
Simple
data from a single table

Advanced
data from more tables
join sub-queries

SQL advanced select using Oracle

Join, 157
Cartesian product
select * from tableA, tableB
all rows in tableA combined with all rows from tableB huge result! seldom useful!!

Different types of joins


equi-join non-equi-join outer join self-join
SQL advanced select using Oracle 3

Equi-join, 158
Joining 2 tables using common attributes [usually primary and foreign keys] Structure
select from tableA, tableB where tableA.PK = tableB.FK

Comparison using equality (=) is equi-join Examples


select * from student, city where city.postcode = student.postcode select * from student, course, studentCourse where student.ID = studentCourse.studentID and studentCourse.courseID = course.ID
SQL advanced select using Oracle 4

Non-equi-joins, 161
Where clause using operations other than equality
Fig. 7-6, page 162

SQL advanced select using Oracle

Outer joins, 163


Ordinary join
if a value in one table has no matching value in the other table, the row is not included in the result.

Outer join
values without matching values are included in the result.

Oracle has 2 syntaxes


Special syntax
Special (old) Oracle syntax

New syntax
SQL99 standard syntax
SQL advanced select using Oracle 6

Outer join, old syntax


Old / special Oracle syntax
SELECT FROM tableA, tableB WHERE tableA.col1 (+)= tableB.col2
rows from tableA with no matching attribute in tableB is included in the result Fig. 7-7, page 163

SQL advanced select using Oracle

Outer join, new syntax


New / SQL 99 standard syntax
SELECT d.department_id, e.last_name FROM departments d LEFT OUTER JOIN employees e ON d.department_id = e.department_id ORDER BY d.department_id

Result
Department with and without employees are included in the result

New in Oracle 9i (not present in Oracle 8i) No examples in the book! Look in the Oracle SQL documentation for more examples
SQL advanced select using Oracle 8

Self-join, 165
Joining a table with itself.
ER recursive relationship Rel. model foreign key to another attribute in the same relation. same table used twice in the from clause we need to name the two instances of the table (table aliases) select from employee e, employee s where e.supervisorID = s.ID Fig. 7-9 page 165
SQL advanced select using Oracle 9

Set operators, 166


Tables may be used in set operations
union union all intersect tableA union tableB tableA union all tableB tableA intersect tableB
all rows in tableA and all rows in tableB as union, but includes duplicates all rows that appears in both tableA and tableB

minus

tableA minus tableB

all rows in tableA, but not in tableB

Tables must be "union compatible"


same number + types + order of attributes
SQL advanced select using Oracle 10

Sub-query, 174
The where clause in a select statement may contain another select statement (sub-query)!
Fig. 8-1, page 175 Two types of sub-queries
single row
returning a single row of data, and most often a single data item

multiple row
returning more than on row of data
SQL advanced select using Oracle 11

Single row query, 174


Inner query is executed first, returning a value that is used in the outer query. select from tableA where attributA operator (sub-query)
Operator may be: =, >, <, etc.

SQL advanced select using Oracle

12

Sub-queries in create, insert, update and delete, 176


create table tableName as select query
pure redundancy!

insert into tableName select query


pure redundancy!

update tableName set (columnNames) = (query) where condition delete from tableName where columnName = (query)
SQL advanced select using Oracle 13

Multiple-row sub-queries, 181


Sub-query returning more than one row of data. select from where attribute operator (sub-query)
Operator may be
in <all, >all <any, >any, =any

Figure 8-11, 8-12, page 182 Figure 8-13, page 183


SQL advanced select using Oracle 14

Top-N analysis,183
MS Access SQL and SQL Server has a special keyword top
select top 10 attribute Oracle has no such feature, but it can be simulated using the pseudo-column rownum. Fig. 8-14 + 8-15, page 184 sub-query in from clause
inline view [more on views later on]

SQL advanced select using Oracle

15

Correlated subquery,185
Ordinary subquery
The inner query does not reference columns from the outer query The inner query can be calculated once and for all.

Correlated subquery
The inner query references columns from the outer query Like programming 2 loops, one inside the other Figure 8-17, page 187

SQL advanced select using Oracle

16

The EXISTS operator, 187


New operator used with correlated sub-queries Result
False
If the current result of the sub-query is empty

True
If the current result of the sub-query is not empty

Examples
Figure 8-18, page 187
At least one student has the faculty (teacher) Select 1
We have to select something, but in this case we dont use it!

Figure 8-19, page 188


No student has the faculty (teacher)
SQL advanced select using Oracle 17

Final remarks
SQL (specially select) is like programming.
There's only one place to learn it - at the keyboard!

Make advanced select statements incrementally


Starting from the innermost sub-query. Monitor the results

Take advantage of advanced select statements


Don't try to program the same features in your application.

SQL advanced select using Oracle

18

Vous aimerez peut-être aussi