Oracle01

基本查询

1.查询出所有emp中的信息,并用中文进行字段重命名

select empno as "员工号",ename "员工姓名",job "职位",salary "薪水",hiredate "入职日期" from emp;

2.查询emp表中员工的job信息,并去除重复信息

select distinct(job) from emp;

3.查询emp表中员工的全年的工资总和(sal总和)

select ename,12*sal from emp;

4.查询emp表中员工的全年收入总和(sal+bouns的总和,注意:如果没有奖金的员工,要判断非空再进行运算)

select ename,12*sal+nvl(bouns,0) from emp;

5.查询emp表中员工的员工编号,姓名,并且带有输出格式:(编号:xxx,姓名:xxx)
①concat拼接方式

select concat('编号:',empno),concat('姓名:',ename) from emp;

②Oracle的||方式

select '编号'||empno||',姓名:'||ename from emp;

条件查询

1.查询工资大于1500的员工

select * from emp where salary>=1500;

2.查询工资大于1500并且有奖金的雇员

select * from emp where salary>=1500 and bouns is not null;

3.查询工资大于1500或者有奖金的雇员

select * from emp where salary>=1500 or bouns is not null;

4.查询工资大于1500并且没有奖金的雇员

select * from emp where salary>=1500 and bouns is null;

范围查询

1.查询工资大于1500但小于3000的全部员工
①>=,<=方式

select * from emp where salary>=1500 and salary<=3000;

②between and

select * from emp where salary between 1500 and 3000;

2.查询2020-1-1到2020-12-31号入职的员工(between and)

select * from emp where hiredate between to_date('2020-1-1','yyyy-MM-dd') and to_date('2020-12-31','yyyy-MM-dd');

3.查询员工编号是1,3,5的员工
①or方式

select * from emp where empno=1 or empno=3 or empno=5;

②in方式

select * from emp where empno in(1,3,5);

排序

1.查询员工工资进行降序排序

select ename,salary from emp order by desc;

2.查询员工的奖金并做降序排序(注意null值如果不处理也会被排出来[nulls first/nulls last:将空值排到前面或者最后面])

select ename,bouns from emp order by bouns desc nulls last;

3.查询员工的工资做降序排列并且其中奖金部分是升序排序(结果以第一列为准,当第一列数值相同时,第二列再排序)

select ename,salary,bouns from emp order by salary desc,bouns asc;

单行函数

–伪表,虚表:dual 没有任何实际意义,只是为了补全Oracle查询语法–
①字符函数
1.将’smith’转换成大写

select upper('smith') from dual;

2.将所有员工姓名转换成小写

select lower(ename) from emp;

3.将’smith’首字母大写

select initcap(ename) from emp;

4.将’helloworld’截取字符串成’hello’

select substr('helloworld',1,5) from dual;

5.获取’hello’的字符串长度

select length('hello') from dual;

6.将’hello’中的e用x进行替换

select replace('hello','e','x') from dual;

数值函数

1.将15.66进行四舍五入(从-2到2)

select round(15.66,-2) from dual;--0
select round(15.66,-1) from dual;--20
select round(15.66,0) from dual;--16
select round(15.66,1) from dual;--15.7
select round(15.66,2) from dual;--15.66

2.将15.66进行截断(从-2到2)

select trunc(15.66,-2) from dual;--0
select trunc(15.66,-1) from dual;--10
select trunc(15.66,0) from dual;--15
select trunc(15.66,1) from dual;--15.6
select trunc(15.66,2) from dual;--15.66

3.对15/3进行求余数

select mod(15,3) from dual;

日期函数

1.查询系统时间

select sysdate from dual;

2.查询员工进入公司的周数

select ename,(sysdate-hiredate)/7 from emp;

3.查询员工进入公司的月数

select ename,months_between(sysdate,hiredate) from emp;

4.求出三个月后的日期

select ename,hiredate, add_months(hiredate,3) from emp;

=====转换函数
1.将系统日期显示为yyyy-mm-dd hh:mi:ss(去掉补零[fm]和24小时显示时间)

select to_char(sysdate,'yyyyfm-mm-dd hh24:mi:ss') from dual;
--Oracle里分钟写成mi,所以月份可以写成小写的mm

2.将系统日期显示为年月日’2020年11月14日’

select to_char(sysdate,'yyyy')||'年'||to_char(sysdate,'MM')||'月'||to_char(sysdate,'dd')||'日' from dual;

通用函数

1.空值的处理函数

select nvl(bouns,0) from emp;

2.nvl2(判断值,空返回值,非空返回值)

select nvl2(null,'1','2')from dual;
/*如果第一个参数是null,那么就用第三个参数代替,
如果不是null,则用第二个参数代替
*/

条件表达式

1.查询员工的job内容并转成中文显示

①decode方式(推荐)
select ename,decode(job,
'clerk','柜员','salesman','销售','manager','管理','其他') from emp;
--如果不写'其他'剩余没匹配到的会出现空值②case when then end方式
select ename,case job when 'clerk' then '柜员'when 'manager' then '管理'when 'salesman' then '销售'else'其他'end from emp;

分组函数

1.查询部门编号及人数

select deptno,count(*) from emp group by deptno;

2.查询每个部门编号及平均工资

select deptno,avg(salary) from emp group by deptno;

3.查询部门名称,部门编号,平均工资

select dname,emp.deptno,avg(salary) from dept,emp where dept.deptno=emp.deptno group by emp.deptno,dname;
/*Oracle规范中,普通字段(当前语句中的avg聚合函数就不是普通
字段)必须出现在group by里
*/

4.查询部门人数大于5的部门

select deptno,count(*) from emp group by deptno having count(*)>5;

5.查询部门编号,部门名称,平均工资且平均工资大于2000

select emp.deptno,dname,avg(salary) from emp,deptwhere emp.deptno=dept.deptnogroup by emp.deptno,dname having avg(salary)>2000;

多表关联查询

查询员工编号,员工姓名,员工部门编号,员工部门名称,员工部门地址,中文显示员工工资等级,及领导编号,领导姓名,领导部门编
号,领导部门名称,中文显示领导工资等级

–1.查询员工编号,员工姓名,领导编号,领导姓名

–2.查询员工编号,员工姓名,员工部门编号,员工部门名称,员工部门地址,领导编号,领导姓名,领导部门编号,领导部门名称

–3.查询员工编号,员工姓名,员工部门编号,员工部门名称,员工部门地址,员工工资等级,领导编号,领导姓名,领导部门编号,领导部门名称,领导工资等级

–4.查询员工编号,员工姓名,员工部门编号,员工部门名称,员工部门地址,中文显示员工工资等级,领导编号,领导姓名,领导部门编
号,领导部门名称,中文显示领导工资等级

外连接

1.查询员工编号,姓名,领导编号,领导姓名,包括没领导的
①left join on方式

②Oracle的(+)方式

2.查询出所有部门信息(包括没员工的部门)及部门下的员工信息

子查询

1.查询比雇员7654工资高,同时从事和7788的工作一样的员工

select * from emp where salary>(select salary from emp where empno=7654) andjob=(select job from emp where empno=7788);

2.查询每个部门最低工资及最低工资的部门名称和雇员名称

select emp.empno,emp.ename,e1.minsalary,e1.deptno from (select min(salary),deptno from emp group by deptno) e1,emp,deptwhere e1.deptno=dept.deptno and emp.deptno=e1.deptno and e1.minsalary=emp.salary;

练习
1.找到员工表中工资最高的前三名(先按薪水排序,将排完序的当做一个新表,再从新表中按条件查找)

select rownum,e.* from (select emp.* from emp order by salary desc)e where rownum<=3;

2.找到员工表中薪水大于本部门平均工资的所有员工

select * from (select avg(salary)avgsal,deptno from emp group by deptno)e1,empwhere e1.deptno=emp.deptno and e1.avgsal<emp.salary;

3.统计每年入职的员工个数

select count(*),to_char(hiredate,'yyyy') from emp group by to_char(hiredate,'yyyy');

注意:(行列转换)如果此题结果集需要横向排列,那么需要用到decode关键字

select sum(hcount) "Total",max(decode(hdate,'2018',hcount))"2018",min(decode(hdate,'2019',hcount))"2019",avg(decode(hdate,'2020',hcount))"2020"
from(
select count(*)hcount,to_char(hiredate,'yyyy')hdate from emp group by to_char(hiredate,'yyyy')) e
/*别名推荐都加双引号,另外上面的max、min、avg没有实际意义,只
要是聚合就行,为了防止匹配到空值显示不到一行里面去
*/

分页查询

1.查询员工表,将员工工资进行降序查询,并进行分页取出第一页,一页三条记录(如果没有排序 两层嵌套就可以)

select * from (select rownum r,e.* from (select * from emp order by salary desc)e) e1where r>0 and r<=3;
分页公式:
select * from (select rownum r,e.* from (select * from 表名 order by 列名 desc)e) e1where r>page*pageSize and r<=(page+1)*pageSize;

集合运算

1.查询工资大于1200并且job是’clerk’(关键字:intersect)

select * from emp where salary>1200
intersect
select * from emp where job='clerk';

2.查询工资大于1200或者job是’clerk’(关键字:union;[tips:union all->不去重])

select * from emp where salary>1200
union
select * from emp where job='clerk';

3.求工资大于1200和job是’clerk’的差集(minus)

select * from emp where salary>1200
minus
select * from emp where job='clerk';
/*
如果第一个select查出的结果有3个,第二个select查出的结果有5个,
并且第一个结果中有一个记录和第二个相同,那么差集就为2
如果将上面两个select调换位置后,条件相同的情况下差集为4,
记住总是以第一个为基准
*/

Oracle02

创建、删除表空间

(一个新增的Oracle的项目,我们不创建数据库,而是创建表空间)
create tablespace 表空间名称
datafile 数据文件路径
size 100m
autoextend on
next 10m;

1.创建itcast001表空间

//表空间写到物理硬盘
create tablespace itcast333 datafile 'c:/itcast333.dbf'//数据库具体的数据文件.dbfsize 100m //文件大小autoextend on //能否自动扩展[on肯定,off否定]next 10m; //每次增长10m

2.创建itcastuser用户

create user chr identified by rrrrr95 //用户名和密码default tablespace itcast333 //默认表空间

3.为itcastuser用户赋予dba权限(一般进公司不会让你去负责分配管理权限的,作为了解)

grant dba to chr;

4.删除表空间并将物理文件一并删除

drop tablespace itcast333 including contents and datafiles;

5.删除用户

drop user chr cascade;

Oracle数据类型

字符类型
char:固定长度类型
varchar2:可变长度类型,可保存1333多个汉字

数值类型
number(3):888
number(3,2):8.88

日期类型
date:mysql中是年月日,Oracle中精确到时分秒,相当于mysql中的datetime
timestamp:精确到秒的后9位(做秒杀比较合适)

大数据类型
long:大数据字符类型,2G
Clob:存放字符类型,4G
Blob:存放二进制类型,4G(比如存储电影之类的文件)

创建表
1.创建person表,字段为pid,pname

create table person(pid number,pname varchar2(10));

Oracle表中的增删改查

(增删改都需要手动提交)
1.为person表新增一条数据

insert into person values(1,'chr');
commit;

2.修改person表中的一条数据

update person set pname='jdd' where pid=1;
commit;

3.删除person表中的一条数据

delete from person where pid=1;
commit;

修改表列的属性

1.给person表增加sex性别列,类型为number(1)

alter table person add sex number(1);

2.修改person表列sex类型为char(1)

alter table person modify sex char(1);

3.修改person表sex列为gender(修改列名)

alter table person rename column sex to gender;

4.删除person表的gender列

alter table person drop column gender;

5.删除person表的所有数据

delete from person where 1=1;
commit;

6.摧毁person表(truncate table 表名)

truncate table person;
/*直接摧毁表结构后重构表,比delete快很多,
但是无法按照条件删除*/

Oracle基础学习相关推荐

  1. Oracle登陆SQL Plus,Oracle基础学习登陆SQLPLUS(一)

    或 system/(password) 连接到本地的最高帐号 Sql>help index Enter Help [topic] for help. Sql>show all 显示当前SQ ...

  2. Oracle基础学习之三—查询

    一. 简单查询 简单查询 SELECT 字段[,字段] FROM 表; #例子: SELECT ename, empno FROM emp; 字段和表起别名 字段 [as] 别名:表名 别名 注:别名 ...

  3. oracle 授权 传递,Oracle基础学习4--Oracle权限传递

    下面将用一个实例来讲解: 首先用oracle系统用户(sysdba身份)连接到Oracle 然后创建两个用户"lisi"和"zhangsan" 然后为lisi授 ...

  4. ORACLE基础学习-RMAN应用-控制文件恢复

    在NOCATALOG模式下,RMAN创建的备份信息都将保存在目标数据库的控制文件中,所以一旦控制文件丢失,不仅目标数据库崩溃,连RMAN的备份信息也尽数丢失,这种情况下,如果您有控制文件备份,那还有救 ...

  5. oracle基础授权,Oracle基础学习3--Oracle创建用户并授权

    Oracle服务器端的操作一般如下: 1)安装Oracle服务器软件 2)       创建数据库(安装时自动创建) 3)       配置监听(安装时自动配置) 4)       启动Oracle实 ...

  6. Oracle基础学习四之表的定义及脚本编写一

    表的创建及管理    对于数据库而言实际上每一张表都表示的是一个数据库对象,而在数据库对象值的就是DDL定义的所有操作,例如:表.视图.序列.约束等,都属于对象的操作,所以表的建立就是对象的建立,而对 ...

  7. ORACLE基础学习-RMAN应用之(归档模式无备份,丢失数据文件的恢复)

    二.归档模式无备份,丢失数据文件的恢复: 首先要意识到,这种恢复是有条件的,只有在某些特定条件下,才有可能在没有备份的情况下恢复丢失的数据文件. 同时又需意识到不是所有丢失的文件都是可以被成功恢复的. ...

  8. oracle基础学习---------1

    1.SQL执行时间的开关 set timing on --->开         set timing off--->关 2.创建数据表.以已存在的表创建(也就是复制一个表.但表内没有数据 ...

  9. Oracle 基础总结:关键字总结

    Oracle 基础总结:关键字总结 一.SQL基础查询语句 1.SELECT 二.过滤和排序数据 2.DISTINCT 3.WHERE 4.BETWEEN-AND- 5.IN 6.like:使用lik ...

最新文章

  1. 一文了解神经网络的基本原理
  2. JAVA爬虫三大运营商
  3. Php在线字体woff转svg,在线字体格式转换ttf/otf/eot/woff/woff2格式工具
  4. Kafka笔记:kafka原理简介以及架构
  5. 转:Python Shell 清屏方法
  6. xhtml中的五个块元素
  7. python开源项目homeassistant_树莓派安装家庭助理,Homeassistant,HASS
  8. 误用.Net Redis客户端工具CSRedisCore,自己挖坑自己填
  9. 【转】2.1(译)关于async与await的FAQ
  10. C#中如何将字符串转换byte[],同时如何将byte[]换成字符串?
  11. 综述 | 联邦学习-新兴的人工智能基础技术
  12. 540.有序数组中的单一元素
  13. 浅谈JSON数据解析方法
  14. mysql varbinary 插入_Mysql中如何插入VarBinary二进制类型?
  15. 简易计算器的c语言编辑代码
  16. linux shell 中的idd,shell脚本入门教程.pdf
  17. 体验+营销+云,Adobe越来越“不务正业”了?
  18. 前端JS接收二维数组(列表)的解决办法
  19. Redis “max number of clients reached“的分析过程
  20. 【光线追踪系列十七】直接光源采样

热门文章

  1. 在Windows10环境下安装RabbitMAQ、Erlang的坑
  2. rem、em、px、rpx、vw、vh、%等
  3. 一周 Go World 新鲜事-2019W11
  4. matlab 频域滤波
  5. Github 设置提交邮件地址
  6. 基于深度强化学习的机器人运动控制研究进展 | 无模型强化学习 | 元学习
  7. VMware安装WinXP蓝屏及激活
  8. 软考中级【数据库系统工程师】第1章:计算机系统知识,自学软考笔记,备考2022年5月份软考,计算机硬件系统CPU组成指令寄存器组总线输入输出的程序控制方式计算机体系结构与存储系统加密技术流水线技术
  9. git-linux终端命令详解
  10. Linux 终端 基本指令