Oracle 数据库 简单操作命令(新手看 可以收藏哟)

Oracle 数据库 简单操作命令(新手看 可以收藏哟)

(💖下面的案例是Oracle 10g ,可以看下句型作参考)

一、认识 Oracle

1、简介

oracle 创始人拉里·埃里森,Oracle也叫“甲骨文公司”,是一个公司的名称,Oracle是一个关系型(表)数据库,关系可以看成由行和列交叉组成的二维表格

2、需要了解的知识点

① 数据(date):数字、文字、图形、视频等

② 数据库(datebase):管理数据的仓库

③ 数据库管理系统(DBMS):Oracle、MySQL

④ 表中的列称为属性或字段

⑤ 域-值域:属性的取值范围

⑥ 表中的行称为元组或记录

⑦ 主键:能够唯一的标识一条记录的属性或属性组(联合主键)

⑧ 外键:在A表中不是主键,但是在B表中是主键,这一列就叫做A表的外键

⑨ 表空间(Tablespace):存储表的文件,相当于MySQL一个数据库

⑩ Oracle版本:Oracle 9i–Internet、Oracle 10g–grid、Oracle 11g、Oracle 12c–cloud

3、命令类型

在这里插入图片描述

二、SQL 查询

1、了解表及表的结构

  • 下面的案例需要先了解表的结构
  • emp表、dept表
    在这里插入图片描述
  • student表、score表、course表

SQL> desc student;
Name Type Nullable Default Comments
SID CHAR(6)
SNAME VARCHAR2(10) Y
SSEX CHAR(1) Y
SAGE NUMBER(38) Y
SPHONE VARCHAR2(12) Y

SQL> desc score;
Name Type Nullable Default Comments
SCID NUMBER(38)
SID CHAR(6) Y
CID CHAR(6) Y
GRADE NUMBER(38) Y

SQL> desc course;
Name Type Nullable Default Comments
CID CHAR(6)
CNAME VARCHAR2(20) Y
CHOUR NUMBER(38) Y
TNAME VARCHAR2(10) Y

2、SQL语句特点

1)SQL关键字不区分大小写

2)表名和列名不区分大小写

3)SQL语句可以换行,但是关键字不能换行

4)SQL中注释使用两个中划线(–)

3、简单的查询

(💖参考上面的表结构)

  • 查询用户下有哪些表

select * from user_tables;
在这里插入图片描述

  • 查询员工的工号、姓名、职位

select empno,ename,job from emp;
在这里插入图片描述

  • 查询所有列 *表示所有列
    查询员工信息

select * from emp;
在这里插入图片描述

  • 列别名,重新给查询出来的列起个名字
    列名 as 别名;as可以省略;当在别名中有特殊字符如空格或者需要区分大小,需要使用双引号

    –查询员工姓名、年薪(不包含奖金)

    select ename as 姓名,sal as 年薪 from emp;
    select ename 姓名,sal 年薪 from emp;
    select ename 姓名,sal “年 薪” from emp; --有空格
    select ename,sal “sumsal” from emp; --区分大小写
    在这里插入图片描述

4、基本运算符(+ - * /)学习

  • 可以对某些列(NUMBER类型、DATE型)进行算术运算
    查询员工姓名、工资,以及加了500以后的工资

select ename,sal,sal+500 from emp;
在这里插入图片描述

  • 查询员工姓名及日薪(不加奖金)

select ename,sal/24 from emp;
在这里插入图片描述

  • 查询员工姓名及年薪(不算奖金)

select ename,sal*12 from emp;
在这里插入图片描述

5、时间函数

  • 当前时间函数 sysdate
  • dual 是一张虚表,为了保证SQL语法完整性而存在
  • 工作年限 (sysdate-hiredate)/365

select sysdate from dual;

–查询员工姓名以及工作年限(截止当前时间)

select ename,(sysdate-hiredate)/365 from emp;
在这里插入图片描述

  • emp表,插入一条数据,其中员工编号是1122,入职日期是1997年7月1号
  • 第一种方式 to_date(日期,格式) 推荐使用

insert into emp(empno,hiredate) values(1123,to_date(‘1997-07-01’,‘YYYY-MM-DD’));
在这里插入图片描述

  • 第二种方式 Oracle认为满足DD-MON-YY这种格式的字符串是时间,其他字符串不是时间
  • DD-MON-YY是可以修改的 不推荐使用

insert into emp(empno,hiredate) values(1122,‘01-7月-97’);
在这里插入图片描述

  • 日期默认格式由参数NLS_DATE_FORMAT控制

select * from nls_session_parameters;

  • to_char() 将日期和数值类型转换为字符串
  • 查询入职时间是1980-12-17的员工,使用to_date/to_char函数

select * from emp where hiredate = to_date(‘1980-12-17’,‘YYYY-MM-DD’);
select * from emp where to_char(hiredate,‘YYYY-MM-DD’) = ‘1980-12-17’;

6、null 空值

  • null 意为空值、不存在、不知道的值
  • 空值参与计算结果也是空值
  • 查询员工姓名和年薪(加上奖金)

select ename,sal*12+comm from emp;
在这里插入图片描述

7、where 语句

  • where子句,对结果进行限定
  • where子句中是一个或者多个条件表达式,某一行是否被查询出来,取决于表达式结果
    是真还是假
  • 条件永远为真,会查询出所有记录
  • 查询姓名是SMITH的员工信息

select * from emp where ename=‘SMITH’; --字符串是区分大小写
在这里插入图片描述

8、比较运算符

  • 大于(>) 、大于等于(>=) 、小于(<) 、小于等于(<=) 、等于(=) 、不等于(<> !=)
  • 其他比较运算符:
    between A and B 在两者之间 大于等于A且小于等于B
    in(A,B) 匹配列表中每一项 等于A或等于B
  • 查询工资在1500和3000之间的员工信息

select * from emp where sal between 1500 and 3000;
在这里插入图片描述

  • 查询工资为1500和3000的员工信息

select * from emp where sal in (1500,3000);
在这里插入图片描述

9、like运算符 (_ %)

  • % : 可表示零或多个字符 例:张% 表示 张 张三 张亮 张三丰 张三丰子
  • : 可表示一个字符 例:张 表示 张三 张亮
  • 查询姓名第二个字符是A的员工

select * from emp where ename like ‘_A%’;
在这里插入图片描述

  • 查询姓名以S开头的员工

select * from emp where ename like ‘S%’;
在这里插入图片描述

10、逻辑运算符

  • NOT 多个条件都要满足,OR 多个条件只要满足其中1个就会被查询出来,NOT 对条件取反;
  • 查询工资大于1500或者部门号是20的员工信息

select * from emp where sal>1500 or deptno=20;
在这里插入图片描述

  • 运算优先级 NOT>AND>OR
  • 查询工资大于1500的PRESIDENT和工资大于1500的SALESMAN的员工

select * from emp where (job = ‘SALESMAN’ or job=‘PRESIDENT’) and sal>1500;
在这里插入图片描述

11、order ⼦句

  • 使⽤ORDER BY ⼦句将记录排序 ASC: 升序,缺省 DESC: 降序
  • 查询部门20的员工,按照工资升序排列

select * from emp where deptno=20 order by sal asc; --asc 省略

  • 查询员工信息,按照工资降序排

select * from emp order by sal desc;
在这里插入图片描述

12、转义字符 ( \ )

  • 查询名字最后1个字是%的同学

select * from student where sname like ‘%%’ escape ‘’;
在这里插入图片描述

13、字符函数

在这里插入图片描述

13、数字函数

在这里插入图片描述

三、常用函数

1、单行函数

  • 字符串函数:对字符串操作
  • 数字函数:对数字进行计算,返回一个数字
  • 日期函数:对日期和时间进行处理
  • 转换函数:可以将一种数据类型转换为另外一种数据类型

2、多行函数(聚合函数)

  • AVG ([DISTINCT|ALL]n) 求平均数
  • SUM ([DISTINCT|ALL]n) 求和
  • COUNT ({ *|[DISTINCT|ALL]expr}) 计数
  • MAX ([DISTINCT|ALL]expr) 求最⼤值
  • MIN ([DISTINCT|ALL]expr) 最⼩值

四、分组查询

1、 group by⼦句

  • select后⾯的列必须要出现在group by中,但是出现在group by后⾯列不⼀定要出现select中
  • 查询每个部门的平均工资

select deptno,avg(sal) from emp group by deptno;
在这里插入图片描述

  • 查询每个年龄段的人数

select sage,count(*) from student group by sage order by sage;
在这里插入图片描述

2、分组过滤 having

  • having 对分组进行过滤
  • where 对行进行过滤
  • 查询每个部门平均工资,只显示平均工资大于2000的

select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;
在这里插入图片描述

3、多表连接查询

  • 当两表关联,生成笛卡尔乘积(有很多无效的记录)
  • 使用连接条件将有效的记录过滤出来
  • 使用表前缀,可以提高查询的效率
  • 等值连接:连接条件使用=号
  • 不等连接:连接条件使用除了=之外其他比较运算符 > >=
  • 查询员工工号,姓名,部门号,工作地

select emp.empno,emp.ename,emp.deptno,dept.loc from emp,dept where emp.deptno = dept.deptno;
select e.empno,e.ename,e.deptno,d.loc from emp e,dept d where e.deptno = d.deptno;
在这里插入图片描述

4、内 外 左 右 连接

  • 内连接 (inner join)
  • 外连接 (outer join)
  • 左连接(left join)
  • 右连接 (right join)
  • 查询每门功课的选择人数,将没有人选的功课也显示出来

select c.cname,count(sc.sid) from score sc right join course c on sc.cid = c.cid group by c.cname;
在这里插入图片描述

5、子查询

  • ⼦查询的结果返回多⾏
  • 大于最大值 >ALL
  • <ALL 小于最小值
  • <ANY 小于最大值
  • 大于最小值 >ANY
  • 查询工资高于部门20所有人的员工

select * from emp where sal >(select max(sal) from emp where deptno=20);
select * from emp where sal >ALL(select sal from emp where deptno=20);

  • 从emp表中工资小于CLERK的最高工资的且职位不是CELRK的员工

select * from emp where sal < (select max(sal) from emp where job=‘CLERK’) and
job<>‘CLERK’;
select * from emp where sal < ANY(select sal from emp where job=‘CLERK’) and
job<>‘CLERK’;

五、SQL执行顺序

  • 1.from子句
  • 2.where子句
  • 3.group by子句
  • 4.having子句
  • 5.select子句
  • 6.order by子句

六、数据操纵语言 DML

1、insert into :将数据插入到数据表中

–第一种方式 表名后面跟列名
insert into dept(deptno,dname,loc) values(50,‘TEST50’,‘NANJING’);
–如果列名不写,插入空值
insert into dept(deptno,dname) values(60,‘TEST60’);
–第二种方式,表名后不写列名,表示要插入所有的值
insert into dept values(70,‘TEST70’,‘SH’)
–插入空值,需要写NULL
insert into dept values(80,‘TEST80’,null)

2、update :更新数据表中已存在的数据

  • 将SMITH的工资修改比KING多500

update emp set sal = (select sal+500 from emp where ename=‘KING’) where
ename=‘SMITH’;

3、delete :删除数据表中的数据

  • 删除员工表中员工号为1122和1123的数据

delete emp where empno in(1122,1123);

七、约束(constraint)

  • 约束是表级强制执⾏的规则
  • 保护表中数据的完整性和⼀致性
  • 约束类型

NOT NULL ⾮空约束 C
UNIQUE Key 唯⼀约束
PRIMARY KEY 主键约束 P
FOREIGN KEY 外键约束
CHECK 检查约束 ⽤户可以⾃⼰定义检查的内容

八、数据定义语言:DDL

  • Oracle数据类型
    VARCHAR2(size) 可变长字符串
    CHAR(size) 定长字符串
    NUMBER(p,s) 数字值
    DATE ⽇期值
    INTEGER 整数
    FLOAT ⼩数

1、create :创建表或其他对象的结构

  • 创建一个学生表(学号、姓名、性别、出生日期)

create table student
(
sid varchar2(20) primary key,–主键
sname varchar2(10) not null,–非空
ssex char(1) default ‘M’,–默认值,缺省值
birthday date
)

  • 备份emp表 改名为emp_bak

create table emp_bak as select * from emp;

2、alter :修改表或其他对象的结构

  • 可以修改数据类型,长度,默认值
  • 修改的时候不能影响原有的数据
  • 修改一列 phone 13位

alter table student modify (phone varchar2(13))

3、drop :删除表或其他对象的结构

  • 删除学生表中数据及表结构

drop table student;

4、truncate :删除表数据,保留表结构

  • 删除表中全部记录

truncate table student;

5、delete 和truncate的区别

  • delete可以选择删除部分记录,truncate只能全部记录
  • delete是DML语句,可以回滚,truncate是DDL语句,不能回滚
  • truncate删除速度比delete快
  • truncate会回收空间,delete不会
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值