您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

oracle sql select语句的使用方法

2025/11/10 11:31:55发布17次查看
格式:
select [ all | distinct ] from ,[,…]
[where ]
[group by [having]]
[order by [asc | desc]]
语句说明:
[]方括号为可选项
[group by [having]]
指将结果按的值进行分组,该值相等的记录为一组,带【having】
短语则只有满足指定条件的组才会输出。
[order by [asc | desc]]
显示结果要按值升序或降序进行排序
练习:
1:表hkb_test_sore取出成绩sore前5名的记录,
2:取第5名的记录
1,答案select a.sore_id, a.sore
  from (select * from hkb_test_sore order by sore desc) a
 where rownum
2,答案select a.sore_id, a.sore
  from (select * from hkb_test_sore order by sore desc) a
 where rownum  minus
select a.sore_id, a.sore
  from (select * from hkb_test_sore order by sore desc) a
 where rownum 3:查询两个分数一样的记录
select *
  from hkb_test_sore a
 where a.sore = (select sore
                   from hkb_test_sore a
                  group by a.sore
                 having count(a.sore) = 2);
union,union all,intersect,minus的区别:
sql> select * from hkb_test2;
x        y
---- -----
a        1
b        2
c        3
g        4
sql> select * from hkb_test3;
x        y
---- -----
a        1
b        2
e        3
f        4
sql> select * from hkb_test2;
x        y
---- -----
a        1
b        2
c        3
g        4
sql> select * from hkb_test3;
x        y
---- -----
a        1
b        2
e        3
f        4
sql> select * from hkb_test2
  2  union
  3  select * from hkb_test3;
x        y
---- -----
a        1
b        2
c        3
e        3
f        4
g        4
6 rows selected
sql> select * from hkb_test2
  2  union all
  3  select * from hkb_test3;
x        y
---- -----
a        1
b        2
c        3
g        4
a        1
b        2
e        3
f        4
8 rows selected
sql> select * from hkb_test2
  2  intersect
  3  select * from hkb_test3;
x        y
---- -----
a        1
b        2
sql> select * from hkb_test2
  2  minus
  3  select * from hkb_test3;
x        y
---- -----
c        3
g        4
综合上面实例看个完整的实例
sql>
sql>
sql> -- create demo table
sql> create table employee(
  2    id                 varchar2(4 byte)         not null primary key,
  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  /
table created.
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> select id, first_name, last_name from employee
  2  /
id   first_name           last_name
---- -------------------- --------------------
01   jason                martin
02   alison               mathews
03   james                smith
04   celia                rice
05   robert               black
06   linda                green
07   david                larry
08   james                cat
8 rows selected.
在oracle中实现select top n的方法
 1.在oracle中实现select top n
    由于oracle不支持select top语句,所以在oracle中经常是用order by跟rownum的组合来实现select top n的查询。
   简单地说,实现方法如下所示:
select 列名1...列名n from
     (select 列名1...列名n from 表名 order by 列名1...列名n)
    where rownum
   order by rownum asc
    下面举个例子简单说明一下。
   顾客表customer(id,name)有如下数据:
   id name
    01 first
    02 second
    03 third
    04 forth
    05 fifth
    06 sixth
    07 seventh
    08 eighth
    09 ninth
    10 tenth
    11 last
    则按name的字母顺抽出前三个顾客的sql语句如下所示:
   select * from
     (select * from customer order by name)
    where rownum
    order by rownum asc
    输出结果为:
   id name
    08 eighth
    05 fifth
    01 first
2.在top n纪录中抽出第m(m
   在得到了top n的数据之后,为了抽出这n条记录中的第m条记录,我们可以考虑从rownum着手。我们知道,rownum是记录表中数据编号的一个隐藏子段,所以可以在得到top n条记录的时候同时抽出记录的rownum,然后再从这n条记录中抽取记录编号为m的记录,即使我们希望得到的结果。
   从上面的分析可以很容易得到下面的sql语句。
select 列名1...列名n from
      (
      select rownum recno, 列名1...列名nfrom
        (select 列名1...列名n from 表名 order by 列名1...列名n)
      where rownum
    order by rownum asc
      )
    where recno = m(m
   同样以上表的数据为基础,那么得到以name的字母顺排序的第二个顾客的信息的sql语句应该这样写:
select id, name from
      (
       select rownum recno, id, name from
         (select * from customer order by name)
          where rownum
          order by rownum asc )
        where recno = 2
      结果则为:
    id name
     05 fifth
3.抽出按某种方式排序的记录集中的第n条记录
    在2的说明中,当m = n的时候,即为我们的标题讲的结果。实际上,2的做法在里面n>m的部分的数据是基本上不会用到的,我们仅仅是为了说明方便而采用。
    如上所述,则sql语句应为:
select 列名1...列名n from
      (
       select rownum recno, 列名1...列名nfrom
         (select 列名1...列名n from 表名 order by 列名1...列名n)
          where rownum
       order by rownum asc
      )
      where recno = n
      那么,2中的例子的sql语句则为:
select id, name from
       (
        select rownum recno, id, name from
          (select * from customer order by name)
        where rownum
        order by rownum asc
       )
       where recno = 2
      结果为:
    id name
     05 fifth
4.抽出按某种方式排序的记录集中的第m条记录开始的x条记录
    3里所讲得仅仅是抽取一条记录的情况,当我们需要抽取多条记录的时候,此时在2中的n的取值应该是在n >= (m + x - 1)这个范围内,当让最经济的取值就是取等好的时候了的时候了。当然最后的抽取条件也不是recno = n了,应该是recno between m and (m + x - 1)了,所以随之而来的sql语句则为:
select 列名1...列名n from
     (
      select rownum recno, 列名1...列名nfrom
       (
       select 列名1...列名n from 表名 order by 列名1...列名n)
       where rownum = (m + x - 1))
     order by rownum asc
       )
      where recno between m and (m + x - 1)
     同样以上面的数据为例,则抽取name的字母顺的第2条记录开始的3条记录的sql语句为:
select id, name from
      (
       select rownum recno, id, name from
         (select * from customer order by name)
       where rownum
       order by rownum asc
      )
      where recno between 2 and (2 + 3 - 1)
注意:
sql各子句的执行顺序:            
1. from
2. where
3. group by
4. having
5. select
6. order by
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product