Solved

trying to learn sql join and having trouble...

Posted on 2008-10-19
6
458 Views
Last Modified: 2013-12-18
Greetings all

     I bought the book "Oracle 10g:sql" and am trying to figure out SQL.  I was able to set up the books example tables I am attaching the table's schema in hopes that it helps you help me (I have a sql file that sets up these tables if that would help?).  I had some trouble reading the sqlplus output in a windows terminal window so I am now trying isql*plus.  

OK, question time...
I am having trouble with some of the queries beyond the basic stuff (like looking at a whole table, or basic join of tables, creating tables, add, drop and the like).  The examples in the book are ok but I am having trouble seeing how they translate to real world questions.  The book seems to answer questions made to show how a specific function or clause works.

for example I understand how to use min to see the oldest/newest order but all I see is the one column, how do I get the whole row or record to show?  There are 3 orders with the same date (looking at oldest) how do I get all three records to show or just one?
the error i seem to get most with this example is : not a single-group group function when I try to find a way to display more than just the oldest/newest date.  
"select customer#, min(orderdate)"


I think I understand how to join two tables but once again I am lost on how to see a useful information from that join....like how would I see how many customers don't have an order?  I think the count function would be used but not sure how?  or what if I wanted to see a table with records (like those in customers) of customers that didn't have an order?

I have read about the functions but I guess I am not understanding their use in queries, like the avg: how would I go about finding the avg total cost of a customer's orders?


Thank you for your time and any effort put forth to help me understand.  This is my first real post here, if I have done anything wrong in my post I am sorry.  
tom
JustLeeBooks-Relational-Schema.doc
0
Comment
Question by:cybercookie72
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 

Author Comment

by:cybercookie72
ID: 22751630
I searching through the forums here (doing my best to form a search that has something to do with my issues).  I found a post that showed me that you can nest a query and I was able to make one that I think returns the info Im looking for...the thing I was looking for was how to get more than just one column when looking for something like the oldest order date....

select * from orders
where orders.orderdate = (Select min(orders.orderdate) from orders);

now I think this returns all records where the orderdate is less than others(lowest), and this seems to return more than one record (I added and dropped records to see)

Am I on track?
0
 
LVL 20

Expert Comment

by:chaitu chaitu
ID: 22751659

this subquery gives you  minimum orderdate within orders and in the where cluase it will pass that date and will retreive that order;

Select min(orders.orderdate) from orders
0
 

Author Comment

by:cybercookie72
ID: 22751980
OK, still working on trying to understand the join...
but first thank you chaituu..that query the lowest orderdate from orders, Im trying to find way to get the whole record to display..like the query I posted..give 3 records of lowest date, I guess I cant get one record unless I use more constraints to make said record distinct from the others.

OK ...back to join stuffs.  I was joining orders and customers and when looking at each table noticed some customers do not have orders and want to count how many there are.  I am can join them and get a table with customer# that have orders

SELECT COUNT(DISTINCT customer#) "# with orders"
FROM orders JOIN customers USING(customer#);

putput
# with orders
14

there are 20 customers and 21 orders, 14 customers with orders; some have multiple orders.

so how can I get some math in to the query?  how many customers do not have orders?

thanks again all
0
Revamp Your Training Process

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action.

 
LVL 20

Accepted Solution

by:
chaitu chaitu earned 200 total points
ID: 22752002
Below query retrieves customers do not have orders.

SELECT * FROM CUSTOMERS C
WHERE
NOT EXISTS(    
SELECT 'X'
FROM ORDERS O
WHERE
O.CUST_ID=C.ID);
0
 
LVL 20

Expert Comment

by:chaitu chaitu
ID: 22752004
if you find count put count(*) instead of *;anyway check with ur tables.
0
 

Author Closing Comment

by:cybercookie72
ID: 31507561
Thank you for your help, your code seems to be right on.  I have not seen the EXISTS before and it took me a while to figure out what was going on.  I think I got a handle on the code you posted.  Thank you again
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Working with Network Access Control Lists in Oracle 11g (part 2) Part 1: http://www.e-e.com/A_8429.html Previously, I introduced the basics of network ACL's including how to create, delete and modify entries to allow and deny access.  For many…
Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
This video shows how to copy a database user from one database to another user DBMS_METADATA.  It also shows how to copy a user's permissions and discusses password hash differences between Oracle 10g and 11g.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Suggested Courses

627 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question