数据库笔记-SQLday02

SQL:
SELECT语句用来查询数据库中的数据
查看指定表中所有字段的值:
SELECT * FROM table_name


SELECT * FROM emp_wensq


--查看指定字段的值
SELECT ename,job,sal,deptno
FROM emp_wensq
--查看满足指定条件的记录
--查看20号部门的员工:
SELECT ename,job,sal,deptno  --查看指定字段值
FROM emp_wensq               --指定要查看的表
WHERE deptno=20              --限定要查看的条件,可以使用判断大小,例如:薪资>2000


--字符串函数
CONCAT(char1,char2)
--该函数会将给定的两个字符串连接在一起后返回(相当于+号)
SELECT CONCAT(ename,sal)
FROM emp_wensq


--利用嵌套函数加':'(但添加数据越多嵌套就越麻烦so一般不用)
SELECT CONCAT(CONCAT(ename,':'),sal)
FROM emp_wensq


'||'操作符也是用来拼接字符串使用,so建议使用这个,书写简单也易于理解


SELECT ename||':'||sal
FROM emp_wensq


--查看指定字符串的长度
SELECT ename,LENGTH(ename) FROM emp_wensq


--当查询的字段与任何一张表没有关系时,为了满足SELECT语法要求,我们可以使用“伪表:dual”,他不是一张真是存在的表,查询数据只会显示一条
UPPER(char),LOWER(char),INITCAP(char)
--三个函数分别将字符串转换为全大写,全小写,首字母大写
SELECT
  UPPER('helloworld'),
  LOWER('HELLOWORLD'),
  INITCAP('HELLO WORLD')
FROM dual                 --dual只为查看语法使用(实质是一个伪表)


--查看表中数据使用转字符就可避免 区分大小写问题  例如:
SELECT * FROM EMP_WENSQ
WHERE UPPER(ename=UPPER('scott'))




--TRIM
--TRIM(c2 FROM c1) 表示从c1的前后截去c2(c2只能是一个字符)
SELECT
TRIM('e'FROM 'eeeliteee')
FROM DUAL


--LTRIM,RTRIM:单独去除左面或右面的指定内容--LTRIM(c1[, c2]) 表示从c1的左边(Left)截去c2,且c2可以为多个字符
SELECT
  LTRIM('eeeeliteeee','e')
FROM dual                    --运行结果liteeee


--LPAD,RPAD函数--LPAD(char1, n, char2) 左补位函数--RPAD(char1, n, char2) 右补位函数
--补位函数:将指定内容显示指定长度,若不足则补充若干指定字符已达到指定长度,若超过则截取以显示指定长度。
--常常用于左右对齐操作
SELECT
  LPAD(ENAME,10,' ')
FROM emp_wensq


SUBSTR(char,index,len)
--截取当前字符串,从index处,开始取len个字符
--len可以不写,不写则是截取到字符串末尾,若len超过了实际可以截取的长度,也是截取到字符串末尾
--index可以是负数,若是负数,则是从倒数位置开始截取。


SELECT
  SUBSTR('thinking in java',10,2)
FROM dual


SELECT
  SUBSTR('thinking in java',-7,2)
FROM dual


--INSTR(char1,char2,m,n)
--查看char2在char1中的位置
--m:从第几个字符开始检索
--n:第几次出现
--m与n都可以不指定,默认值为1
SELECT
  INSTR('thinking in java','in',4,2)
FROM dual


--数字函数
ROUND(n,m)四舍五入,保留n的小数点后m位,m若为0则保留到正数位,负数则保留到小数点前的位数(个位,十位,百位等)
SELECT
  ROUND(45.678,2),  --运行结果:45.68
  ROUND(45.678,0),  --运行结果:46--0可以省略
  ROUND(55.678,-2)  --运行结果:100
FROM dual


TRUNC(n,m)
参数与ROUND一样,该函数不进行四舍五入,只截取数字
SELECT
  TRUNC(45.678,2),--45.67
  TRUNC(45.678,0),--45
  TRUNC(55.678,-1)--50
FROM dual


--求余  MOD(m,n)
SELECT MOD(11,4)--3
FROM dual
-- n为0则直接返回m


SELECT ename,MOD(sal,1000)
FROM emp_wensq


--CEIL和FLOOR  分别为向上取整,和向下取整
SELECT CEIL(45.678)FROM dual;--运行结果46
SELECT FLOOR(45.678)FROM dual;--运行结果45


--日期相关操作
--DATE与TIMESTAMP,DATE占7个字节分别是年与日时分秒,TIMESTAMP又称为时间戳,前7个字节与DATE一致,后4个字节记录秒以下的精度。做多可以表示到纳秒
--常用关键字:SYSDATE:表示一个内置函数,返回值为一个表示当前系统时间的DATE类型值
--SYSTIMESTAMP:表示一个内置函数,返回值为表示当前系统时间的是将戳类型值。
SELECT SYSDATE FROM dual--16-3月 -16
SELECT SYSTIMESTAMP FROM dual--16-3月 -16 02.28.18.121000000 下午 +08:00
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD day HH24:MI:SS')FROM dual--2016-03-16 星期三 14:27:43
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24"时"MI"分"SS"秒"')FROM dual--2016年03月16日 19时41分57秒


--日期类型可以进行计算,对一个日期类型的值加减一个数字等同于加减天数。两个日期类型的值进行减法,差为相差的天数。
--日期类型也可以比较大小,晚的大早的小。


--查看每个员工到今天为止入职多少天了?
SELECT ename,SYSDATE-hiredate
FROM emp_wensq
--查看到今天为止你活了多少天?
SELECT SYSDATE-TO_DATE('1992-5-21','YYYY-MM-DD')
FROM dual


--在日期格式字符串中,若出现的字符不是符号或者英文,需要使用双引号括起来 TO_DATE与TO_CHAT都遵循。
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"')FROM dual--2016年03月16日


SELECT TO_CHAR(TO_DATE('49-12-20','RR-MM-DD'),'YYYY-MM-DD')
FROM dual


--LAST_DAY(DATE)
--返回给定日期所在月的最后一天
SELECT LAST_DAY(SYSDATE)FROM dual


--ADD_MONTHS(date,i)
--对指定的日期加上指定的月,若i为负数,则是减去。(例如:查看员工3个月后转正日期)
SELECT ename,ADD_MONTHS(hiredate,3)
FROM emp_wensq


--MONTH_BETWEEN(date1,date2)
--计算两个给定日期相差的月数
--查看每个员工到今天为止入职了多少个月?
SELECT ename,MONTHS_BETWEEN(SYSDATE,hiredate)
FROM emp_wensq


--NEXT_DAY(DATE,i)
--i可以是字符串也可以是数字,字符串的话应当传入周一至周日的英文数字的话传入1-7即可,但是1表示周日返回距离给定日志最近的还没有过的周几
SELECT NEXT_DAY(SYSDATE,5)
FROM dual


--比较函数LEAST和GREATEST参数列表中最小或最大的值。
SELECT LEAST(SYSDATE,'10-10月-08')FROM dual
SELECT GREATEST(SYSDATE,'10-10月-08')FROM dual


--EXTRACT(date FROM datetime):从参数datetime中提取参数date指定的数据,比如提取年、月、日。例如取出当前日期的年:
--查看1981年入职的员工?
SELECT ename,hiredate
FROM emp_wensq
WHERE EXTRACT(YEAR FROM hiredate)=1981


CREATE TABLE student_wensq
(id NUMBER(4),name CHAR(20),gender CHAR(1));
INSERT INTO student_wensq VALUES(1000,'李莫愁','F');
INSERT INTO student_wensq VALUES(1001,'林平之',NULL);
INSERT INTO student_wensq(id,name) VALUES(1002,'张无忌');


SELECT * FROM student_wensq


UPDATE student_wensq
SET gender=NULL
WHERE ID=1000
--查看性别为空的学生信息,删除表某个字段的值是否为NULL要使用:IS NULL或者 IS NOT NULL
SELECT * FROM student_wensq
WHERE gender IS NOT NULL


--NULL与字符串拼接,结果等于什么都没做
--NULL与数字运算,结果仍未NULL
SELECT ename,sal,comm,sal+comm FROM emp_wensq


--NVL(exp1,exp2):将NULL转变为非NULL值。如果expr1为NULL,则取值expr2, expr2是非空值


SELECT ename,sal,comm,sal+NVL(comm,0)FROM emp_wensq
--查看每个员工的奖金情况,奖金不为NULL的则显示"有奖金",为NULL的则显示为"没有奖金"
--NVL2(exp1,exp2,exp3)
SELECT ename,comm,NVL2(comm,'有奖金','没有奖金')FROM emp_wensq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值