002
--DQL查询语句 --SELECT语句用来查询表中数据 --一条SQL语句是由多个子句组成 --一个句子有一个关键字加一系列内容组成 --SELECT 语句中必须含有的时两个子句 --SELECT 子句和 FROM 子句 --SELECT 子句用于指定要查询的内容(字段,函数,表达式), --FROM子句用来指定数据来源的表 select ename,job,sal,deptno from emp_coco where sal>2500 --查看每个员工的年薪 select ename,sal,sal*12 from emp_coco --java中的+ select concat(CONCAT(ename,':'),sal) from emp_coco --连接字符串常用“||” (常用) select ename||':'||sal from emp_coco --LENGTH函数:字符串长度 select ename,length(ename) from emp_coco --名字4个字母的员工 select ename from emp_coco where length(ename)=4 --UPPER,LOWER,INITCAP (首字母大写) --dual:伪表,当查询的内容不是任何表中数据时,可以用伪表代替 select upper('helloworld'), lower('HELLOWORLD'), initcap('hello world') from dual --举例 select ename,sal,deptno from emp_coco where ename=upper('scott') -- TRIM,LTRIM,RTRIM 去除字符串两侧的指定字符 select trim('e' from 'eeeliteee') from dual --只要包含就去除 select ltrim('etsettsetsliteee','ets') from dual select rtrim('eeelitetssteetts','ets') from dual --LPAD,RPAD 补位函数(用于左右对齐),实际长度多了就截取,截取都是从左向右 select ename,rpad(sal,3,' ') from emp_coco select ename,lpad(sal,6,' ') from emp_coco --数据库下标都是从1开始的!(不同于java) --SUBSTR 截取字符串函数(不同于java中的sub) --substr(str,m,n) 截取字符串从m处开始,连续截取n个字符。 --substr(srt,m) 省略截取数量,或超量,实际截取内容都是到末尾 select substr('thinking in java',1,2) from dual select substr('thinkingin java',10) from dual select substr('thinking in java',-7,2) from dual --INSTR:查看字符串的位置 --Instr(str1,str2,m,n) 查找str2在str1中的位置 --m,n是可选项,分别表示: --m 从第几个字符开始查找 --n:第几次出现位置 select instr('thinking in java','in',4,2) from dual --数字函数 --ROUND(m,n):四舍五入,保留m到小数点后n位 --n为0或不指定这时保留到整数 --n为负数这是保留到小数点前的位数 select round(45.678,2) from dual select round(45.678,0) from dual select round(45.678,-1) from dual --TRUNC(m,n):截取数字 --参数作用于ROUND一致 select trunc(45.678,2) from dual select trunc(45.678,0) from dual select trunc(45.678,-1) from dual --MOD(m,n):求余 select ename,sal,mod(sal,1000) from emp_coco --CEIL,FLOOR:向上取整,向下取整 select ceil(45.678) from dual select floor(45.678) from dual --日期相关操作 --SYSDATE:对应数据库一个内置函数, --返回一个DATE类型的值,该值表示当前系统时间 --SYSTIMESTAMP:返回当前系统时间的时间戳类型的值 select sysdate from dual select systimestamp from dual --日期转换函数 --TO_DATE()可以将一个字符串按照给定的日期格式解析为一个DATE类型的值 select to_date('2009-08-08 20:08:05','yyyy-mm-dd hh24:mi:ss') from dual --日期格式字符串中凡不是英文,符号,数字之外的其他字符要是用双引号括起来 select to_date('2008年08月08日 20:08:05','yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual select sysdate from dual --TO_CHAR(): --将日期按照指定的格式转换为字符串 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual --日期类型可以比大小,越晚的越大 --日期类型之间可以进行减法,差为相差的天数 --日期可以进行减加数字,等于加减天数 --查看每个员工入职至今多少天 select ename,sysdate-hiredate from emp_coco --至今活了多少天 select trunc(sysdate-to_date('1990-09-23','yyyy-mm-dd')) from dual --RR-MM-DD select to_char(to_date('49-08-01','RR-mm-dd'),'yyyy-mm-dd') from dual --LAST_DAY(date) 查看给定日期所在月的月底 select last_day(sysdate) from dual --ADD_MONTHS(date,i) --对给定日期加上指定的月,若i为负数,则是减去 select ename,add_months(hiredate,20*12) from emp_coco --MONTHS_BETWEEN(date1,date2) --计算两个日期之间相差的月,计算是用date1-date2换算得到的 select ename,months_between(sysdate,hiredate) from emp_coco --NEXT_DAY(date,i) --返回给定日期第二天开始一周内的周几的日期 --i表示周几:1为周日,2为周一 select next_day(sysdate,6) from dual --LEAST,GREATEST 求最小值与最大值 参数最少一个 select least(sysdate,to_date('2008-10-10','yyyy-mm-dd')) from dual select greatest(sysdate,to_date('2008-10-10','yyyy-mm-dd')) from dual --EXTRACT函数: --提取指定日期中指定时间分量的值 --date可以提取年月日,时间戳还可以提取时分秒 select extract(year from sysdate) from dual --82年入职员工 select ename,sal,hiredate from emp_coco where extract(year from hiredate)=1982 create table student_coco1( id number(4), name char(20), gender char(1) ) select * from student_coco1 insert into student_coco1 values(1000,'李莫愁','f') insert into student_coco1 values(1001,'林平之',null) insert into student_coco1 (id,name) values(1002,'张无忌') update student_coco1 set gender=null where id=1000 --在判断某个字段的值是否为空时,要使用is null和is not null判断 --不能用等号“=”判断为空 update student_coco1 set gender='m' where gender is null --null的操作 --null与字符串连接,等于什么都没做 --null与数字计算,结果还是null select ename,sal,comm,sal+comm from emp_coco --空值函数 NVL(a1,a2) --若a1为null则函数返回a2,否则返回a1自身 --所以该函数的作用是将null值替换为非null值 select ename,sal,comm,sal+nvl(comm,0) from emp_coco --若该员工有奖金,则显示为“有奖金”,若奖金为null,则显示“没有奖金” --NVL2(a1,a2,a3) --当a1不为null时, 函数返回a2 --当a1为null时,函数返回a3 select ename,comm,nvl2(comm,'有奖金','没有奖金') from emp_coco --NVL2可以实现NVL功能的 select ename,sal,comm,nvl2(comm,sal+comm,sal) from emp_coco