Oracle学习——第一讲 (常规查询)

Oracle 通用表

/*

emp 表                             dept  部门表                 salgrade 表

empno 员工编号               deptno  部门编号          grade  工资等级

ename  员工姓名             dname  部门名称          losal    工资范围下限

job       职位                      loc 工作地点                 hisal   工资范围上限

mgr     经理编号

hiredate  入职日期

sal        薪金

comm  奖金

deptno  部门编号

*/

Oracle实例演练

 

--查询dept表中的部门编号,部门名称,工作地点

SELECT deptno, dname, loc

 FROM dept

--查询emp表中的员工编号,员工名称,职位和薪金

SELECT empno, ename, job, sal 

FROM emp

--查询salgrade表中的所有数据 *

Select *

from salgrade

--查询表中的数据个数(返回的是表中的记录个数,避免记录数过多)

SELECT COUNT(*)

FROM emp

--查询emp表中的员工工资涨完500,以及这一年的总收入

SELECT sal, sal + 500, sal * 12

FROM emp

--员工转正后,月薪上调20%,请查询出所有员工转正后的月薪工资

SELECT sal, sal*(1 + 0.2)

FROM emp

--员工试用期6个月转正后,月薪上调20%

--请查询出所有员工第一年的年薪所得

SELECT sal, sal * 6  + sal * 6 * (1.2)

FROM emp

--员工试用期后,第一年加上所有奖金所得

--( NULL代表空值,参与运算时,结果为空)

SELECT sal, comm, sal * 6 + sal * 6 * (1.2) + 12 * comm

FROM emp 

--解决:

--调用函数NVL

--nvl(参数1,参数2)

--功能:若参数1不为NULL,返回参数1,否则返回参数2

--前提:两个参数类型必须一致

SELECT sal comm, sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0)

FROM emp

--让奖金为空的,显示0

SELECT comm, NVL(comm, 0)

FROM emp

--采用别名方式

--别名方式1  (使用空格)

SELECT sal 工资,comm 奖金,sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0) 年薪

FROM emp

--别名方式2 (使用AS)

SELECT sal AS 工资,comm AS 奖金,sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0) AS 年薪

FROM emp

--三种特殊情况需要加“”

--1、区分大小写

SELECT sal Sal, comm Comm, sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0) total

FROM emp

SELECT sal "Sal", comm "Comm",sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0) "Total"

FROM emp

--2.包括空格

SELEct sal "工   资", comm "奖 金", sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0) "年 薪"

FROm emp

--3.包括特殊符号

SELECT sal "工¥资", comm "奖¥金",sal * 6 + sal * 6 * (1.2) + 12 * NVL(comm, 0) "年薪&"

FROM emp

--连接操作符||

SELECT ename, job, ename||job

FROM emp

--字符类型全部使用单引号''

SELECT ename || '的职位是'|| job

FROM emp

--去重关键字 DISTINCT

SELECT  DISTINCT deptno

FROM emp

--对两列完全一样的去重

SELECT DISTINCT ename, deptno

FROM emp

--WHERE  条件查询

--1.数值型作为条件

--查询部分10,员工的编号,姓名,部分编号

SELECT empno, ename,deptno

FROM emp

WHERE deptno = 10

--字符型作为条件

--查询job是CLERK的员工姓名,职位

SELECT ename, job, empno

FROM emp

WHERE job = 'CLERK'

--查询10部门,并且job是CLERK的员工姓名,职位

SELECT ename, job, deptno

FROM emp

WHERE  job = 'CLERK' AND deptno = 10

--3.日期型作为条件

--查询入职日期在81年以后的员工信息(DD-MON-RR)即:日-月-年

SELECT *

FROM emp

WHERE hiredate >= '01-1月-1981'

/*   number(4) 最大长度为4 (-9999-9999)

      varchar2(10)变长字符类型

      number(7, 2)最大长度7小数点2位*/

--查询部门不等于10的员工信息

--不等于<> or  != 都可以

SELECT *

FROM emp

WHERE deptno <> 10

--BETWEEN  AND (在....之间)

--查询工资在2000-3000的员工 姓名以及工资

SELECT ename, sal

FROM emp

WHERE sal BETWEEN 2000 AND 3000

--查询82年1月1日到83年12月31日

SELECT ename, sal, hiredate

FROM emp

WHERE hiredate BETWEEN '01-1月-1982'  AND '31-12月-1983'

--IN关键字

--查询部门10-20的员工姓名以及部门编号

SELECT ename, deptno

FROM emp

WHERE deptno IN (10, 20)

--查询工作是CLERK 和SALESMAN的员工姓名

SELECT ename, job

FROM emp

WHERE job IN ('CLERK', 'SALESMAN')

--like模糊查询

--%代表任意多个字符

--_代表一个字符

--查询姓名为以S开头的员工姓名

SELECT ename

FROM emp

WHERE ename LIKE 'S%'

--没有任何返回结果

Select  *

 from emp

  where ename like 'M_%'

  and comm = null;

--查询姓名以第二个S开头

SELECT ename

FROM emp

WHERE ename LIKE '_S%'

--查询倒数第二个字符为T的

SELECT ename

FROM emp

WHERE ename LIKE '%T_'

--查询姓名中包括C的

SELECT ename

FROM emp

WHERE ename LIKE '%C%'

--查询S@_中不带@的:S_

SELECT ename

FROM emp

WHERE ename LIKE 'S@_%' ESCAPE '@'

--查询S'

SELECT ename

FROM emp

WHERE ename LIKE 'S''%'

--IS NULL (NOT IN , NOT BETWEEN , IS NOT)

--查询奖金为空

SELECT ename, sal, comm

FROM emp

WHERE comm IS NULL

--AND OR 优先级:AND > OR

SELECT ename, job, sal

FROM emp

WHERE (job = 'SALESMAN' OR job = 'PRESIDENT') AND sal > 1500

SELECT ename, job, sal

FROM emp

WHERE job = 'SALESMAN' OR (job = 'PRESIDENT' AND sal > 1500)

--ORDER BY 排序(默认是升序)

--升序ASC

--降序DESC

--两者的书写和执行都在最后

--工资升序排列

SELECT *

FROM emp

ORDER BY sal ASC

--工资降序排列

SELECT *

FROM emp

ORDER BY sal DESC

--按照列别名排序

SELECT  ename, sal  工资

FROM emp

ORDER BY 工资 DESC

--按照列序号排序:对第二列进行排序

SELECT ename, sal

FROM emp

ORDER BY 2 DESC

--进行多列排序:部门升序,工资降序

SELECT ename, sal, deptno

FROM emp

ORDER BY deptno ASC, sal DESC

--查询员工姓名的第三个字母是a的员工姓名

SELECT ename

FROM emp

WHERE ename like '__A%'

--查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。

SELECT ename, hiredate, job

FROM emp

WHERE hiredate >= '07-9月-1982' AND job <> 'SALESMAN'

--查询工资大于等于4500并且部门为10或者20的员工的姓名\工资、部门编号。

SELECT ename, sal, deptno

FROM emp

WHERE sal >= 4500 AND (deptno = 10 OR deptno = 20)

--查询入职日期在82年至83年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序。

SELECT ename, hiredate, job

FROM emp

WHERE hiredate IN('01-1月-1982', '31-12月-1983') AND (job like 'SALES%'  OR job like 'MAN%')

ORDER BY hiredate DESC

--查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。用IN(2000, 3000)的意思是2000  or 3000

SELECT ename, deptno, sal

FROM emp

WHERE (sal BETWEEN 2000 AND 3000) AND deptno <> 10

ORDER BY deptno ASC, sal DESC

--查询员工姓名中第四个字符是R的员工信息

select *

from emp

where  ename like '___R%';

法二:

select *

from emp

where instr(ename, 'R', 4, 1) = 4;

法三:

select *

from emp

where substr(ename, 4, 1) = 'R';

--查询员工工资等级大于2的员工姓名,工资,部门名称,工作地点

Select ename, sal, dname, loc

FROM emp e, dept d, salgrade

WHERE e.deptno = d.deptno

AND sal between losal and hisal

AND grade > 2;

-- 在员工表中查询出员工的工资,并计算应交税款:

--如果工资小于1000,税率为0,

--如果工资大于等于1000并小于2000,税率为10%,

--如果工资大于等于2000并小于3000,税率为15%,

--如果工资大于等于3000,税率为20%.

SELECT ename, sal, (case TRUNC(NVL(sal, 0) / 1000, 0)

                                   WHEN 0 THEN 0

                                     WHEN 1 THEN 0.1

                                       WHEN 2 THEN 0.15

                                         ELSE 0.2  end )  税率

FROM emp;

法二:

SELECT ename 员工姓名, sal 工资, DECODE(TRUNC(NVL(sal, 0) / 1000, 0),

                                                    0, 0,

                                                    1, 0.1,

                                                    2, 0.15,

                                                     0.2) 税率

FROM emp;  

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值