数据库基础知识

1.MySQL 数据库怎样把一个表的数据插入到另一个表   本文出自 “夜狼” 博客http://yangfei520.blog.51cto.com/1041581/381568

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:
   INSERT INTO 目标表 SELECT * FROM 来源表;
insert into insertTest select * from insertTest2;

如果只希望导入指定字段,可以用这种方法:
  INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;
 注意字段的顺序必须一致。
insert into insertTest2(id) select id from insertTest2;

如果您需要只导入目标表中不存在的记录,可以使用这种方法:
 INSERT INTO 目标表  
 (字段1, 字段2, ...)  
 SELECT 字段1, 字段2, ...  
 FROM 来源表  
 WHERE not exists (select * from 目标表  
 where 目标表.比较字段 = 来源表.比较字段); 
 1>.插入多条记录:
insert into insertTest2
(id, name)
select id, name
from insertTest
where not exists ( select * from insertTest2
where insertTest2.id=insertTest.id);
2>.插入一条记录:
insert into insertTest    
(id, name)    
SELECT 100, 'liudehua'    
FROM dual    
WHERE not exists ( select * from insertTest    
where insertTest.id = 100);                                                                                                                                               


 

2.MySQL创建并调用存储过程
带输入参数的存储过程
create procedure proc2(in a int,in b VARCHAR(255))
begin
select * from ss as s where s.user_id = a and s.username = b;
end

//第一种调用方式
call proc2(3,'c');

//第二种调用方式
set @a = 3;
set @b = 'c';
call proc2(@a,@b);


带输出参数的存储过程
create procedure proc3(out a INT)
begin
select count(*) from ss into a;
end

call proc3(@b);
select @b as 'bbb';

3.MySQL中case when的一些用法
//end后跟的为列名,如果没有else的话条件没有达到的值会设为NULL

select user_id,
case
when username ='a'  then 'aa'
when username ='c' then 'cc'
else username
end username
from ss

select user_id,
case username
when 'a'  then 'aa'
when 'c' then 'cc'
else username
end username
from ss


4.游标的概念
游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。

5.union和union all区别

在数据库中,unionunion all关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

如: 
 select * from test_union1 
   union 
 select * from test_union2 
     这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 
    而union all只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 
     从效率上说,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用union all

向表中快速插入数据

INSERT into ss(username,password,email)
select username,password,email from ss  union all
select username,password,email from ss  union all
select username,password,email from ss  union all
select username,password,email from ss




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值