一、truncate与delete与drop的区别:
参考:https://blog.csdn.net/ws0513/article/details/49980547
1、SQL中的drop、delete、truncate都表示删除,但是三者有一些差别:
- delete和truncate只删除表的数据不删除表的结构
- 速度,一般来说: drop> truncate >delete
- delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
- 如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
truncate table:删除内容,不删除定义,释放空间;
delete table:删除内容,不删除定义,不释放空间;
drop table:删除内容和定义,释放空间。
1、truncate table 表名:只能删除表中全部数据。
delete from 表名 where...:能删除表中全部数据,也能删除部分数据。
2、delete from:记录是一条条删的,锁删除的每行记录都会进日志;而truncate一次性删除整个页,因此日志只记录页释放。
3、truncate删除后,不能回滚。delete可以回滚。
4、truncate比delete执行速度快
5、delete执行后,删除的数据占用的存储空间还在,还可以恢复数据;
truncate删除的数据占用的存储空间不在,不可以恢复数据。
2、drop、delete与truncate分别在什么场景之下使用?
- 不再需要一张表的时候,用drop
- 想删除部分数据行时候,用delete,并且带上where子句
- 保留表而删除所有数据的时候用truncate
二、SQL的授权语句和收回权限的语句
grant 权限 on 数据库对象 to 用户
grant insert on scott.Employees to user1,user2;
grant delete on scott.Employees to user1,user2;
grant select on scott.Employees to user1,user2;
grant update on scott.Employees to user1,user2;
revoke 权限 on 数据库对象 from 用户
三、新加一行记录,添加一个列字段,修改列?
插入:
insert into 表名(字段1,字段2,...)values("...","...",...)
增加列:
alter table 表名 add (column) 列名 列的数据类型
删除列
alter table 表名 drop (column) 列名
四、count(*)、count(列名)、count(数字)的区别:
count(*):与count(1)的结果一样,统计总行数,包括对null的统计
count(列名):是不包括对null的统计
五、EXISTS关键字的使用方法:
表示存在。内层查询语句不返回查询的记录,而是返回一个真价值。
示例:
select * from employees
where exists
(select d_name from department where d_id=1003);
若存在d_id=1003在,则内层查询语句返回一个true,外层查询语句开始查询;若返回false,外层语句不查询。
六、判断字段值是否为空?
- 字段是空:where 字段名 is null
- 不为空:where 字段名 is not null 或者 where Not 字段名 is null
七、问题:有一表Student,有三个字段:name、course、score,每一个学生有三门课程(如数学、语文、英语),写SQL语句查找出三门课程成绩都大于80的学生。
方法一:
select DISTINCT A.name
from Student A
where A.name not in
(select Distinct S.name from Student S where S.score<80 );
方法二:
select S.name from Student S
group by S.name Having MIN(S.score)>=80;