oracle学习-day02

直接写例子

--DQL查询语句
--SELECT语句用来查询表中数据,一条SQL语句是由多个子句组成,一个子句有一个关键字加一系列内容组成。
--SELECT语句中必须包含的是两个子句,SELECT子句和FROM子句。
--SELECT子句用于指定要查询的内容(字段、函数、表达式),from子句用来指定数据来源*/

--查询所有数据
	SELECT * FROM emp;

--分别查询,限制条件deptno=30
	SELECT ename,job,sal,deptno FROM emp WHERE deptno=30;

--查询工资大于2000的员工信息
	SELECT * FROM emp WHERE sal>2000;

--查询所有员工的年薪
	SELECT ename,sal,sal*12 FROM emp;

--CONCAT函数:连接字符串, 
--要求->查询时两个字段名并在一起
	SELECT CONCAT(ename,sal) FROM emp;
--要求并在一起的格式   -->ename:sal
	SELECT CONCAT(CONCAT(ename,':'),sal) FROM emp;
--连接字符串常用"||"  -->ename:sal
	SELECT ename||':'||sal FROM emp;

--LENGTH函数:字符串长度
	SELECT ename, LENGTH(ename) FROM emp;
--名字4个字母的员工
	SELECT ename,length(ename) FROM emp WHERE LENGTH(ename)=4;

--UPPER(大写),LOWER(小写),INITCAP(首字母大写)
--dual:伪表,当查询的内容不是任何表中数据,可以用伪表代替
	SELECT UPPER('hello world'),lower('HELLO WORLD'),INITCAP('hello world')FROM dual;
--查询SCOTT员工的信息
	SELECT ename,sal,deptno FROM emp WHERE ename=UPPER('scott');

--TRIM(去除字符串两侧指定字符),LTRIM,RTRIM
	SELECT TRIM('e' FROM 'eeeelisteee') FROM dual;			--liat
--LTRIM(去掉左边指定字符,'ets'包含一个都去掉)
	SELECT LTRIM('ssttestesteseettslistees','ets') FROM dual --listees
--RTRIM
	SELECT RTRIM('setlistssetteessetst','ets') FROM dual		 --setli

--LPAD,RPAD 补位函数
--LPAD(左补位)效果->右对齐
	SELECT ename,sal,LPAD(sal,6,' ') FROM emp
--RPAD(右补位)效果->左对齐
	SELECT ename,sal,RPAD(sal,6,' ') FROM emp
--LPAD,RPAD超位都截取左边
	SELECT ename,sal,RPAD(sal,3,'$') FROM emp

--SUBSTR函数:截取字符串
--SUBSTR(str,m,n) 截取str字符串从m开始连续截取n个字符,数据库中下标都是从1开始!
	SELECT SUBSTR('thinking in java',10,2) FROM dual	--in
--省略截取数量,或者截取数量超过实际内容都是截取到末尾
	SELECT SUBSTR('thinking in java',10,100) FROM dual--in java
--若位置m是负数,表示倒数位置开始截取,个数n不能为负数
	SELECT SUBSTR('thinking in java',-7,2) FROM DUAL	--in
	
--INSTR:查看字符串的位置
--INSTR(str1,str2,m,n)查找str2在str1中的位置,m,n是可选项,分别表示
--m:从第几个字符开始查找
--n:第几次出现的位置
	SELECT INSTR('thinking in java','in',4) FROM DUAL		--6
	SELECT INSTR('thinking in java','in',2,3) FROM DUAL	--10

--数值函数
--ROUND(m,n):四舍五入,保留m到小数点后n位,n为0或者不指定这是保留整数
--n为负数这是保留到小数点前的位数
	SELECT ROUND(45.678,2) FROM DUAL	--45.68
	SELECT ROUND(45.678,0) FROM DUAL	--46
	SELECT ROUND(45.678,-1) FROM DUAL	--50
	SELECT ROUND(45.678,-2) FROM DUAL --0
	SELECT ROUND(55.678,-2) FROM DUAL --100

--TRUNC(m,n) 截取数字,参数作用与ROUND一致
	SELECT TRUNC(45.678,2) FROM DUAL	--45.67
	SELECT TRUNC(45.678,0) FROM DUAL 	--45
	SELECT TRUNC(45.678,-1) FROM DUAL --40
	SELECT TRUNC(45.678,-2) FROM DUAL	--0

--MOD(m,n)求余
	SELECT ename,sal,MOD(sal,1000) FROM emp;

--CEIL(n):向上取整,大于它的最小整数
	SELECT CEIL(45.678) FROM DUAL		--46
--FLOOR(n):向下取整,小于它的最大整数
	SELECT FLOOR(45.678) FROM DUAL	--45

--日期相关操作
--关键字SYSDATE:对应数据库一个内置函数,返回一个DATE类型的值,该值表示当前系统时间
--SYSTIMESTAMP:返回当前系统时间戳类型的值
	SELECT SYSDATE FROM dual
	SELECT SYSTIMESTAMP FROM dual

--日期转换函数
--TO_DATE()可以将一个字符串按照给定的日期格式解释为一个DATE类型的值
	SELECT TO_DATE('2008-08-08 20:08:06','YYYY-MM-DD HH24:MI:SS')FROM dual
--日期格式字符串中凡不是英文、符号、数字之外的其他字符都要使用双引号括起来
	SELECT TO_DATE('2008年08月08日 20:08:06','YYYY"年"MM"月"DD"日" HH24:MI:SS')FROM dual

--TO_CHAR():将日期按照指定的格式转换为字符串
	SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') FROM dual

--日期类型可以比较大小,越晚的越大;日期类型之间可以进行减法,差为相差的天数;
--日期可以进行减加数字,等同于加减天数
--查看每个员工入职至今的天数
	SELECT ename,SYSDATE-hiredate FROM emp
--出生到现在活了多少天
	SELECT SYSDATE-TO_DATE('1996-09-13','YYYY-MM-DD') FROM dual
--'RR-MM-DD'和'YYYY-MM-DD'求完整的年份
	SELECT TO_CHAR(TO_DATE('30-01-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

--MONTHS_BETWEEN(date1,date2) 计算两个日期之间相差的月,计算是用date1-date2换算得到的
	SELECT ename,MONTHS_BETWEEN(SYSDATE,hiredate) FROM emp

--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

	SELECT ename,sal,hiredate FROM emp WHERE EXTRACT(YEAR FROM hiredate)>=1982

--创建表student
CREATE TABLE student(
	ID NUMBER(4),
	NAME VARCHAR2(20),
	gender varchar2(5)
)
--插入表数据
	INSERT INTO student VALUES(1000,'李莫愁','girl')
	INSERT INTO student VALUES(1001,'林平之',NULL)
	INSERT INTO student(id,NAME) VALUES(1002,'张无忌')
--查询表数据
	SELECT * FROM student
--修改id=1002 的gender为boy
UPDATE student SET gender='boy' WHERE ID=1002

--在判断某个字段的值是否为空时,要使用IS NULL和IS NOT NULL判断,不能用‘=’判断为空
UPDATE student SET gender='boy' WHERE gender IS NULL
--NULL的操作,NULL与字符串连接,等于什么都没做,NULL与数字计算,结果还是NULL
SELECT ename,sal,comm,sal+comm FROM emp

--空值函数
--NVL(a1,a2)若a1为NULL则函数返回a2,否则返回a1自身,所以该函数的作用将NULL值替换为非NULL值
SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp
--若该员工有奖金,则显示为‘有奖金’,奖金为NULL,则显示‘没有奖金’
--NVL2(a1,a2,a3),当a1不为NULL时,函数返回a2,a1为NULL时,返回a3
SELECT ename,sal,comm,NVL2(comm,'有奖金','无奖金') FROM emp
SELECT ename,sal,comm,NVL2(comm,sal+comm,sal) FROM emp








如有问题欢迎留言!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值