当前位置: 代码迷 >> SQL >> sql 温习
  详细解决方案

sql 温习

热度:304   发布时间:2016-05-05 13:25:34.0
sql 复习
最近有些时间 所以就复习了下数据库 sqlserver 呵呵 希望对大家有所帮助

建表
CREATE TABLE [dbo].[USERS] (
[id] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[username] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[password] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[USERS_BACK] (
[id] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[username] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[password] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

存储过程
CREATE proc insert_user
@id varchar(50),@username varchar(50),@password varchar(50) output
with recompile
as
insert users(id,username,password) Values(@id,@username,@password)
insert users(id,username,password) Values(@id+1,@username,@password)
insert users(id,username,password) Values(@id+2,@username,@password)
GO

触发器
例子1
Create Trigger t_d_user
On USERS--在Student表中创建触发器 for Update--为什么事件触发As--事件触发后所要做的事情
for Delete
As
insert into USERS_BACK(id,username,password)
select d.id,d.username,d.password from deleted d
例子2
Create Trigger t_i_user
On USERS--在Student表中创建触发器 for Update--为什么事件触发As--事件触发后所要做的事情
for Insert
As
insert into USERS_BACK(id,username,password)
select d.id,d.username,d.password from inserted d

drop Trigger t_d_user
select * from users
select * from users_back
Delete from users where id='2'


insert into USERS_BACK(id,username,password)
select id,username,password from users  where id =2


Delete from USERS_BACK where id='1' or id='2' or id='3'

--交集 结果相同 内连接
select ub.* from users u,users_back ub where u.id=ub.id
select * from users u inner join users_back ub on u.id=ub.id
select * from users u where u.id in(select ub.id from users_back ub)

--左外连接 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
select * from users u left outer join users_back ub on u.id=ub.id
select * from users_back ub left outer join users u on u.id=ub.id

--右外连接 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
select * from users u right outer join users_back ub on u.id=ub.id
select * from users_back ub right outer join users u on u.id=ub.id

--全外连接
select * from users u full outer join users_back ub on u.id=ub.id
select * from users_back ub full outer join users u on u.id=ub.id


--交叉连接(笛卡尔乘积)
select * from users u cross join users_back ub where u.id=ub.id

--not in
select * from users u where u.id not in (select ub.id from users_back ub)
--用左外连接代替not in
select u.* from users u left outer join users_back ub on u.id=ub.id where ub.id is null

--exists and in
select * from users u where EXISTS (select * from users_back ub where u.id=ub.id)
select * from users u where u.id in (select ub.id from users_back ub)
select u.* from users u,users_back ub where u.id=ub.id


select * from users u where not EXISTS (select * from users_back ub where u.id=ub.id)
select * from users u where u.id not in (select ub.id from users_back ub)
select u.* from users u left outer join users_back ub on u.id=ub.id where ub.id is null

select * from users u
union
select * from users_back ub


select * from users u
intersect
select * from users_back ub anb



select * from users u full outer join users_back ub on u.id=ub.id

循环插入
declare @i int [email protected]
set @i = 1 [email protected]
while @i < 100 [email protected],这里改成100万即是插入100万条记录
begin
         insert into users (id,username,password) values(@i,'name'+convert(varchar,@i),@i/3)
         set @i = @i + 1
end
  相关解决方案