欢迎光临散文网 会员登陆 & 注册

Oracle学习笔记(2)范围查询,模糊查询,单行行数,多表查询

2023-03-10 13:59 作者:阿彦绝地反击  | 我要投稿

--day02-----------------------------------------------------------------------------------------------

目标

1. 范围查询。从...到...

2. 模糊查询.以什么开头,以什么结尾,包含什么

3. 单行行数:字符函数、数字函数、转换函数

4. 多表查询(简写版)


1.查工资从1000~2500的员工信息

select ename,sal from emp where sal>=1000 and sal<=2500; --and 逻辑与,两边都成立返回true

--or 逻辑或,有一遍成立返回true


针对范围查询关键字:between ...小... and ...大...

select eName,sal from emp where sal between 1000 and 2500;


2.模糊查询

模糊查询即像什么一样,语法:列名 like '%X%' %任意多个字符 _任意一个字符

select * from dept where dName like '%O%'; --部门名称包含“O”的部门信息

select * from Dept where dName like 'A%'; --部门名称以“A”开头的部门信息

select * from Dept where dName like '_A%'; --部门名称中“A”是第2个字符的部门信息


3.单行函数

专用来做测试查询的表:dual 此表1行1列的值

字符函数:

转大写 upper('字符') select upper('abcDEF') from dual; 'ABCDEF'

转小写 lower('字符') select lower('abcDEF') from dual; 'abcdef'

首字符大写 initcap('字符') select initcap('miss.wu') from dual; 'Miss.Wu'

练习:查部门所在地区NEW YORK要求不区分大小写

select * from dept where lower(loc) = lower('New York');

链接 concat('字符1','字符2') select concat('abc','def') from dual; 'abcdef'

获得长度 length('字符') select length('abcde') from dual; 5

截取 substr('字符',启点,几个); select substr('abcde',2,3) from dual; 'bcd'

select substr('abcde',-2,1) from dual; 'd'

注意启点是正数时从前向后的第N个字符开始,向后截取几个

    启点是负数时从后向前的第N个字符开始,向后截取几个


练习:显示部门信息,部门名称、所在区域最多承载5个字符显示位

select deptNo,subStr(dName,1,5)||'...' deptName,substr(loc,1,5)||'...' deptLoc  from dept;

数学函数:

四舍五入 round(数值,有效位数) select round(1255.55) from dual; 1256

select round(1255.55,1) from dual; 1255.6

select round(1255.55,-1) from dual; 1260

全舍去 trunc(数值,有效为主) select trunc(1255.55) from dual; 1255

select trunc(1255.55,1) from dual; 1255.5

select trunc(1255.55,-1) from dual; 1250




练习:SMITH此员工在干1/3的时离职,因此工资只拿1/3

select eName,sal,trunc(sal/3,1) from emp where upper(eName)=upper('smith');


转换函数:

字符转数值* to_number('字符') select to_number('123') from dual;

字符转日期* to_date('字符','yyyy-mm-dd hh:mi:ss') 


select to_date('2018-01-04','yyyy-mm-dd') from dual;

显示 '04-01-2018'


数值转字符/日期转字符 to_char(日期,'格式')

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

返回系统日期 2018-04-04 12:00:23

select to_char(800,'$9999.99') from dual;

返回字符:'$800.00'

格式说明:

9  --  任意1个字符,小数点前不强制补0,小数点后强制补0

0  --  任意1个字符,小数点前后强制补0

$  --  货币符号:美金

L  --  货币符号:本地

yyyy -- 年 mm -- 月 dd--日

hh  -- 小时(12进制) hh24 -- 小时(24进制)

mi  -- 分钟 ss -- 秒

获取明天的日期:select to_char( sysdate+1 ,'yyyy-mm-dd hh24:mi:ss' ) from dual;

练习:查询时当月当天入职的员工信息(请调整系统时间2月22日)

SQL> select empNo,eName,to_char(HIREDATE,'yyyy-mm-dd') from emp

  2    where to_char(HIREDATE,'mm') = to_char(sysdate,'mm')

  3      and to_char(HIREDATE,'dd') = to_char(sysdate,'dd');


4、多表查询(简版)

   内链查询:显示是多表的共有数据(你有、我有、他也有,大家都有的数据)

思考题:一句查询语句显示员工姓名和部门名称,怎么办?怎么办?怎么办?

员工姓名eName 在员工表emp中

部门名称dName 在部门表dept中

分析emp员工表与dept部门表的结构中都有一个deptNo部门编号


答:select e.eName,e.deptNo, d.deptNo,d.dName from emp e,dept d

        where e.deptNo = d.deptNo;

解:员工“KING ”的部门是10,10号部门是 《ACCOUNTING》

    外链查询:显示(+)对面表的所有数据

思考题:显示所有员工信息(共13行),没有部门的员工部门信息补null

答:select e.eName,e.deptNo,d.deptNo,d.dName from emp e,dept d

    where e.deptNo = d.deptNo(+);


思考题:显示没有员工的部门信息

答:select d.deptNo,d.dName,d.loc from dept d,emp e

    where e.deptNo(+) = d.deptNo

      and e.eName is null;


Oracle学习笔记(2)范围查询,模糊查询,单行行数,多表查询的评论 (共 条)

分享到微博请遵守国家法律