注意:
1) 在所有增删改操作中,都需要提交事务commit,它能保证数据的一致性和完整性,能保证一系列操作的原子性,“要么都成功,只要有一条失败,全部回滚”。提交之后的数据无法回滚。
2)update跟delete要慎重,不要只选中一半,看清楚where条件,否则就是对全部数据都进行操作。
alter table use rename to cominfo;
结果如下:
(注意:如果需要查看字段类型,鼠标右键点击表名→"View"→"column"选项卡进行查看)
alter table cominfo add(
qq number(18)
);
alter table cominfo rename column qq to weixin;
alter table cominfo modify(
weixin varchar2(32)
);
alter table cominfo drop(weixin);
drop table buy;
insert into cominfo values(1003, '张三', '男', '1998/1/3', '南京邮电大学',123456789,1);
或
insert into cominfo
(pno, pname, sex, birthday)
values
(1004, '李四', '男', '1998/1/4');
--先删除所有的出生日期,再把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);
select pno,pname,sex,to_char(birthday,'yyyy') from cominfo;
select pno,pname,sex,to_char(sysdate,'yyyy')-to_char(birthday,'yyyy') age from cominfo;
--1)将小月的性别改为女
update cominfo set psex = '女' where pname = '小月';
--2)将所有男同学的地址都改成南京邮电大学仙林校区
update cominfo set address = '南京邮电大学仙林校区' where sex = '男';
--1)删除编号为1009的同学
delete from cominfo where pno = 1009;
约束通常都是加在create table语句中,用来对表中的数据进行限定
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)
);
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)
);
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)当插入从表数据时数据的外键值必须要在主表中存在(否则违反完整约束)
如:学生表中有一个班级编号不存在于班级表
(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 * from cominfo
--2)查看表的编号字段,姓名字段和性别字段
select pno,pname,sex from cominfo
或
select c.pno,c.pname,c.sex from cominfo c
--1)我们可以在sq|语句的表名后面加空格别名,在当前sq|语句中,别名就代表这张表
select c.pno,c.pname,c.sex from cominfo c;
--2)我们还可以在字段的后面加空格别名,那么结果集的列名就是对应的别名
select c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c;
--1)
select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c;
--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;
--3)
select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c order by c.sex,c.pno;
在select语句的最后,可以使用order by字段名实现结果集根据指定字段排序
在字段名后面使用asc表示升序,desc表示降序,asc可以省略
注意:
(1)中文字在order by中的排序是根据Unicode编码的先后顺序决定的
(2)order by后面的字段可以是多个字段,它会按照先后的优先级进行一层层的排序
(3)order by 语句放在最后
--1)查询所有男同学信息,按照编号升序排序
select * from cominfo c where c.sex = '男' order by c.pno;
--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;
--5)查询班级编号为空的同学信息
select * from cominfo c where c.cno is null;
--6)查询班级编号不为空的同学信息
select * from cominfo c where c.cno is not null;
--6)查询班级编号为1003,1004,1008的同学
select * from cominfo c where c.pno in(1003,1004,1008);
--全匹配
select * from cominfo c where c.address like'%南京%';
--左匹配
select * from cominfo c where c.address like'南京%';
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;
select avg(c.pno),c.sex from cominfo c group by c.sex;