删除,添加或重新定义列
删除列:alter table tablename drop columnname
增加列:alter table tablename add columnname type
在某列后增加一列:alter table tablename add columnname type after columnname2
更改列定义或名称
alter table tablename modify columnname type
重命名表
alter table tablename rename tablename2(新表名)
语法
DELETE FROM tablename [WHERE Clause]
删除数据库:drop database databasename
删除一个不确定存在的数据库:drop database if exists databasename;
删除表:drop table tablename
删除一个不确定存在的数据库:drop table if exists tablename;
简而言之,DDL语句是对表结构的修改,DML语句是对表数据的修改
(注:tablename是对应的数据库表名 databasename是对应的数据库名 columnname 是列名 type 类型)
1)delete,drop ,truncate都代表删除,有什么区别?
2)alter跟其他的有什么区别
3)drop、delete、alter该如何使用
相同点:
delete,drop ,truncate都代表删除
不同点:
a、truncate和 delete只删除数据不删除表的结构(定义)
b、drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
c、delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
d、 truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发 trigger.
e、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动。显然drop语句将表所占用的空间全部释放 。
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). drop storage;
f、删除速度,一般来说: drop> truncate > delete
alter是针对表字段、表名操作,新增、修改。
delete是针对表数据,进行删除,drop是删掉表
a、.想删除表,用drop
b、想保留表而将所有数据删除. 如果和事务无关,用truncate即可。
c、如果和事务有关,或者想触发trigger,还是用delete.
针对要讨论的这三种语法,只有delete才可以进行恢复,alter可以直接修改成需要的名称、类型、或者表名,不存在所说的数据恢复。
1.插入:向指定的列插入值,不插入的字段,默认是空值null
语法:insert into 表名(字段, 字段, ...) values(值, 值, ...);
注意:值的类型和顺序要和字段保持一致,如果字段为非空,必须插入值
--向学生信息表中插入记录005 李清
use student; --选择数据库
desc studentinfo --查看表的结构
select * from studentinfo;
insert into studentinfo(学号, 姓名) values('005', '李清');
2.删除:删除表中的记录(行)
语法:delete from 表名 where 条件
注意:如果不写where子句,会删除所有行
--删除name为Tony的记录
delete from test1 where name='Tony';
--删除test1表中的所有记录
delete from test1;
3. 删除表
--语法:drop table 表名
select * from test1;
drop table test1;
4. 删除数据库
--语法:drop database 数据库名
drop database testing;
5. 修改表中的数据 update语句
语法:update 表名 set 字段=新的值, 字段=新的值, ... where 记录的匹配条件
说明:如果不写where子句默认是修改所有的行
--查询id为3的员工信息
select * from worker where id=3;
--练习:给赵七加薪
update worker set salary=salary+300 where name='赵七';
select * from worker;
--可以同时修改多个字段,给id为的员工加薪元,同时修改电话号码88889999
update worker set salary=salary+300, phone='88889999' where id=3;
6. --查询出不住在'北京海淀'顾客的姓名和住址
select cname 姓名, address 住址 from Customer where address <> '北京海淀';
7. --查询出库存量在10和35之间的图书信息
select * from Book where numstore between 10 and 35;
8--查询出bid为'A0001'或'A0002'的图书信息
select * from Book where bid='A0001' or bid='A0002';
--等价于
select * from Book where bid in ('A0001', 'A0002');
9.模糊查询,语法:字段名like '匹配字符串'
匹配字符串:
% 0个或多个字符(任意个字符)
_ 任意一个字符
[] 在范围内的一个字符
[^] 不在范围内的一个字符
--查询出图书名称以'邓小平'开头的图书信息
select * from Book where bname like '邓小平%';
--查询出书名包含有'小平'的图书信息
select * from Book where bname like '%小平%';
10、使用select可以复制表
语法:select * into 新表名 from 源表名;
--使用Book复制一张新表book1
select * into book1 from Book;
--复制时可以指定条件,需要指定行、列
select bid, bname, pub, author1 into book2 from Book where pub='人民出版社';
--创建新表book3 只复制Book表结构,不拷贝数据
select * from Book where 1<>1; --永假式
select * into book3 from Book where 1<>1;
11. 数据完整性:数据的准确性、一致性
分为:实体完整性、域完整性、引用完整性
实现方法:约束constraint,约束也是数据库中的一种对象
约束的分类:
1. 主键约束 PK primary key
2. 外键约束 FK foreign key
3. 唯一约束 UK unique
4. 非空约束 NN not null
5. 检查约束 CK check
6. 默认值约束 default
注:在某些项目中,有时即便两张表有关系,但不加外键约束 目的是:提高系统性能
数据库维护约束会增加系统开销,可以通过其它层面的技术来弥补。
12. --使用DDL alter 语句 改变表结构
alter table emp2
--给emp2表的id字段追加PK约束
add constraint emp2_id_pk primary key(id);
13--如何删除约束(所有约束方式一样)
drop constraint emp2_id_pk;
14--对myemp表的name字段建立聚集索引
--索引的名称:myemp_name_index1
--语法: create clustered index 索引名称 on 表名(字段名)
create clustered index myemp_name_index1 on myemp(name);
15. --建立非聚集索引没有clustered
--针对myemp表中name字段建立非聚集索引
--语法: create index 索引名称 on 表名(字段名)
create index myemp_name_index1 on myemp(name);
16. --删除索引
--语法:drop index 表名.索引名
drop index myemp.PK__myemp__3213E83F35BCFE0A;
--无法删除PK默认的索引
注意:建立索引增加系统开销
1. 占用表空间。
2. 增加、删除、修改数据效率降低。(因为重新调整索引的结构,具有时间开销)
总结:index适用于大海捞针,很少修改数据的情况,最终提高查询效率。
17. -- 去重(排重)、排序
select distinct pub from Book;
18.--查询myemp表的所有信息
--要求先按照姓名从小到大排序,如果姓名相同,再按照薪水从大到小
select * from myemp order by name asc, salary desc;
--查询员工信息,根据name降序排序
select * from myemp order by name desc;
--查询所有员工信息,根据name升序排序(从小到大)
select * from myemp order by name asc;
19. select语法:
select 字段名, *, 表达式, 函数调用, ...
from 表, 表, ...
where 分组前的过滤条件 行
group by 分组字段
having 分组后的过滤条件 行
order by 字段名排序规则, ...
--查询出每个部门的总薪水和平均薪水,以及出每个部门的员工人数
select dept_id, SUM(salary), AVG(salary), COUNT(id) from emp group by dept_id;
--统计出每个部门薪水大于6000.0的员工的人数
select dept_id, COUNT(id) as 部门人数from emp where salary > 6000.0 group by dept_id;
20. 函数三要素:函数名、参数表、返回值类型
1、单行函数 每条记录只会返回一个结果
lower('ABC') -> 'abc' 大写变小写
upper('abc') -> 'ABC' 小写变大写
nvl( , )
--查询出42部门的员工名字(原样,全小写,全大写)
select first_name,lower(first_name),upper(first_name) from s_emp where dept_id=42;
2、多行函数 多条记录返回一个结果,也称为:组函数、聚集函数
sum() 求总和
avg() 求平均数
count() 统计记录的条数
max() 求最大值
min() 求最小值
1、单行函数:根据不同的数据类型进行分类
(1)字符处理函数 char varchar2 varchar
(2)数值处理函数 number
(3)日期处理函数 date
(1)字符处理函数 char varchar2 varchar
Oracle函数 Java方法
-------------- -----------------
length() 字符串长度 length()
lower() 大写变小写 toLowerCase()
upper() 小写变大写 toUpperCase()
substr() 求子串 substring()
(2)数值处理函数
round 四舍五入
trunc 截取
(3)日期处理函数
NLS 区域语言支持 National Language Support(nls_date_format)
用来定义用户的所在区域的日期格式
alter session set nls_date_format = 'DD-MON-RR';
--查出员工的名字以及入职日期 (s_emp表 first_name start_date)
select first_name, start_date from s_emp;
alter session set nls_date_format = 'DD-MON-RR';
21. 表连接:
1、内连接 会严格匹配数据 inner join
(1)等值连接
(2)非等值连接
(3)自连接
2、外连接 一个都不能少 outer join
(1)左外连接
(2)右外连接
(3)全外连接