十天学会Oracle数据库(Day2)
今日目标:
- 查询排序(重要)
- Oracle思考题(重要)
- 单行函数(背)
- 多表查询(重要)
一:查询排序
- 使用子句【ORDER BY 字段[ASC|DESC],字段[ASC|DESC]】:ASC表示升序,DESC表示降序;
- 按照工资由高到低排序。SELECT *FROM emp ORDER BY sal ASC;
- SELECT FOME WHERE ORDER BY;就是这么一个子句
二:Oracle思考题
1:选择部门30中的所有员工
SELECT *FROM emp WHERE deptno=30;
2:列出所有办事员的姓名,编号和部门编号
SELECT ename ,empno,deptno FROM emp WHERE job='CLECK';
3:找出佣金高于薪金60%的员工
SELECT * from emp WHERE comn>sal*0.6;
4:找出收取佣金员工的不同工作
SELECT DISTINCT job FROM emp WHERE comn IS NOT NULL;
5:找出不收取佣金或者佣金小雨100的员工
SELECT job FROM emp (comn IS NULL) OR (comn<100);
三:单行函数
在Oracle中提供的单行函数非常多,有几万个,主要的有以下几个:
- 字符串函数
- 大小写转换函数:字符串 UPPER()|lower()。select *from emp where ename=UPPER('&name');
- 首字母大写,其余字母小写。Initrap();
- 取得字符串的长度,length(字符串型字段);
- 替换指定字符串的内容。Replace
- 字符串的截取操作。SUBSTR
- 去掉左右空格的函数 TRIM(字符串类型的字段)
- 数字函数
- 四舍五入函数:ROUND(数字,位数);
- 截取小数函数:TRUNC(数字,位数);
- 求模函数:求余数
- 日期函数
- 伪列(是不存在表中的列,但是可以直接执行):SYSTIME,SYSDATE
- 取得当前的系统日期,然后,日期+数字=日期;日期-日期=两个日期之间的参数;
- SELECT SYSDATE-hireday from emp;
- 加上指定月后的时间ADD_MONTHS(日期|列 月数)
- 求出本月的最后一天 LAST_DAY(SYSDATE)
- 转换函数
- 字符串,数字,日期
- 日期(yyyy)(mm)(dd)(HH)(mi)(ss):SELECT TO_CAHR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') from dual;
- 转日期操作:
- 转数字类型:TO_NUMBER('1').但是现在Oracle提供了数据类型自动转换
- 通用函数
- NVL();
- DECODE();——多数据判断
四:多表查询
- 基本概念
同时从多个表中查询数据。
必须使用关联字段消除笛卡尔积。
就是两张表中的相同的字段 SELECT* FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;
如果表名称过长,往往会使用一个别名,select * from EMP E, DEPT D WHERE E.DEPTNO=D.DEPTNO;
2. 要先确定关联条件
不一定是直接相同的字段,也可能需要自己定义关联条件,方法就是通过WHERE定义关联条件
多表查询其实性能并不好,减少多表查询就能提升性能。
第一种叫做内连接,第二种叫做外链接
增加行:INSERT INTO