Oracle PL/SQL Tutorial/Query Select/Introduction

Материал из SQL эксперт
Перейти к: навигация, поиск

A SELECT with Just a FROM Clause

   <source lang="sql">

SQL> SQL> -- create demo table SQL> create table Employee(

 2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
 3    First_Name         VARCHAR2(10 BYTE),
 4    Last_Name          VARCHAR2(10 BYTE),
 5    Start_Date         DATE,
 6    End_Date           DATE,
 7    Salary             Number(8,2),
 8    City               VARCHAR2(10 BYTE),
 9    Description        VARCHAR2(15 BYTE)
10  )
11  /

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2               values ("01","Jason",    "Martin",  to_date("19960725","YYYYMMDD"), to_date("20060725","YYYYMMDD"), 1234.56, "Toronto",  "Programmer")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("02","Alison",   "Mathews", to_date("19760321","YYYYMMDD"), to_date("19860221","YYYYMMDD"), 6661.78, "Vancouver","Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("03","James",    "Smith",   to_date("19781212","YYYYMMDD"), to_date("19900315","YYYYMMDD"), 6544.78, "Vancouver","Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("04","Celia",    "Rice",    to_date("19821024","YYYYMMDD"), to_date("19990421","YYYYMMDD"), 2344.78, "Vancouver","Manager")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("05","Robert",   "Black",   to_date("19840115","YYYYMMDD"), to_date("19980808","YYYYMMDD"), 2334.78, "Vancouver","Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("06","Linda",    "Green",   to_date("19870730","YYYYMMDD"), to_date("19960104","YYYYMMDD"), 4322.78,"New York",  "Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("07","David",    "Larry",   to_date("19901231","YYYYMMDD"), to_date("19980212","YYYYMMDD"), 7897.78,"New York",  "Manager")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("08","James",    "Cat",     to_date("19960917","YYYYMMDD"), to_date("20020415","YYYYMMDD"), 1232.78,"Vancouver", "Tester")
 3  /

1 row created. SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee

 2  /

ID FIRST_NAME LAST_NAME START_DAT END_DATE SALARY CITY DESCRIPTION


---------- ---------- --------- --------- ---------- ---------- ---------------

01 Jason Martin 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer 02 Alison Mathews 21-MAR-76 21-FEB-86 6661.78 Vancouver Tester 03 James Smith 12-DEC-78 15-MAR-90 6544.78 Vancouver Tester 04 Celia Rice 24-OCT-82 21-APR-99 2344.78 Vancouver Manager 05 Robert Black 15-JAN-84 08-AUG-98 2334.78 Vancouver Tester 06 Linda Green 30-JUL-87 04-JAN-96 4322.78 New York Tester 07 David Larry 31-DEC-90 12-FEB-98 7897.78 New York Manager 08 James Cat 17-SEP-96 15-APR-02 1232.78 Vancouver Tester 8 rows selected. SQL> SQL> SQL> SQL> SELECT id, first_name, salary FROM employee

 2  /

ID FIRST_NAME SALARY


---------- ----------

01 Jason 1234.56 02 Alison 6661.78 03 James 6544.78 04 Celia 2344.78 05 Robert 2334.78 06 Linda 4322.78 07 David 7897.78 08 James 1232.78 8 rows selected. SQL> SQL> -- clean the table SQL> drop table Employee

 2  /

Table dropped. SQL></source>


Subquery with comparison operator

   <source lang="sql">

SQL> SQL> SQL> SELECT COUNT(*) num_owned, a.owner

 2      FROM dba_objects a
 3      WHERE 100<(SELECT COUNT(*) FROM dba_objects b
 4      WHERE a.owner=b.owner)
 5      GROUP BY a.owner;
NUM_OWNED OWNER

------------------------------
      473 MDSYS
     1143 FLOWS_020100
     2769 PUBLIC
      575 sqle
      339 CTXSYS
      449 SYSTEM
      668 XDB
     6631 SYS

8 rows selected.</source>


Using the SQL Operators

The SQL operators allow you to limit rows based on

  1. pattern matching of strings,
  2. lists of values,
  3. ranges of values, and
  4. null values.

The SQL operators are listed in the following table:

Operator Description LIKE Matches patterns in strings IN Matches lists of values BETWEEN Matches a range of values IS NULL Matches null values IS NAN New for Oracle10g. Matches the NaN special value, which means "not a number" IS INFINITE New for Oracle10g. Matches infinite BINARY_FLOAT and BINARY_DOUBLE values

You can also use the NOT operator to reverse the meaning of LIKE, IN, BETWEEN, and IS NULL:

  1. NOT LIKE
  2. NOT IN
  3. NOT BETWEEN
  4. IS NOT NULL
  5. IS NOT NAN
  6. IS NOT INFINITE



   <source lang="sql">

SQL> SQL> SELECT COUNT(*) num_owned, a.owner

 2      FROM dba_objects a
 3      WHERE 10<(SELECT COUNT(*) FROM dba_objects b
 4      WHERE a.owner=b.owner)
 5      GROUP BY a.owner;
NUM_OWNED OWNER

------------------------------
      473 MDSYS
     1143 FLOWS_020100
     2769 PUBLIC
      575 sqle
      339 CTXSYS
       34 HR
       12 FLOWS_FILES
      449 SYSTEM
       46 DBSNMP
      668 XDB
     6631 SYS

11 rows selected.</source>