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