雇员信息

Eg:查询所有不是办事员的雇员信息
SQL>select * from emp where job<>‘CLERK’;
3、范围判断
BETWEEN 最小值 AND 最大值
Eg:查询基本工资在1500-3000的雇员信息
SQL> select * from emp where sal between 1500 and 3000;
Eg:查询出所有在1981年雇佣的雇员信息
SQL> select * from emp where hiredate between ‘01-JAN-81’ and ‘31-DEC-81’;
4、判断是否为空
IS(NOT) NULL,空值不是数字0或者空字符串
Eg:查询所有不领取奖金的雇员
SQL> select * from emp where comm is null;
Eg:查询出所有领取奖金的雇员信息
SQL> select * from emp where comm is not null;
5、基数范围的判断
IN操作符表示指定一个范围
Eg:查询雇员编号是7369,7566,7799的雇员信息
SQL> select * from emp where empno=7369 or empno=7566 or empno=7799;
使用IN
SQL> select * from emp where empno in (7369,7566,7799);
使用NOT IN表示不在指定范围内
注意:关于NOT IN的问题
对于IN操作是针对基数的判断,如果此时使用not in的基数中有NULL,则没有数据会显示。不满足的原因是数据库自身的保护机制,避免大数据所带来的问题。
6、模糊查询
LIKE子句
_: 匹配单个字符
%: 匹配任意多个字符
Eg:查询雇员姓名中以字母A开头的全部雇员信息
SQL> select * from emp where ename like ‘A%’;
Eg:查询雇员姓名中第二个字母是A的全部雇员信息
SQL> select * from emp where ename like ‘_A%’;
Eg:查询雇员姓名中有字母是A的全部雇员信息
SQL> select * from emp where ename not like ‘%A%’;
同理,LIKE 也可以针对各种数据类型,这些不受限制,都是用户直接执行SQL。而有一些实体层的框架上会自动帮用户加上若干验证。在使用LIKE操作如果没有编写任何查询关键字则表示查询全部。
如果现在希望我们查询到的数据可以按照指定的列由大到小或有小到大的排列可以使用ORDER BY。 ORDER BY 写在最后一行永恒在最后,在select之后执行,即ORDER BY 可以使用select子句设定的别名,说明:
该子句在所有的SQL语句最后
可以指定多个排序的字段
默认升序
降序需要手工指定
有需要的时候才进行排序
ASC 升序,默认
DESC 降序,手工设定
数据排序
语法:
SELECT [DISTINCT]*| 字段 [别名][字段 [别名]]
FROM 表名称 [别名]
[WHERE 条件(S)]
[ORDER BY 字段 [ASC|DESC],字段 [ASC|DESC],…]
Eg:查询所有雇员的信息,按工资排序
SQL> select * from emp order by sal asc;
Eg:查询所有雇员信息,按照工资降序排列,工资相同,则按雇佣日期从早到晚排列
SQL> select * from emp order by sal desc,hiredate asc;
Eg:按照年薪排序
SQL> select * from emp order by (sal+nvl(comm,0))*12;
Eg:查询所有办事员信息并由高到低排序
SQL> select * from emp where job=‘CLERK’ order by empno;
单行函数
分类:
字符函数
数字函数
日期函数
转换函数
通用函数
字符函数
主要是进行字符串数据的操作
UPPER(字符串|列) 将输入的字符串变为大写返回
LOWER(字符串|列) 将输入的字符串变为小写返回
INITCAP(字符串|列) 开头首字母大写
LENGTH(字符串|列) 求出字符串长度
REPLACE(字符串|列,被替换,替换) 进行替换
SUBSTR(字符串|列) 开始点[结束点],字符串截取
oracle提供一个虚拟表dual
Eg:转大写
SQL>select upper(‘hello’) from dual;
Eg:转小写
SQL>select lower(‘HELLO’) from dual;
Eg:将所有雇员姓名按照小写字母返回
SQL>select lower(ename) from emp;
Eg:将每个雇员姓名的开头首字母大写
SQL>select initcap(ename) from emp;
Eg:查询出雇员姓名长度刚好是5的雇员信息
SQL>select ename,length(ename) from emp where length(ename)=5;
Eg:使用字符“”替换雇员姓名中的所有字母“A”
SQL>select replace(ename,‘A’,’’) from emp;
字符串截取有两种语法:

  1. SUBSTR(字符串|列,开始点),表示从开始点一直截取到结尾
    SQL>select ename,substr(ename,3) from emp;
  2. SUBSTR(字符串|列,开始点,截取多少位),表示从开始点截取多少位
    SQL>select ename,substr(ename,0,3) from emp
    Eg:要求截取每个雇员名字的后三个字母
    通过长度-2确定开始点
    SQL>select ename,substr(ename,length(ename)-2) from emp;
    设置负数,表示从后指定截取位置
    SQL>select ename,substr(ename,-1) from emp;
    数字函数
    ROUND(数字|列[,保留小数的范围]):四舍五入的操作
    TRUNC(数字|列[,保留小数的范围]): 舍弃指定位置的内容
    MOD(数字1,数字2):取模,取余数
    ROUND
    SQL>select round(555.55) from dual;
    TRUNC
    SQL> select trunc(5555.5555),trunc(-5555.5555),trunc(5555.5555,-1),trunc(5555.5555,2) from dual;
    MOD
    SQL>select mod(10,3) from dual;
    日期函数
    Eg:取得今天的日期,可以使用“SYSDATE”
    SQL>select sysdate from dual;
    日期的计算有以下几种计算:
    日期+数字=日期,表示若干天之后的日期
    日期-数字=日期,表示若干天之前的日期
    日期-日期=数字,表示两个日期之间的天数,但是必须大日期减小日期
    Eg:求出每个雇员到今天为止的雇佣天数
    SQL>select ename,sysdate-hiredate from emp;
    日期除了以上的三个计算公式,还有四个操作函数
    LAST_DAY(日期):求出指定日期当月的最后一天
    Eg:求出本月的最后一天日期
    SQL>select last_day(sysdate) from dual;
    NEXT_DAY(日期,星期数):求出下一个指定星期几的日期
    Eg:下一个周六是几号
    SQL>select next_day(sysdate,‘sat’) from dual;
    Eg:下一个周日是几号
    select next_day(sysdate,‘sun’) from dual;
    ADD_MONTHS(日期,数字):求出若干月之后的日期
    Eg:四个月后是几号
    SQL>select add_months(sysdate,4) from dual;
    MONTHS_BETWEEN(日期1,日期2):求出两个日期之间所经历的月份
    Eg:求出每个雇员到今天为止的雇佣月份
    SQL>select ename,hiredate,trunc(months_between(sysdate,hiredate)) from emp;S
    注意:在所有开发之中,如果是日期的操作,建议使用以上的函数,可以避免闰年的问题。
    转换函数
    之前我们学习了字符函数,数字函数和日期函数,而转换函数的主要功能是完成这几种数据之间的互相转换的操作,一共有三种转换函数。
    TO_CHAR(字符串|列,格式字符串):将日期或者数字变为字符串显示;
    TO_DATE(字select 符串,格式字符串):将字符串转变为DATE数据显示;
    TO_NUMBER(字符串):将字符串变为数字显示.
    TO_CHAR()函数
    格式:年(yyyy),月(mm),日(dd)
    Eg:拆分年月日
    SQL> select to_char(sysdate,‘yyyy-mm-dd’),to_char(sysdate,‘yyyy’) year,to_char(sysdate,‘mm’) month,to_char(sysdate,‘dd’) day from dual;
    Eg:干掉日期中的前导零
    SQL>select to_char(sysdate,‘fmyyyy-mm-dd’) day from dual;
    在oracle之中,sysdate函数中是包含了时间的,要显示时间需要增加标记
    Eg:使用sysdate显示时间
    SQL>select to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’) haha from dual;
    Eg:使用24小时制
    SQL>select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual;
    使用TO_CHAR函数之后,所有内容为字符串,不再是date型数据,TO_CHAR同样可以用在数字上用来格式化数字。
    Eg:格式化数字22222222222;
    SQL>select to_char(22222222222,‘9999,9999999,999,9’) shuzi from dual;
    这时,格式化字符串的数字9表示格式,而不是数字9。
    Eg:格式化数字为货币记录格式,使用“L”标记表示转换为当前语言环境下的货币符号
    SQL>select to_char(L22222222222,‘99,99999,9999’) shuzi from dual;
    TO_DATE(): (熟悉用法)与TO_CHAR相反
    使用方法如下;
    SQL>select to_date(‘1989-09-12’,‘yyyy-mm-dd’) from dual;
    TO_NUMBER(): (基本不用,会用即可)
    使用方法如下;
    SQL>select to_number(‘2’)+to_number(‘3’) from dual;
    在oracle中,不使用该函数也可以完成该功能,如下:
    SQL>select ‘2’+‘3’ from dual;
    通用函数
    通用函数主要有NVL(),DECODE()两个,这两个函数算是oracle的特色函数。
    NVL(): 处理null
    Eg:要求查询所有雇员的全部年薪
    SQL>select ename,comm,(sal+comm)*12 from emp;
    查询的结果出现问题,解决办法是将comm中的null值变成0,方法如下:
    Eg:查看转换过程
    SQL>select ename,sal,comm,nvl(comm,0) from emp;
    解决问题
    SQL>select ename,sal,comm,(sal+nvl(comm,0))*12 from emp;
    DECODE():多数值判断
    判断的是数值而不是条件,类似编程中的if…else…
    说明:这种判断肯定是进行逐行判断,所以这个时候就必须采用DECODE(),
    而此函数的用法如下:
    DECODE(数值|列,判断值1,显示值1,判断值2,显示值2,…)
    Eg:例如:要求显示全部雇员的职位,但是这些职位要求显示成pinyin。
    CLERK: 办事员
    SALESMAN: 销售员
    MANAGER: 经理
    ANALYST: 分析员
    PRESIDENT: 总裁
    SQL> select empno,ename,job,decode(job,‘CLERK’,‘aaa’,‘SALESMAN’,‘bbb’,‘MANAGER’,‘ccc’,‘ANALYST’,‘DDD’,‘PRESIDENT’,‘FFFF’) FROM emp;
    总结:
    思维导图
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值