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;

不忘初心,方得始终! 坚持!坚持!坚持!!
原文地址:https://www.cnblogs.com/sumboy/p/9058622.html