SQL表的管理及使用

  1 create database yourschool
  2 go
  3 
  4 use yourschool
  5 go
  6 
  7 
  8 --创建表
  9 
 10 create table teacher
 11 (
 12     tId int primary key identity(1,1), --identity设立自增长,从1开始每增加一条记录,主键值就增加1
 13     tName varchar(20),
 14     tSex varchar(6)
 15 )
 16 
 17 select * from teacher
 18 
 19 go
 20 --一个老师教多个学生,一个学生只有一个老师我们称这种关系叫做一对多的关系
 21 --一的这面我们称为主键表,多的那面我们称为外键表,主键表不依赖外键表,也就是主键表不知道外键表的存在 
 22 create table student
 23 (
 24     sId int primary key identity(1,1),
 25     sName varchar(20) not null,
 26     sSex varchar(10),
 27     tId int foreign key references teacher(tId)
 28         --这里是设置外键约束,references表明引用的主键表是什么表括号里是主键表中被引用的字段,在这里tid,外键可以为空,比如在这个示例中,表明一个学生还没选老师。
 29 )
 30 
 31 
 32 --简单的insert语句(向表中增加一条数据)
 33 
 34 insert teacher(tName,tsex) values('Micle','male')
 35 
 36 --省略清单的insert语句
 37 
 38 insert into teacher values('Bill','male')
 39 go
 40 
 41 
 42 select * from teacher
 43 
 44 
 45 
 46 insert into student values('祥子','',7)--因为有外键约束,所以不能成功,因为主键表teachr表中并没id为7的老师
 47 
 48 insert into student values('祥子','',1)
 49 insert into student values('祥子弟','',2) --成功,因为主键表中有tid为1的行(记录)
 50 
 51 --无条件删除,慎用
 52 
 53 select * from student
 54 
 55 delete from student
 56 
 57 --有条件删除
 58 
 59 delete from student where sName like '祥_'
 60 delete from student where sName = '祥子'
 61 
 62 delete from student where sId = 16
 63 
 64 --对主键表的删除操作
 65 
 66 select * from teacher
 67 select * from student
 68 
 69 insert into teacher values('Rebica','female')
 70 
 71 delete from teacher where tid = 1 --不能成功,因为编号为1的老师在外键表中有相应的学生
 72 
 73 delete from teacher where tid = 3 --可以成功,因为rebica在外键表,学生表中没有对应的记录
 74 
 75 --删除表
 76 
 77 drop table teacher
 78 go
 79 
 80 --查看表属性
 81 sp_help teacher
 82 go
 83 
 84 --查看表的行数和所用的存储空间大小
 85 sp_spaceused teacher
 86 go
 87 
 88 --查看表和数据库对象间的关系
 89 sp_depends student
 90 go
 91 
 92 select * from student
 93 
 94 --索引,SQLServer中的每一行是没有前后顺序的,所以当查询一行时要执行全表扫描,建立索引可以生成一个只有一列的小的索引表可以加快查找速度。在键值上建立的索引是簇集索引(Clustered),每个表只有一个主键,所以在一个表中簇集索引只能有一个簇集索引根据键值进行排序,非簇集索引(Nonclustered)不进行排序。建立索引可加快查询速度,但有些情况也不是这样如:查找一个小表,或在一个大表中查找大多数数据就不能加快速度。当在一个大表中查找有限数据时会明显加快速度。
 95 
 96 --适合建立索引的情况:经常被查询搜索的列,如经常在where子句中出现的列;在Order by子句中使用的列;是外键或主键的列;列值唯一的列。
 97  --不适合建立索引的情况:查询中很少使用到的列;包含太多重复的值如性别列;数据类型为bit,text,image等的列不能建立索引。
 98 --可以在多列上建立一个索引这叫复合索引,用复合索引代替多个单独的索引在数据操作期间所用的开销会更小
 99 
100 --创建索引
101 
102 create table empPay
103 (
104     employeeId int not null,
105     basePay money not null,
106     commission decimal(2,2) not null
107 )
108 go
109 
110 select * from empPay
111 delete from empPay
112 insert into empPay values(1,20,0.4)
113 
114 create unique clustered index employeeIdIndex
115 on empPay(employeeId)
116 go
117 --删除索引
118 drop index empPay.employeeIdIndex
119 go
120 
121 
122 --编辑表格数据
123 
124 --简单的insert语句(向表中插入数据)
125 
126 insert teacher(tName,tsex) values('Jhon','male')
127 
128 --省略清单的insert语句
129 
130 insert into teacher values('Bill','male')
131 go
132 
133 insert into student values('祥子','',19)--因为有外键约束,所以不能成功,因为主键表teachr表中并没id为19的老师
134 
135 
136 --使用update修改数据
137 select * from teacher
138 --把id为1的老师修改
139 
140 update teacher set tName = '李磊' where tId = 2
141 go
142 
143 --update sudent set stuAvgrade = stuAvgrad + 20
144 
145 --把名字叫bill的所有老师的名字修改
146 update teacher set tName = '张强' where tName = 'Bill'
147 
148 
149 select * from teacher
150 
151 --批量更新
152 --把所有人的名字清为空串
153 update teacher set tName = ''
154 go
155 
156 ---暂时不用
157 update teacher set tName = 'Jhon' 
158 from (select top 2 * from teacher order by tName) as t1
159 go
160 
161 select * from teacher
162 
163 
164 --删除表格数据
165 
166 delete from teacher --删除所有表格数据
167 go
168 
169 delete from teacher where tId = 1 -- 按条件删除表格数据
170 
171 
172 --利用子查询进行可控的批量更新
173 update teacher set tName = 'Lenon' 
174 from(select top 2 * from teacher order by tName) as t1
175 where teacher.tName = t1.tName
176 go
177 
178 select * from teacher

 

posted @ 2018-11-08 15:51  冬夜的火  阅读(274)  评论(0编辑  收藏  举报