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

 

posted @ 2018-04-25 10:54  王玉岩  阅读(306)  评论(0编辑  收藏  举报