一、union和union all
对两个查询结果集的行合并,union在合并时去掉重复的,union all合并不去重复的
select * from student
UNION all
select * from student
两个结果集union时,列数量一定要相同。
作用:
1.制作报表时,将一些结果集合并
select sname,amt from student
UNION all
select '合计',sum(amt) from student
2.进行列转行
-- 循环 score表中的 name
insert into score2(name,xueke,score)
(select name,'语文',yuwen from score where name = '小明')
union
(select name,'数学',shuxue from score where name = '小明')
union
(select name,'英语',yingyu from score where name = '小明')
二、truncate语句
清楚表中的数据,保留表结构,如果要删除表中的数据,用truncate效率高于delete,因为delete是行级操作,truncate属于表级操作。
truncate不能按条件删除,不能进行事务处理、回滚操作
truncate、delete和drop之间的区别
truncate写法
truncate table student2
用户的创建和权限的分配
create user ww IDENTIFIED by '000000'
grant all privileges on java2113.* to ww identified by '000000';
三、视图(view)
试图是一张虚拟的表,创建视图时定义一个查询语句,查询语句的结果就是视图的数据。也就是当检索了视图,就是执行了定义的查询语句,检索结果集。
视图的数据可以进行查询、修改、删除、增加的操作
视图的作用:
1.项目中多次使用到一些相同的复杂查询语句,复杂查询语句定义在视图中。
2.项目中对表的部分列进行权限的开放,将部分列的查询结果创建在视图中。
create or replace view v_student AS
select s.id,s.sname,c.id cid from student s inner join class c on s.classid = c.id
create or replace view v_student2 AS
select classid,avg(amt) avgamt from student group by classid
select * from v_student2
select * from v_student
update v_student set address = '中国黑龙江哈尔滨' where id = 1
四、存储过程
创建一个存储过程,存储过程中包含了一个SQL语句块,在执行这个存储过程时,就执行了那个SQL语句块,通常 可以使用存储过程封装一些业务流程。但不好维护。
五、触发器
可以为表创建一些触发器,例如创建update、insert、delete的触发器,当对表进行了update、insert、delete操作时,就会触发触发器,执行触发器中的SQL语句。