Oracle 查询操作

******************1.简单查询: ************

2.查询语法:

1.select * from emp;
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;

2.别名用法
select empno as 员工编号 , ename as 员工姓名 from emp;

3.除重复的数据
select distinct job from emp;

4.字符串 连接查询
select '编号是: ’ || empno || ‘的雇员,姓名是:’ || ename || ‘工作是:’ || job from emp;

5.查询中四则运算
查询每个雇员的年薪
select ename ,sal *12 “年薪” from emp;
select ename ,sal *12 income from emp;


3.限定查询


查询工资大于1500的所有雇员
select * from emp where sal > 1500;

非空和空的限制

查询每月能得到奖金的雇员
select * from emp where comm is not null;
select * from emp where comm is null;

查询工资大于1500并且有奖金领取的雇员 and
select * from emp where comm is not null and sal > 1500;

查询工资大于1500并且有奖金领取的雇员 or
select * from emp where comm is not null or sal > 1600;

查询工资不大于1500和没有奖金的人 语法:NOT(查询条件)
select * from emp where not (comm is not null and sal >1500);
select * from emp where sal >= 1500 and sal <= 3000;

between and 不仅可以使用在数值之间,也可以用在日期的区间
select * from emp where sal between 1500 and 3000;
select * from emp where hiredate between to_date(‘1981/1/1’, ‘yyyy/mm/dd’) and to_date(‘1981/12/31’, ‘yyyy/mm/dd’);

oracle中的查询条件中查询条件的值是区分大小写的
select * from emp where ename =‘smith’;
select * from emp where ename =‘SMITH’;

如果使用之前的做法可以使用OR关键字
查询雇员编号是7369,7499,7521的雇员编号的具体信息
SELECT * FROM emp where empno = 7369 or empno =7499 or empno = 7521

实际上,此时指定了查询范围,那么sql可以使用IN关键字
SELECT * FROM emp WHERE ENAME in('SMITH ',‘ALLEN’,‘WARD’)

在常用的站点中经常会有模糊查询,即:输入一个关键字,把符合的内容全部的查询出来,在sql中使用LIKE语句完成。
在LIKE中主要使用以下两种通配符
“%”:可以匹配任意长度的内容
“_”:可以匹配一个长度的内容

在LIKE中如果没有关键字表示查询全部
SELECT * from emp where ename like’%%’

查询名字中带有“M”的雇员
SELECT * FROM emp where ename like ‘%M%’

查询雇员编号不是7369的雇员信息
SELECT * FROM EMP WHERE EMPNO <> 7369;
OR
SELECT * FROM EMP WHERE EMPNO != 7369;

4.对结果集排序

查询雇员的工资从低到高
SELECT * FROM EMP ORDER BY SAL;
SELECT * FROM EMP ORDER BY SAL DESC;
ORDER BY 列名 默认的排序规则是升序排列,可以不指定ASC,如果按着降序排列必须指定DESC

如果存在多个排序字段可以用逗号分隔
SELECT * FROM EMP ORDER BY SAL ASC,HIREDATE DESC;

5 . 单行函数

A : 字符函数

  1. 把小写的字符转换成大小的字符
    SELECT UPPER(‘smith’) from dual;
  2. 把大写字符变成小写字符
    SELECT LOWER(‘SMITH’) FROM DUAL;
  3. 把首字符大写
    SELECT INITCAP(‘smith’) FROM dual;
  4. 字符串的连接可以使用concat可以使用“||”建议使用“||”
    SELECT CONCAT( ‘hello’,‘world’) FROM dual;
  5. 字符串的截取,使用substr,第一个参数是源字符串,第二个参数是开始索引,第三个参数结束的索引,开始的索引使用1和0效果相同
    SELECT SUBSTR( ‘hello’, 1, 3) FROM dual;
  6. 获取字符串的长度
    SELECT LENGTH( ‘hello’) FROM dual;
  7. 字符串替换,第一个参数是源字符串,第二个参数被替换的字符串,第三个是替换字符串
    SELECT REPLACE(‘hello’, ‘l’, ‘x’) from dual;

B : 数值函数

1)四舍五入函数:ROUND()
默认情况下ROUND四舍五入取整,可以自己指定保留的位数。
SELECT round(12.534) FROM dual;
SELECT round (12.534,2) FROM dual;

2)取整:TRUNC(),默认全部去掉小数,也可以指定保留的位数
SELECT TRUNC(12.536) FROM dual;

3)取余数MOD()
SELECT MOD(10, 3) FROM dual;

C.日期函数

日期 – 数字 = 日期
日期 + 数字 = 日期
日期 – 日期 = 数字(天)

  1. 查询雇员的进入公司的周数。
    分析:查询雇员进入公司的天数(sysdate – 入职日期)/7就是周数
    SELECT ename ,round((SYSDATE - hiredate) / 7) FROM emp;

  2. 获得两个时间段中的月数:MONTHS_BETWEEN()
    SELECT ename ,round(MONTHS_BETWEEN(SYSDATE, HIREDATE)) FROM EMP;

  3. 获得几个月后的日期:ADD_MONTH()
    SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;

4.求出下一个星期一是什么日期
SELECT NEXT_DAY(SYSDATE, ‘星期一’) FROM dual;

  1. 求出一个日期的最后一天
    SELECT LAST_DAY(SYSDATE) FROM dual;

D 转换函数

  1. TO_CHAR:字符串转换函数
    查询所有的雇员将将年月日分开,此时可以使用TO_CHAR函数来拆分
    拆分时需要使用通配符
    SELECT empno, ename ,
    TO_CHAR(hiredate,‘yyyy’) 年,
    TO_CHAR(hiredate,‘mm’)月,
    TO_CHAR(hiredate,‘dd’)日
    FROM emp;
    or
    SELECT empno ,ename ,TO_CHAR(hiredate,‘yyyy-mm-dd’) from emp;
    在结果中10以下的月前面被被补了前导零,可以使用fm去掉前导零
    SELECT empno ,ename ,TO_CHAR(hiredate,‘fmyyyy-mm-dd’) FROM emp;

  2. TO_CHAR还可以给数字做格式化
    把雇员的工资按三位用“,”分隔,在oracle中“9”代表一位数字
    SELECT ename ,TO_CHAR(sal ,‘99,999’) FROM emp;
    如果在钱的前面加上国家的符号可以使用“$”代表是美元,如果要使用本地的钱的单位使用“L”
    SELECT ename ,TO_CHAR(sal,’$99,999’) FROM emp;
    SELECT ename ,TO_CHAR(sal,‘L99,999’) FROM emp;

  3. TO_NUMBER:数值转换函数
    TO_NUMBER可以把字符串转换成数值
    SELECT TO_NUMBER(‘10’)+ TO_NUMBER(‘10’) FROM DUAL;

4)TO_DATE:日期转换函数
TO_DATE可以把字符串的数据转换成日期类型
SELECT TO_DATE(‘1985-04-22’, ‘yyyy-mm-dd’) FROM dual;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值