T-SQL编程学习笔记

create database test
go
use test
create table table1
(
   use_id int  not null,
   use_name varchar(200) not null,
   use_message varchar(300) not null,
   use_QQ  int not null
)
select * from table1
 
-- 增加行 .   删除用 drop
alter table table1
add use_talk varchar(200)
insert into table1 values('1','yofee','nomessage','343201118','no talk')
-- 修改属性
alter table table1
alter column use_QQ int not null
-- 添加主键约束 , 如果表已经有主键了 , 这个就没啥用勒 ...
alter table table1 add constraint PK_primarykey primary key (use_ID)
-- 修改主键约束 . 先删除主键 , 再新建一个 .
alter table table1 drop constraint PK_primarykey
alter table table1 add constraint PK_primarykey2 primary key (use_name)
-- 添加外键约束 . 先建立一个 order1 , 此表不必要有主键 . 但对应另一个表的列就一定要是主键 !
create table order1
(
   for_use_ID int ,
   book_name varchar(200) not null
)
alter table order1 add constraint FK_order1_table1 foreign key (book_name) references table1 (use_name)
-- 显示 DBMS 给予 primary key 的名称
exec sp_help table1
-- 创建视图 , 视图是个虚拟的表 , 不包括数据 ( 个人感觉几乎可以把这个和表看成一回事 ).
create view vw_table1_order1
as (select table1.use_ID,order1.book_name from table1,order1)
select * from vw_table1_order1
go
-- 数据操纵语言 :DML insert into,update,delete,truncate( 删除一个表中的所有行 )
insert into table1 values('2','tiantian','no message','476910304','no talk')
update table1 set use_ID = 3 where use_qq='476910304'
go
select * from table1
delete from table1 where use_id = 3
truncate table table1-- 当然 , 这里有外键约束 , 所以没法删除哈
insert into table1 values ('2','nic','haha','512014116',' Content )
-- 计算平均值
select avg(use_QQ) as 'QQ 平均值 ' from table1 -- 最小 , 最大 , 求和类似于此
 
-- 触发器 .. 不接受任何大于 1000 的用户编号 .
exec sp_help table1
go
create trigger table1_over_1000-- 触发器名称
on table1 for insert,update --table1 是准备控制的表名 ,insert,update 是控制的操作
as if((select max(use_id) from table1) > 1000)
begin
print 'table1.use_id >1000.'
rollback
end
select * from table1
insert into table1 values('3','kaka','baxide','213544','Content two ' )
insert into table1 values('1003','ronaldo','yeshibaxide','610039','I want to go to walk!')
-- 存储过程 , 重点
-- 之一简单创建与调用
create procedure firstproc as select * from table1
exec firstproc
go
-- 之二自主式创建存储过程并调用 .
create proc adddata_table1
@use_id int,
@use_name varchar(50),
@use_message varchar(200),
@use_QQ int,
@use_talk varchar(100)
as insert into table1 (use_id,use_name,use_message,use_QQ,use_talk) values(@use_id,@use_name,@use_message,@use_QQ,@use_talk)
exec adddata_table1 @use_id = 4,@use_name = 'daye',@use_message=' Nothing left !' , @use_QQ=343201118,@use_talk=' But just want write something yet .'
select * from table1
-- 疑问 : 上面这个存储过程里面写的列属性可以和表内对应的列属性不一样吗 ?
-- 设计实验如下 :
create proc add_table1
@use_id varchar,-- 这个不一样了哈 !
@use_name varchar(50),
@use_message varchar(200),
@use_QQ int,
@use_talk varchar(100)
as insert into table1 (use_id,use_name,use_message,use_QQ,use_talk) values(@use_id,@use_name,@use_message,@use_QQ,@use_talk)
exec add_table1 @use_id = '20',@use_name = 'carlos',@use_message=' 爱生活 , 爱拉登 , 自然美 !' , @use_QQ=512014556,@use_talk='Notalk .'
select * from table1
-- 插入是成功了 , 就是和设想中的有点不一样 , 为什么 use_id 我填的是 , 得到的 use_id 却是呢 ? 可能是乱改了就会出错吧 , 以后还是尽量一致的好 !
 
-- 判断表中是否有重复行 . 如果有的话就显示 :contains duplicates
select distinct 'contains duplicates'
where exists(select use_id,count(*) from table1 group by use_id having count(*) > 1)
-- 计算出所有用户的数量
select count(*)as ' 总计人数 ' from table1
-- 计算出号码不一样的用户数
select count(distinct use_id) from table1
-- 领悟 having. 过滤掉 use_id > 2 的用户 . 而且用 having 必须先指定组 .group by. 另附一个小招 . 把两个列连起来显示的办法   :D
select rtrim(use_message)+' '+use_talk as 'usersword' from table1
group by rtrim(use_message)+' '+use_talk
having (select count(distinct use_id) from table1)>2
-- 一个晚上把一本六百多页的书搞定了 ? ! 为自己先汗一个 �C -......

你可能感兴趣的:(sql,数据库,学习笔记,t-sql,休闲)