Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92651729
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-25 22:01:37


 
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yofee.blog.51cto.com/122922/22032
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','其实我想走')
--计算平均值
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','我真的很想走哇!')
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='这个家伙很懒,什么都没有留下!',@use_QQ=343201118,@use_talk='不过总还是想写点啥的.'
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='没啥好说的哦.'
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
--一个晚上把一本六百多页的书搞定了?!为自己先汗一个-......

本文出自 “┿⊙清风月影┿” 博客,请务必保留此出处http://yofee.blog.51cto.com/122922/22032

阅读(348) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~