If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

 
Go Back  dBforums > Data Access, Manipulation & Batch Languages > ANSI SQL > outer join operation?

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 01-25-05, 00:43
sjgrad03 sjgrad03 is offline
Registered User
 
Join Date: Aug 2003
Location: san jose, CA
Posts: 68
outer join operation?

Hello everyone:

I am doing a sql exercise which states like this, "Determine which orders have not yet shipped and the name of the customer that placed each order. Sort the results by the date on which the order was placed."

this exercise asks me to use traditional approach(using where clause along with outer join operator(+), and using the join keyword)

the tables used for this exercise is customers and orders. the data type of each table are as follows:

customers table: contaion all the customers who placed orders and who have not recently placed an order

Name Null? Type
----------------------------------------- -------- --------------------
CUSTOMER# NOT NULL NUMBER(4)
LASTNAME VARCHAR2(10)
FIRSTNAME VARCHAR2(10)
ADDRESS VARCHAR2(20)
CITY VARCHAR2(12)
STATE VARCHAR2(2)
ZIP VARCHAR2(5)
REFERRED NUMBER(4)

order table: this table contains data for current month orders or unfilled orders from previous month.

Name Null? Type
----------------------------------------- -------- ---------------
ORDER# NOT NULL NUMBER(4)
CUSTOMER# NUMBER(4)
ORDERDATE DATE
SHIPDATE DATE
SHIPSTREET VARCHAR2(18)
SHIPCITY VARCHAR2(15)
SHIPSTATE VARCHAR2(2)
SHIPZIP VARCHAR2(5)

the two tables have customer# attribute in common. I think I should use outer join for this exercise. I did several tries. i guess i am still little confused about the defination for ourter join when it comes to using 'join' keyword along with left, right full option.

I did three attempts but each one give me different results. I couldn't figure out which one is right. Please help.

--My own selection statement are as follows:
a) traditional approache (using where clause)

select order#, lastname, firstname, shipdate
from customers c, orders o
where c.customer# = o.customer#(+)
order by o.shipdate

27 rows were selected

my thinking on this is if there is no corresponding row in customers table, which means that customer who have not been place an order recently. the results will display customer who have not been place an order recently. what if I put (+) on left side will this give me the correct result?

b) use join keyword.

select lastname, firstname, order#, shipdate
from customers c right join orders o
on c.customer# = o.customer#
order by o.shipdate

21 rows were selected.

Please give me some suggestion on how to solve this problem. if you know some good web source that give clear explnation on outer join along with examples, pleate refer them to me. I will appreciate your help!

Sincerely,
sjgrad03
1-25-05
Reply With Quote
  #2 (permalink)  
Old 01-25-05, 07:40
r937 r937 is offline
SQL Consultant
 
Join Date: Apr 2002
Location: Toronto, Canada
Posts: 19,524
if the assignment actually requires that you use an OUTER JOIN, the first thing you need to do is decide which of the tables will have a "missing" row

in your second example, customers c right join orders o, you are saying that there can be orders without matching customers

i think that's wrong

what you want is customers c left join orders o

this will return all customers, including those who have no matching orders

it would be extremely unlikely to have an order without a matching customer

the second thing you need to focus on is the actual requirement -- "orders which have not yet shipped"

so what you want is orders

therefore, an OUTER JOIN here would be wrong!!

you don't want customers without orders, you want orders and their customers

(assuming, again, that you cannot have an order without a customer)

if this course or assignment specifically said you must use an OUTER JOIN, then it stinks!

in addition, there is no reason why they should be teaching you a proprietary method like (+), unless the purpose of the course or assignment is to teach you how to move away from that syntax and start to learn the standard
__________________
r937.com | rudy.ca
please visit Simply SQL and buy my book
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On