Loading... ###数据排序 语法: SELECT [DISTINCT]*| 字段 [别名][字段 [别名]] FROM 表名称 [别名] [WHERE 条件(S)] [ORDER BY 字段 [ASC|DESC][字段 [ASC|DESC],…]] 说明: 该子句在所有的SQL语句最后 可以指定多个排序的字段 默认升序 降序需要手工指定 有需要的时候才进行排序 查询所有雇员的信息,按工资排序 select * from emp order by sal; select * from emp order by sal asc; 降序排列 select * from emp order by sal desc; 查询所有雇员信息,按照工资降序排列,工资相同,则按雇佣日期从早到晚排列 select * from emp order by sal desc,hiredate asc; ###单行函数 分类: 字符函数 数字函数 日期函数 转换函数 通用函数 ####字符函数:主要是进行字符串数据的操作 UPPER(字符串|列) 将输入的字符串变为大写返回 LOWER(字符串|列) 将输入的字符串变为小写返回 INITCAP(字符串|列) 开头首字母大写 LENGTH(字符串|列) 求出字符串长度 REPLACE(字符串|列) 进行替换 SUBSTR(字符串|列) 开始点[结束点],字符串截取 oracle提供一个虚拟表dual 转大写 select upper(‘hello’) from dual; select * from emp where ename=upper(‘&str’); 转小写 将所有雇员姓名按照小写字母返回 select lower(ename) from emp; 将每个雇员姓名的开头首字母大写 select initcap(ename) from emp; 查询出每个雇员姓名的长度 select ename,length(ename) from emp; 查询出雇员姓名长度刚好是5的雇员信息 select ename,length(ename) from emp where length(ename)=5; 使用字符“_”替换雇员姓名中的所有字母“A” select replace(ename,’A’,’_’) from emp; 字符串截取有两种语法: 1 SUBSTR(字符串|列,开始点),表示从开始点一直截取到结尾 select ename,substr(ename,3) from emp; 2 SUBSTR(字符串|列,开始点,截取多少位),表示从开始点截取多少位 select ename,substr(ename,0,3) from emp; select ename,substr(ename,1,3) from emp; 要求截取每个雇员名字的后三个字母 通过长度-2确定开始点 select ename,substr(ename,length(ename)-2) from emp; 设置负数,表示从后指定截取位置 select ename,substr(ename,-3) from emp; ####数字函数 ROUND(数字|列[,保留小数的范围]):四舍五入的操作 TRUNC(数字|列[,保留小数的范围]): 舍弃指定位置的内容 MOD(数字1,数字2):取模,取余数 ROUND select round(903.5) from dual; select round(903.53567) from dual; select round(903.53567),round(-903.53567) from dual; select round(903.53567),round(-903.53567), round(903.53567,-1) from dual; select round(903.53567),round(-903.53567),round(903.53567,-1), round(903.53567,2) from dual; TRUNC trunc select trunc(903.53567),trunc(-903.53567),trunc(903.53567,-1), trunc(903.53567,2) from dual; MOD select mod(3,10) from dual; ####日期函数 取得今天的日期,可以使用“SYSDATE” select sysdate from dual; 日期的计算有以下几种计算: 日期+数字=日期,表示若干天之后的日期 日期-数字=日期,表示若干天之前的日期 日期-日期=数字,表示两个日期之间的天数,但是必须大日期减小日期 求出每个雇员到今天为止的雇佣天数 select ename,hiredate,sysdate-hiredate from emp; 日期除了以上的三个计算公式,还有四个操作函数 LAST_DAY(日期):求出指定日期当月的最后一天 求出本月的最后一天日期 select last_day(sysdate) from dual; NEXT_DAY(日期,星期数):求出下一个指定星期几的日期 下一个周六是几号 select next_day(sysdate,'sat') from dual; 下一个周日是几号 select next_day(sysdate,'sun') from dual; ADD_MONTHS(日期,数字):求出若干月之后的日期 四个月后是几号 select add_months(sysdate,4) from dual; MOUNTHS_BETWEEN(日期1,日期2):求出两个日期之间所经历的月份 求出每个雇员到今天为止的雇佣月份 select ename,hiredate,trunc(months_between(sysdate,hiredate)) from emp; 注意:在所有开发之中,如果是日期的操作,建议使用以上的函数,可以避免闰年的问题。 ####转换函数 之前我们学习了字符函数,数字函数和日期函数,而转换函数的主要功能是完成这几种数据之间的互相转换的操作,一共有三种转换函数。 TO_CHAR(字符串|列,格式字符串):将日期或者数字变为字符串显示; TO_DATE(字符串,格式字符串):将字符串转变为DATE数据显示; TO_NUMBER(字符串):将字符串变为数字显示. TO_CHAR()函数 格式:年(yyyy),月(mm),日(dd) 拆分年月日 select to_char(sysdate,’yyyy-mm-dd’),to_char(sysdate,’yyyy’) year,to_char(sysdate,’mm’) month,to_char(sysdate,’dd’) day from dual; 干掉日期中的前导零 select to_char(sysdate,'fmyyyy-mm-dd') day from dual; 在oracle之中,sysdate函数中是包含了时间的,要显示时间需要增加标记 使用sysdate显示时间 select to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) haha from dual; select to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual; 使用24小时制 select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual; MI 使用TO_CHAR函数之后,所有内容为字符串,不再是date型数据,TO_CHAR同样可以用在数字上用来格式化数字 格式化数字22222222222; select to_char(22222222222,’999,999,999,999,999,999,999’) shuzi from dual; 这时,格式化字符串的数字9表示格式,而不是数字9。 格式化数字为货币记录格式,使用“L”标记表示转换为当前语言环境下的货币符号 select to_char(22222222222,'L999,999,999,999,999,999,999') huobi from dual; TO_DATE(): (熟悉用法) 使用方法如下; select to_date(‘1989-09-12’,’yyyy-mm-dd’) from dual; TO_NUMBER(): (基本不用,会用即可) 使用方法如下; select to_date(‘1989-09-12’,’yyyy-mm-dd’) from dual; 在oracle中,不使用该函数也可以完成该功能,如下: select ‘2’+’3’ from dual; ####通用函数 通用函数主要有NVL(),DECODE()两个,这两个函数算是oracle的特色函数。 NVL(): 处理null 要求查询所有雇员的全部年薪 select ename,sal,comm,(sal+comm)*12 from emp; 查询的结果出现问题,解决办法是将comm中的null值变成0,方法如下: 查看转换过程 select ename,sal,comm,nvl(comm,0) from emp; 解决问题 select ename,sal,comm,(sal+nvl(comm,0))*12 from emp; DECODE():多数值判断 判断的是数值而不是条件,类似编程中的if…else… 说明:这种判断肯定是进行逐行判断,所以这个时候就必须采用DECODE(),而此函数的用法如下: DECODE(数值|列,判断值1,显示值1,判断值2,显示值2,…) 例如:要求显示全部雇员的职位,但是这些职位要求显示成pinyin。 CLERK: 办事员 SALESMAN: 销售员 MANAGER: 经理 ANALYST: 分析员 PRESIDENT: 总裁 实现: select empno,ename,job,decode(job, 'CLERK','banshiyuan', 'SALESMAN','xiaoshouyuan', 'MANAGER','jingli', 'ANALYST','fenxiyuan', 'PRESIDENT','zongcai') from emp; ###总结: 1:以上列出的SQL语句只是最基本的语法,明白SELECT,FROM,WHERE,ORDER BY之间的关系; 2:熟悉SCOTT用户的4张表的内容,包括列的名称,作用和类型; 3:精通以上所有SQL语句和函数的使用。 >转自:http://www.uml.org.cn/sjjm/201905173.asp Last modification:August 1, 2021 © Allow specification reprint Support Appreciate the author Like 0 欢迎留下您的脚印