Oracle学习札记3-简单查询

Oracle学习笔记3--简单查询

表的查找:

select * from emp where (sal>500 or job='MANAGER') and ename like 'J%';

引号里边的字符是区分大小写的。

查找之后把结果排序:

select * from emp order by sal asc;

asc是升序,desc是降序

 

对列重命名,只要打个空格,后跟新列名就可以

select ename,sal*12+nvl(comm,0)*12 "年薪" from emp order by "年薪" asc;

此处的nvl是个小函数,如果commnull的话,就用0代替

 

最大最小值函数:

SQL> select max(sal) "maxSal",min(sal) "minSal" from emp;

 

    maxSal     minSal                                                                                                   

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

      5000        800

简单的嵌套查询:

SQL> select ename,sal from emp where sal=(select max(sal) from emp);

 

ENAME             SAL                                                                                                  

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

KING             5000

查询记录总数:

SQL> select count(*) from emp;

 

  COUNT(*)                                                                                                             

----------                                                                                                             

        14

找出工资大于平均工资的:

SQL> select * from emp where sal>(select avg(sal) from emp);

 

分组查询:

SQL>  select avg(sal),max(sal),deptno from emp group by deptno;

 

  AVG(SAL)   MAX(SAL)     DEPTNO                                                                                       

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

1566.66667       2850         30                                                                                       

      2175       3000         20                                                                                       

2916.66667       5000         10

根据哪个属性分的组,那么该属性名必然出现在select后面做为结果表的一个属性。

 

Having子句的使用:

SQL> select avg(sal),deptno from emp group by deptno having avg(sal)>2000;

 

  AVG(SAL)     DEPTNO                                                                                                   

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

      2175         20                                                                                                   

2916.66667         10

 

set timing on;可以显示操作时间

 

select distinct job,deptno from emp;-- distinct去重

 

连接子句用||

SQL> select ename||'is a'||job from emp;

 

ENAME||'ISA'||JOB                                                              

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

SMITHis aCLERK                                                                 

ALLENis aSALESMAN                                                              

WARDis aSALESMAN                                                               

JONESis aMANAGER                                                               

MARTINis aSALESMAN                                                             

BLAKEis aMANAGER                                                                

CLARKis aMANAGER                                                               

SCOTTis aANALYST                                                               

KINGis aPRESIDENT                                                               

TURNERis aSALESMAN                                                             

ADAMSis aCLERK

此处单引号中我们放的是is a,那么如果我们要在连接一个本身就带有单引号的字符串,我们应该怎么做呢……

select ‘the god’’son is’||ename from emp;

连打两个单引号就可以了。

 

注意Oracle默认日期的格式:

SQL> select ename,hiredate from emp where hiredate>'1-1-1982';

 

ENAME      HIREDATE                                                            

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

SCOTT      19-4 -87                                                           

ADAMS      23-5 -87                                                          

MILLER     23-1 -82

 

其他需要注意的小问题:

Where子句后边的匹配查找:

%:表示0到多个字符

_:表示一个字符

 

子查询若返回一条记录,可以直接使用=<,>等操作

子查询若返回多条记录,可以使用in等操作

例子:

Select * from emp where deptno in(7788,1234);

 

分组函数只能出现在选择列表、havingorder by子句中

如果在select子句中同时包含havinggroup byorder by,那么他们的顺序是:group by->having->order by