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是个小函数,如果comm是null的话,就用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);
分组函数只能出现在选择列表、having、order by子句中
如果在select子句中同时包含having、group by、order by,那么他们的顺序是:group by->having->order by