您的位置:首页 > 数据库 > Oracle

Oracle DAY02

2018-11-22 00:44 113 查看

DQL语句
SELECT语句
也用来查询数据的DQL语句
查询某张表中所有字段的所有记录:
SELECT * FROM emp
SELECT name ,job, birth FROM emp
DQL必须包含SELECT 和FROM
可以使用的有:表的字段,函数,表达式,FROM用来确定查询的表
SELECT name,salary*12 FROM emp
字符串函数:
CONCAT(p1,p2)连接字符串p1和p2
SELECT CONCAT(name,salary) FROM emp
SELECT CONCAT(CONCAT(name,':'),salary) FROM emp
连接字符串的简便方式:使用"||",和Java中不一样
SELECT name||'工资:'||salary FROM emp

LENGTH 返回字符的实际长度,获取字符长度
SELECT name,LENGTH(name) FROM emp

UPPER,LOWER,INTCAP将字符转换位全大写,全小写,首字母大写
dual:伪表,当查询的内容与任何一张表中的数据无关时,可以查询伪表。
SELECT UPPER('helloworld'),LOWER('HELLO WORLD'),
INITCAP('hello world') FROM dual

TRIM,LTRIM,RTRIM,去除字符串两边的指定字符,去除左边的字符,去除右边的字符
SELEcT
TRIM('e' FROM 'eeeeliteresee')
FROM dual
去除左边的字符,下面例子只要满足'esk'中的一个字符就会去掉
SELECT 
LTRIM('eseskskekselitersseee','esk')
FROM dual

LPAD,RPAD补位函数,要求显示指定内容指定位数,若不足则补充若
干指定字符达到显示的长度。常用于左右对齐
SELECT name,RPAD(salary,5,' ')
FROM emp

SUBSTR 截取字符串
截取给定字符串,从指定位置开始截取指定个字符,在数据库中,下表都是从1开始的!
(6,3)从第6个开始,取三个。(-4,4)从和倒数第四个,取4个
SELECT SUBSTR('thinking in java',6,3)
FROM dual

INSTR 返回子串在源字符串中的位置
SELECT INSTR(char1,char2[,n[,m]])查找char2在char1中的位置,n为
从指定位置开始查找,可以不写。m为第几次出现,可以不写。n,m不写默认都是1.
SELECT INSTR('thinking in java','in',8,1) FROM dual

SELECT name,salary,job FROM emp WHERE LOWER(name)='tom'

查询表中名字是m开头的人
SELECT name, salary, job FROM emp WHERE SUBSTR(name,1,1)='t'

数字函数
NUMBER(P,S)表示浮点数,p 可以存储的最大数字长度,s 在小数点右边的最大数字长度
1.ROUND (n,[,m]):用于四舍五入,对n进行四舍五入,保留到小数点后m位,m可以不写,不写默认为0
m为0则保留到整数位,1保留到小数点后1位
SELECT ROUND(45.678,2) FROM dual
SELECT ROUND(45.678,0) FROM dual
SELECT ROUND(55.678,-2) FROM dual

2.TRUNC 用于截取,按照截取的方式处理数字,不会四舍五入,直接截取
SELECT TRUNC(55.678,2)FROM dual
SELECT TRUNC(55.678,-1)FROM dual

3.MOD(m,n),求余 返回m除以n的余数
  SELECT name salary,MOD(salary,1000) FROM emp
4.CEIL(n)和FLOOR(n),CEIL天花板取大于或等于n的最小整数值,FLOOR取小于等于n的最大整数值
SELECT CEIL(45.678) FROM dual
SELECT FLOOR(45.678) FROM dual

DATE 日期类型
DATE:7个字节,保存世纪,年月日时分秒
TIMESTAMPl时间戳,比DATE 多四个字节,可以保存秒以下的精度,前7个字节与DATE一致
关键字:SYSDATE:对应一个内置函数,返回一个表示当前系统时间的DATE 类型的值
SYSTIMESTAMP:同样的,返回的是表示当前系统时间的时间戳类型的值
    SELECT SYSDATE FROM dual
    SELECT SYSTIMESTAMP FROM dual
日期转换函数
TO_DATE 函数,按照给定的日期将字符串解析位DATE类型的值
SELECT TO_DATE('1993-08-18 23:11:11','YYYY-MM-DD HH24:MI:SS') FROM dual
在日期格式字符串中,不是英文数字,符号的其他字符都需要用双引号括起来!
DATE 是比较大小的,越晚的越大
SELECT name FROM emp WHERE hiredate>TO_DATE('2015-11-15','YYYY-MM-DD')
DATE之间可以做减法,差位相差得天数
SELECT name,(SYSDATE-hiredate) FROM emp

SELECT TRUNC(SYSDATE-TO_DATE('1993-09-18','YYYY-MM-DD')) FROM dual

DATE可以和一个数字进行加减运算,相当于加减指定的天数,返回值位对应的日期
SELECT SYSDATE+7 FROM dual

TO_CHAR 常用于转换日期,可以将日期按指定的日期格式转换为字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual
SELECT TO_CHAR(SYSDATE,'YY-MM-DD HH24:MI:SS') FROM dual

SELECT TO_CHAR(TO_DATE('99-09-01','YY-MM-DD'),'YYYY-MM-DD') FROM dual

LAST_DAY(date):返回给定日期所在月的最后一天
SELECT TO_CHAR(LAST_DAY(SYSDATE),'YYYY-MM-DD') FROM dual

ADD_MONTHS(date,i),返回日期date加上i个月后的日期值,i可正负。
查看员工20周年纪念日
SELECT name, ADD_MONTHS(hiredate,12*20) FROM emp

MONTHS_BETWEEN(date1,date2),计算两个日期值之间隔了多少个月
SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('1993-09-18','YYYY-MM-DD')) FROM dual

NEXT_DAY(date,char):返回date日期数据的下一周几,周几由参数char决定,1-7表示周日-周六
SELECT NEXT_DAY(SYSDATE,4) FROM dual

LEAST(a,b,c) GREATEST(a,b,c) ,求最小,最大值(参数中的最小,最大值。可以是数字日期字母)

SELECT LEAST(SYSDATE,TO_DATE('2008-10-10','YYYY-MM-DD')) FROM dual 

插入NULL值
CREATE TABLE student(
  id NUMBER(4),name CHAR(20),gender CHAR(1) NOT NULL
  )
  INSERT INTO student VALUES(1000,'李莫愁','F');
  INSERT INTO student VALUES(1001,'林平之',NULL);
  INSERT INTO student(id,name) VALUES(1002,'张无忌');
  SELECT *FROM student
  
更新成NULL值
判断一个字段的值是否为空,使用:IS NULL 或IS NOT NULL
UPDATE student SET gender='M'
WHERE gender is NULL
SELECT * FROM student
DROP  TABLE student

NULL的运算,NULL与字符串连接等于什么都没做,
NULL与数字运算结果还是NULL;

空值函数
NVL(p1,p2),将NULL转变为非NULL,
若p1为NULL,函数返回p2自身,
若不为NULL,函数返回p1自身,所以该函数的作用是将NULL值替换为非NULL值

NVL2(p1,p2,p3),如果p1不为NULL,返回p2,如果为NULL,返回p3

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: