Oracle
  Home arrow Oracle arrow Page 3 - Introduction to SQL
Dev Shed Forums  
Administration  
AJAX  
Apache  
BrainDump  
DHTML  
Flash  
Java  
JavaScript  
Multimedia  
MySQL  
Oracle  
Perl  
PHP  
Practices  
Python  
Reviews  
Security  
Smartphone Development  
Style-Sheets  
Web Services  
XML  
Zend  
Zope  
Mobile Linux  
App Generation ROI  
IBM® developerWorks  
Forums Sitemap  
E-Commerce Hosting  
Linux Web Hosting  
Managed Hosting  
Small Business Hosting  
VPS Hosting  
Weekly Newsletter

 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid  
Request Media Kit
Contact Us  
Site Map  
Privacy Policy  
Support  
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
ORACLE

Introduction to SQL
By: O'Reilly Media
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: starstarstarstarstar / 12
    2005-03-16


    Table of Contents:
  • Introduction to SQL
  • A Brief History of SQL
  • The SELECT Statement
  • Ordering your results
  • The DELETE Statement
  • The MERGE Statement

  • Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      error-file:tidyout.log Del.ici.ous error-file:tidyout.log Digg
      error-file:tidyout.log Blink error-file:tidyout.log Simpy
      error-file:tidyout.log Google error-file:tidyout.log Spurl
      error-file:tidyout.log Y! MyWeb error-file:tidyout.log Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article

     
     
    ADVERTISEMENT


    Introduction to SQL - The SELECT Statement
    ( Page 3 of 6 )

    The SELECT statement is used to retrieve data from a database. The set of data retrieved via a SELECT statement is referred to as a result set. Like a table, a result set is comprised of rows and columns, making it possible to populate a table using the result set of a SELECT statement. The SELECT statement can be summarized as follows:

      SELECT <one or more things>
      FROM <one or more places>
      WHERE <zero, one, or more conditions apply>

    While the SELECT and FROM clauses are required, the WHERE clause is optional (although you will seldom see it omitted). We will therefore begin with a simple example that retrieves three columns from every row of the customer table:

    SELECT cust_nbr, name, region_id
    FROM customer;

     CUST_NBR          NAME            REGION_ID
    ---------- ----------------------- ----------
             1 Cooper Industries         5
             2 Emblazon Corp.            5
             3 Ditech Corp.              5
             4 Flowtech Inc.             5
             5 Gentech Industries        5
             6 Spartan Industries        6
             7 Wallace Labs              6
             8 Zantech Inc.              6
             9 Cardinal Technologies     6
            10 Flowrite Corp.            6
            11 Glaven Technologies       7
            12 Johnson Labs              7
            13 Kimball Corp.             7
            14 Madden Industries         7
            15 Turntech Inc.             7
            16 Paulson Labs              8
            17 Evans Supply Corp.        8
            18 Spalding Medical Inc.     8
            19 Kendall-Taylor Corp.      8
            20 Malden Labs               8
            21 Crimson Medical Inc.      9
            22 Nichols Industries        9
            23 Owens-Baxter Corp.        9
            24 Jackson Medical Inc.      9
            25 Worcester Technologies    9
            26 Alpha Technologies       10
            27 Phillips Labs            10
            28 Jaztech Corp.            10
            29 Madden-Taylor Inc.       10
            30 Wallace Industries       10

    Since we neglected to impose any conditions via a WHERE clause, the query returns every row from the customer table. If you want to restrict the set of data returned by the query, you can include a WHERE clause with a single condition:

    SELECT cust_nbr, name, region_id
    FROM customer
    WHERE region_id = 8;

     CUST_NBR          NAME           REGION_ID
    ---------- ---------------------- ----------
            16 Paulson Labs              8
            17 Evans Supply Corp.        8
            18 Spalding Medical Inc.     8
            19 Kendall-Taylor Corp.      8
            20 Malden Labs               8

    The result set now includes only those customers residing in the region with a region_id of 8. But what if you want to specify a region by name instead of region_id? You could query the region table for a particular name and then query the customer table using the retrieved region_id. Instead of issuing two different queries, however, you can produce the same outcome using a single query by introducing a join, as in:

      SELECT customer.cust_nbr, customer.name, region.name
      FROM customer INNER JOIN region
        ON region.region_id = customer.region_id
      WHERE region.name = 'New England';

    CUST_NBR           NAME                NAME
    --------- ------------------------ -----------
            1 Cooper Industries        New England
            2 Emblazon Corp.           New England
            3 Ditech Corp.             New England
            4 Flowtech Inc.            New England
            5 Gentech Industries       New England

    The FROM clause now contains two tables instead of one and includes a join condition that specifies that the customer and region tables are to be joined using the region_id column found in both tables. Joins and join conditions will be explored in detail in Chapter 3.

    Since both the customer and region tables contain a column called name, you must specify which table’s name column you are interested in. This is done in the previous example by using dot-notation to append the table name in front of each column name. If you would rather not type full table names, you can assign table aliases to each table in the FROM clause and use those aliases instead of the table names in the SELECT and WHERE clauses, as in:

      SELECT c.cust_nbr, c.name, r.name
      FROM customer c INNER JOIN region r
      ON r.region_id = c.region_id
      WHERE r.name = 'New England';

    In this example, we assigned the alias c to the customer table and the alias r to the region table. Thus, we can use c. and r. instead of customer. and region. in the SELECT and WHERE clauses.

    SELECT clause elements

    In the examples thus far, the result sets generated by our queries have contained columns from one or more tables. While most elements in your SELECT clauses will typically be simple column references, a SELECT clause may also include:

    • Literal values, such as numbers (27) or strings (‘abc’)

    • Expressions, such as shape.diameter * 3.1415927

    • Function calls, such as TO_DATE(‘01-JAN-2004’,‘DD-MON-YYYY’)

    • Pseudocolumns, such as ROWID, ROWNUM, or LEVEL

    While the first three items in this list are fairly straightforward, the last item merits further discussion. Oracle makes available several phantom columns, known as pseudocolumns, that do not exist in any tables. Rather, they are values visible during query execution that can be helpful in certain situations.

    For example, the pseudocolumn ROWID represents the physical location of a row. This information represents the fastest possible access mechanism. It can be useful if you plan to delete or update a row retrieved via a query. However, you should never store ROWID values in the database, nor should you reference them outside of the transaction in which they are retrieved, since a row’s ROWID can change in certain situations, and ROWIDs can be reused after a row has been deleted.

    The next example demonstrates each of the different element types from the previous list:

      SELECT ROWNUM,
        cust_nbr,
        1 multiplier,
        'cust # ' || cust_nbr cust_nbr_str,
        'hello' greeting,
        TO_CHAR(last_order_dt, 'DD-MON-YYYY') last_order
      FROM customer;

    ROWNUM CUST_NBR MULTIPLIER CUST_NBR_STR GREETING LAST_ORDER
    ------ -------- ---------- ------------ -------- ----------
         1        1          1   cust # 1   hello   15-JUN-2000
         2        2          1   cust # 2   hello   27-JUN-2000
         3        3          1   cust # 3   hello   07-JUL-2000
         4        4          1   cust # 4   hello   15-JUL-2000
         5        5          1   cust # 5   hello   01-JUN-2000
         6        6          1   cust # 6   hello   10-JUN-2000
         7        7          1   cust # 7   hello   17-JUN-2000
         8        8          1   cust # 8   hello   22-JUN-2000
         9        9          1   cust # 9   hello   25-JUN-2000
         10      10          1   cust # 10  hello   01-JUN-2000
         11      11          1   cust # 11  hello   05-JUN-2000
         12      12          1   cust # 12  hello   07-JUN-2000
         13      13          1   cust # 13  hello   07-JUN-2000
         14      14          1   cust # 14  hello   05-JUN-2000
         15      15          1   cust # 15  hello   01-JUN-2000
         16      16          1   cust # 16  hello   31-MAY-2000
         17      17          1   cust # 17  hello   28-MAY-2000
         18      18          1   cust # 18  hello   23-MAY-2000
         19      19          1   cust # 19  hello   16-MAY-2000
         20      20          1   cust # 20  hello   01-JUN-2000
         21      21          1   cust # 21  hello   26-MAY-2000
         22      22          1   cust # 22  hello   18-MAY-2000
         23      23          1   cust # 23  hello   08-MAY-2000
         24      24          1   cust # 24  hello   26-APR-2000
         25      25          1   cust # 25  hello   01-JUN-2000
         26      26          1   cust # 26  hello   21-MAY-2000
         27      27          1   cust # 27  hello   08-MAY-2000
         28      28          1   cust # 28  hello   23-APR-2000
         29      29          1   cust # 29  hello   06-APR-2000
         30      30          1   cust # 30  hello   01-JUN-2000


    Note that the third through sixth columns have been given column aliases, which are names that you assign to a column. If you are going to refer to the columns in your query by name instead of by position, you will want to assign each column a name that makes sense to you.

    Interestingly, a SELECT clause is not required to reference columns from any of the tables in the FROM clause. For example, the next query’s result set is composed entirely of literals:

    SELECT 1 num, 'abc' str
    FROM customer;

        NUM    STR
    ---------- ---
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc
             1 abc

    Since there are 30 rows in the customer table, the query’s result set includes 30 identical rows of data.

    This article is excerpted from Mastering Oracle SQL by Sanjay Mishra and Alan Beaulieu (O'Reilly, 2004; ISBN  1590593006). Check it out at your favorite bookstore today. Buy this book now.



     
     
    >>> More Oracle Articles          >>> More By O'Reilly Media
     

       

    ORACLE ARTICLES

    - Oracle's Turn to Play in the Sun
    - Implementing and Using Oracle`s Restore Poin...
    - Tuning PL/SQL Code
    - Debugging PL/SQL Code
    - Testing PL/SQL Code
    - Working With PL/SQL Code
    - Conditional Compilation for Oracle Database ...
    - Compile-Time Warnings for Oracle DB 10g
    - Compiling PL/SQL Code for an Oracle Database
    - Troubleshooting PL/SQL Code
    - Managing PL/SQL Code
    - Data Manipulation and More for HTML DB Appli...
    - Oracle Database Fundamentals
    - Adding Processes to HTML DB Applications
    - Adding Computations, Processes, and Validati...





    © 2003-2009 by Developer Shed. All rights reserved. DS Cluster 2 Hosted by Hostway
    Stay green...Green IT