plsql中数据库表的增删改查操作(常用的DDL,DML语句)

注意:
1) 在所有增删改操作中,都需要提交事务commit,它能保证数据的一致性和完整性,能保证一系列操作的原子性,“要么都成功,只要有一条失败,全部回滚”。提交之后的数据无法回滚
2)update跟delete要慎重,不要只选中一半,看清楚where条件,否则就是对全部数据都进行操作。

一、增删改

plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第1张图片

  1. 修改表名
    alter table 原表名 rename to 新表名
    注意:修改完表名之后右击tables刷新一下
alter table use rename to cominfo;

结果如下:
注意:如果需要查看字段类型,鼠标右键点击表名→"View"→"column"选项卡进行查看)
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第2张图片

  1. 添加一个字段
    alter table 表名 add(
    字段名1 字段类型1,
    字段名2 字段类型2,

    );
alter table cominfo add(
qq number(18)
);

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第3张图片

  1. 修改字段名
    alter table 表名 rename column 旧字段名 to 新字段名
alter table cominfo rename column qq to weixin;

结果如下:
在这里插入图片描述

  1. 修改字段类型
    alter table 表名 modify(
    字段名1 新类型1,
    字段名2 新类型2,

    );
alter table cominfo modify(
weixin varchar2(32)
);

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第4张图片

  1. 删除一个字段
    alter table 表名 drop(字段名);
alter table cominfo drop(weixin);

结果如下:
在这里插入图片描述

  1. 删除一张表
    drop table 表名
drop table buy;
  1. 新增一条数据
    insert into 表名 (字段1,字段2,…)values(值1,值2,…)

    insert into 表名 values(值1,值2,…)
    注意
    (1)插入语句执行完毕后,需要点击提交事务按钮"commit"
    (2)如果插入一条记录,给所有字段都插值,那么insert into 表名后面的第一对小括号可以省略
insert into cominfo values(1003, '张三', '男', '1998/1/3', '南京邮电大学',123456789,1);insert into cominfo
  (pno, pname, sex, birthday)
values
  (1004, '李四', '男', '1998/1/4');

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第5张图片

  1. 字符串转日期函数
    to_date(‘日期字符串’,‘日期格式’)
    注意:
    (1)在Oracle中,使用y表示年,m表示月,d表示日,通常用“-”连接
    (2)使用h表示时,mi表示秒,s表示秒,默认十二小时制,需要设置24小时则需在hh后面添加24
--先删除所有的出生日期,再把birthday的类型改成date
alter table cominfo modify(
birthday date
);

--再使用to_date函数
insert into cominfo values(1009,'小月','男',to_date('1998-01-09 18:20:10','yyyy-mm-dd hh24:mi:ss'),'南京邮电大学',1807654321,2);

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第6张图片

  1. 日期类型转字符串
    to_ char(字段名 ,日期的字符串格式)
    可以将日期型的字段按照指定的字符串格式转型为字符串
select pno,pname,sex,to_char(birthday,'yyyy') from cominfo;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第7张图片

  1. 给出指定生日,计算年龄
    to_char(sysdate,‘yyyy’)-to_char(birthday,‘yyyy’)
select pno,pname,sex,to_char(sysdate,'yyyy')-to_char(birthday,'yyyy') age from cominfo;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第8张图片

  1. 修改语句
    update 表名 set 字段名 = ‘新值’ where 条件
    注意:
    条件通常使用编号
--1)将小月的性别改为女
update cominfo set psex = '女' where pname = '小月';

--2)将所有男同学的地址都改成南京邮电大学仙林校区
update cominfo set address = '南京邮电大学仙林校区' where sex = '男';

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第9张图片

  1. 删除语句
    delete from 表名 where 条件
--1)删除编号为1009的同学
delete from cominfo where pno = 1009;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第10张图片

二、约束

约束通常都是加在create table语句中,用来对表中的数据进行限定

  1. 非空约束——not null(表示指定字段的值不能为空)
create table cominfo(
pno varchar2(32) not null,
pname varchar2(32),
sex varchar2(6),
birthday date,
address varchar2(200),
movephone number(18),
cno varchar2(32)
);
  1. 唯一约束——unique(表示指定字段的值不能重复)
    唯一约束也可以使用constraint关键字来进行编写
    格式:在所有字段定义的最后,使用constraint 约束名 unique(字段名)
    注意:如果()中含有多个字段,则表示他们的组合不能重复
create table cominfo(
pno varchar2(32) unique,
pname varchar2(32),
sex varchar2(6),
birthday date,
address varchar2(200),
movephone number(18),
cno varchar2(32)
constraint uk1 unique(pname)
constraint uk2 unique(address,movephone)
);
  1. 主键约束(表示既非空又唯一的约束)
    它在业务逻辑上可以用来识别一条记录
    格式1:在字段后添加primary key
    格式2:使用constraint 约束名 primary key(字段名)
create table cominfo(
pno varchar2(32) primary key,
pname varchar2(32),
sex varchar2(6),
birthday date,
address varchar2(200),
movephone number(18),
cno varchar2(32)
constraint uk1 unique(pname)
constraint uk2 unique(address,movephone)
);create table cominfo(
pno varchar2(32),
pname varchar2(32),
sex varchar2(6),
birthday date,
address varchar2(200),
movephone number(18),
cno varchar2(32)
constraint uk primary key(pno)
);
  1. 外键约束
    存在两张表,一张作为主表,一 张作为从表, 主表中的主键字段添加到从表中,在从表中当做外键
    例如:班级表是主表,学生表是从表,班级编号在学生表中做外键
    格式1:references 主表表名(主表主键名)
    格式2:在字段最后使用constraint 外键名 foreign key(外键字段) references 主表名(主表主键字段)

外键约束的两层含义 :
(1)当插入从表数据时数据的外键值必须要在主表中存在(否则违反完整约束)
如:学生表中有一个班级编号不存在于班级表
(2)当删除主表数据时,该数据的主键值必须没有被从表中数据关联

create table cominfo(
pno varchar2(32),
pname varchar2(32),
sex varchar2(6),
birthday date,
address varchar2(200),
movephone number(18),
cno varchar2(32) references classinfo(cpk)
);create table cominfo(
pno varchar2(32),
pname varchar2(32),
sex varchar2(6),
birthday date,
address varchar2(200),
movephone number(18),
cno varchar2(32),
constraint uk foreign key(cno) references classinfo(cpk)
);

三、查询

  1. 查询语句
    select 字段名1,字段名2,… from 表名
--1)查看表的所有字段
select * from cominfo

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第11张图片

--2)查看表的编号字段,姓名字段和性别字段
select pno,pname,sex from cominfo
或
select c.pno,c.pname,c.sex from cominfo c

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第12张图片

  1. 别名
--1)我们可以在sq|语句的表名后面加空格别名,在当前sq|语句中,别名就代表这张表
select c.pno,c.pname,c.sex from cominfo c;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第13张图片

--2)我们还可以在字段的后面加空格别名,那么结果集的列名就是对应的别名
select c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第14张图片

  1. distinct关键字
    在select语句中,字段名的前面,使用distinct可以实现数据结果的排重,去掉重复
--1)
select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第15张图片

--2)
select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c order by c.pno asc;select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c order by c.pno;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第16张图片

--3)
select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c order by c.sex,c.pno;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第17张图片

在select语句的最后,可以使用order by字段名实现结果集根据指定字段排序
在字段名后面使用asc表示升序,desc表示降序,asc可以省略
注意:
(1)中文字在order by中的排序是根据Unicode编码的先后顺序决定的
(2)order by后面的字段可以是多个字段,它会按照先后的优先级进行一层层的排序
(3)order by 语句放在最后

  1. where语句
    1)where语句可以跟在from语句的后面表示条件过滤
    2)where语句中支持 = > >= < <= 和 不等于,不等于两种写法:!= 和 <>
    3)如果where语句中含有多个条件是并且关系,那么在他们中间使用and进行连接
    4)两个条件过滤语句,如果是或者关系,那么可以采用or关键字关联
    5)我们在where语句中使用is null和is not null 来对空值进行判断
    6)关于where条件中运算符优先级的问题,我们不需要关系,我们只需要使用()将先算的表达式括起来即可
    7)当我们在指定的一些取值中进行匹配的时候,使用in进行筛选,格式:字段名 in(值1,值2…)
--1)查询所有男同学信息,按照编号升序排序
select * from cominfo c where c.sex = '男' order by c.pno; 

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第18张图片

--2)查询所有地址不是1班的同学信息,按照编号升序排序
select * from cominfo c where c.cno <>1 order by c.pno; 

结果如下:
在这里插入图片描述

--3)查询所有编号为1005-1007的同学信息
select * from cominfo c where c.pno >= 1005 and c.pno <= 1007;select * from cominfo c where c.pno between 1005 and 1007; 

--between是闭区间

结果如下:
在这里插入图片描述

--4)查询编号大于1007或者小于1005的同学
select * from cominfo c where c.pno > 1007 or c.pno < 1005;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第19张图片

--5)查询班级编号为空的同学信息
select * from cominfo c where c.cno is null;

结果如下:
在这里插入图片描述

--6)查询班级编号不为空的同学信息
select * from cominfo c where c.cno is not null;

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第20张图片

--6)查询班级编号为1003,1004,1008的同学
select * from cominfo c where c.pno in(1003,1004,1008);

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第21张图片

  1. 模糊查询
    like表示模糊查询
    1)全匹配:字段名 like ‘%关键字%’
    2)左匹配:字段名 like ‘关键字%’
    3)右匹配:字段名 like ‘%关键字’
--全匹配
select * from cominfo c where c.address like'%南京%';

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第22张图片

--左匹配
select * from cominfo c where c.address like'南京%';

结果如下:
plsql中数据库表的增删改查操作(常用的DDL,DML语句)_第23张图片

  1. 常用函数:
    sum(字段名)——表示字段值求和
    count(*)——表示统计结果集的记录条数
    max(字段名)——表示最大值
    min(字段名)——表示最小值
    avg(字段名)——求平均值
1)select sum(c.pno) from cominfo c;

结果如下:
在这里插入图片描述

2)select count(*) from cominfo c;

结果如下:
在这里插入图片描述

3)select max(c.pno) from cominfo c;

结果如下:
在这里插入图片描述

4)select min(c.pno) from cominfo c;

结果如下:
在这里插入图片描述

5)select avg(c.pno) from cominfo c;

结果如下:
在这里插入图片描述

  1. 分组
    1)我们可以在where语句的后面使用group by语句进行分组,在select语句后面通过函数统计每个组的计算结果,select语句中不能出现非group by字段的直接展示
select avg(c.pno),c.sex from cominfo c group by c.sex;

结果如下:
在这里插入图片描述

你可能感兴趣的:(Oracle)