2.4SQL语句----》单行函数
2.4.1前期了解
1,大部分的关系型数据库的操作的简单区别
1)数据的存储区别
不同的数据库有各自不同的文件存储方案,mysql只往文件系统存储,Oracle可以存在文件系统中,可以存在存储设备中,可以使用asm(Automatic storage management)
2)不同的数据库支持的数据类型是不同的
大部分的传统的关系型数据库都是不知道从bool(布尔)型数据的,有些支持。
实际上是有替代品的,1真,0假
3)不同的数据库有不同的支持函数(意义不大,但很重要)
很早程序设计是要考虑跨数据库开发的,基于A数据库开发的程序迁移到B数据库上也能运行,但是随着理论的发展,发现这种移植没有意义,开始基于单种数据库开发。
不同的数据库除了标准SQL之外,想要正常编程使用,还要知道支持的函数,当然这些函数不需要直接记忆,只要英语可以,函数都是很好理解的,而且对应邯郸使用可以基于网络查询。
2.4.2函数基本格式
.Oracle中针对系统函数的定义的基本格式
返回数据类型 函数名称 (数据 | 列名称)
2.4.3返回数据类型
字符串 ------》VARCHAR2
数字---------》NUMBER
日期---------》DATE
2.4.4单行函数分类
单行函数的有很多类
字符串函数
数值函数
日期函数(避免闰年问题)
转化函数
通用函数
1.字符串函数
1)字符串的函数主要功能
进行字符串的处理,例如:转大写,转小写,计算长度,截取字符串等
2)常见的字符串函数
A.转大写函数:字符串 ----》UPPER(数据列)
B. 转小写函数:字符串------》LOWER(数据列)
C.首字母大写:字符串-----》INITCAP(数据列)
D.计算字符串长度:字符串-----》LENGTH(数据列)
E.字符串截取:字符串------》SUBSTR(数据列,截取点【,长度】)
Oracle中的字符串索引开始的值是1,如果设置为0,与1相同
也可以设为负数,表示从结尾开始指定索引
F.字符串的替换:字符串-----》REPLASCE (数据列,被替换数据,要替换数据)
3)例如
A.查看所有雇员姓名转小写字母
SQL> SELECT LOWER(ename) ename
2 FROM emp;
使用虚拟表—dual
SQL> SELECT ‘yyn’
2 FROM emp;
因为emp表中有14行记录,结果会查询到14个yyn
SQL> SELECT ‘yyn’
2 FROM dual;
引入dual 虚拟表,用于测试查询常量的
B.查询yyn的大写字母
SQL> SELECT UPPER(‘yyn’)
2 FROM dual;
这是常量
C.查询YYN的小写字母
SQL> SELECT LOWER(‘YYN’)
2 FROM dual;
D.查询YYNhhp字符串的长度
SQL> SELECT LENGTH(‘YYNhhp’)
2 FROM dual;
这是常量
E.查询出每个雇员的姓名,姓名长度
SQL> SELECT LENGTH(ename)
2 FROM emp;
F.查询姓名长度为5的雇员信息
SQL> SELECT *
2 FROM emp
3 WHERE LENGTH(ename)=5;
G.查询输入的姓名为smith的全部信息
用户进行数据添加的时候不会使用大写,根据姓名进行查询的时候,用户输入的数据很少用大小字母,在为了实现用户的数据输入,则可以采用替代变量的做法
练习1:SQL> SELECT *
2 FROM emp
3 WHERE ename =&inputname;
-----》&inputname表示等待输入给名称,inputname是起的变量名,是字符串要加引号
Enter value for inputname: ‘SMITH’
------》用户输入的名字,要用引号表示,麻烦,
产生的结果
old 3: WHERE ename =&inputname
new 3: WHERE ename =‘SMITH’
练习2:SQL> SELECT *
2 FROM emp
3 WHERE ename =’&inputname1’;
----》’&inputname1’----》用引号将输入的数据标记起来
Enter value for inputname1: SMITH
----》需要子句手动输入大写字母的名字,在生产环境没人会输入大写字母
old 3: WHERE ename =’&inputname1’
new 3: WHERE ename =‘SMITH’
练习3:SQL> SELECT *
2 FROM emp
3 WHERE ename = UPPER(’&inputname1’);
------》UPPER(转大写函数
Enter value for inputname1: smith
old 3: WHERE ename = UPPER(’&inputname1’)
new 3: WHERE ename = UPPER(‘smith’)
H.查询所有雇员的姓名,要求姓名的字母采用小写显示
SQL> SELECT LOWER(ename)
2 FROM emp;
I.查询所有雇员的姓名,要求姓名的首字母采用大写显示
SQL> SELECT INITCAP(ename)
2 FROM emp;
J.将hellowold中的l替换为r
SQL> SELECT REPLACE(‘hellowold’,‘l’,‘r’)
2 FROM dual;
K.将helloword中从第2开始截取
SQL> SELECT SUBSTR(‘helloword’,2)
2 FROM dual;
L.将helloword中从将hello截取
SQL> SELECT SUBSTR(‘helloword’,0,5)
2 FROM dual;
SQL> SELECT SUBSTR(‘helloword’,3,6)
2 FROM dual;
从第三个开始截取6个字符长度结束
M.查询雇员的姓名 的前3位字符
SQL> SELECT SUBSTR(ename,0,3)
2 FROM emp;
SQL> SELECT SUBSTR(ename,-2)
2 FROM emp;
N.要求截取每个员工的姓名前三个和后三个字符
SQL> SELECT SUBSTR(ename,1,3) || ’ ’ || SUBSTR(ename,-3)
2 FROM emp;
O.要求拼接每个员工的姓名的第一个字母和第三个字母
SQL> SELECT SUBSTR(ename,1,1) || SUBSTR(ename,3,1)
2 FROM emp;
2.数值函数
1)常见的三种数值操作函数:
ROUND(数据列【,保留小数位】)-----》四舍五入出来
不加小数位,默认四舍五入取整
TRUNC(数据列【,保留小数位】)-------》数据截取,不进位
不管小数位是1,还是9 ,都不进位,不加小数位,默认取整
MOD(数据列,数量列)-----》模运算,求余数
2)例如
A.求smith用户的日薪,并保留小数点后两位
SQL> SELECT ROUND(sal/30,2)
2 FROM emp;
smith用户的日薪整数
SQL> SELECT ROUND(sal/30)
2 FROM emp;
B.求smith用户的日薪,并保留小数点后两位—trunc
SQL> SELECT TRUNC(sal/30,2)
2 FROM emp;
C.取余操作----mod
SQL> SELECT MOD(10,3)
2 FROM dual;
3.统计函数
1.格式:Count (表名)
2.功能描述:统计数据列的个数,返回整型值
Count函数有三个名字,统计函数,组函数,分组函数
3.练习:
SQL> SELECT COUNT(*)
2 FROM emp;
count函数只能和统计类函数一起使用,不能使用某个字段,否则会报错
4.平均值函数
1.格式:avg(数据列)
2.功能描述:求数据列的平均数, count函数只能和统计类函数一起使用,不能使用某个字段,否则会报错
3.练习:SQL> SELECT COUNT(*),AVG(sal)
2 FROM emp;
-
计算月数的函数
1.格式:MONTHS_BETWEEN(时间1,时间2)
2.功能描述:计算2个时间点的月数
3.练习:
-
转化日期的函数
1.格式:TO_DATE(‘年-月-日‘,’yyyy-mm-dd‘)
2.功能描述:将自定义的时间格式 ‘年-月-日‘转化为TO_DATE的格式
3.练习:
SQL> SELECT TO_DATE(‘2020-10-20’,‘yyyy-mm-dd’)
2 FROM dual;