只是自己的理解,不一定权威正确。请读者慎重,请谅解。
1.创建数据库
use Student
create table dbo.Class(
ClassNum int not null identity(1,1),//identity(1,1)设为自增长
ClassName nvarchar(30) not null,
ClassAd nchar(20)
constraint PK_Class primary key clustered(ClassNum Asc)
)
2.插入数据项
insert into Class(ClassNum,ClassName,ClassAd)
values ('56564','ijfii','dfs')
insert into Class(ClassNum,ClassName,ClassAd)
values ('56284','isffi','dsgs')
3.联合主键
use Student
ALTER TABLE TeacherCourse WITH NOCHECK ADD
CONSTRAINT PK_TeacherCourse PRIMARY KEY NONCLUSTERED
(
TCAd,
TCName
)
4.外键 注:要加外键的表需开始就有这个属性,且字段完全一样,类型,长度
use Student
alter table 要加外键的表 add foreign key(属性名) references 表2(属性名)
alter table CourseTeacher add foreign key(TeacherNo) references Teacher(TeacherNo)
5.SQL语句增加列、修改列、删除列、删除表
增加列:
alter table tableName add columnName varchar(30)
修改列
alter table tableName alter column 新的columnName varchar(4000)
修改列的名称:
EXEC sp_rename 'tableName.column1' , 'column2' (把表名为tableName的column1列名修改为column2)
删除列:
alter table tableName drop column columnName
删除表 :
delete from 表 //删除表的值
drop table 表名 //删除表
6.group by
SELECT sex AS '性别', count(*) AS '人数'
FROM student
group by sex
注:group by即分组 这儿按照sex分组即sex一样的一个组,做一行,count(*) AS '人数':每个分组多少人,即男女分别多少人,即属男一行的多少人,属女一行的多少人。
例:查询选课少于3门的学生的学号及其选课的门数。
SELECT studentno,COUNT(*) AS '选课数'
FROM score
GROUP BY studentno
HAVING COUNT(*)< 3
ORDER BY studentno
-GROUP BY子句按studentno的值分组,所有具有相同studentno的分为一组,即一行,对每一组使用函数COUNT进行计算,统计出各位学生选课的门数。再通过having筛选数据。
6.存储过程
output参数:
--比如:
alter PROCEDURE get_id
@Name1 varchar(20),
@ID1 int output //定义为output型
AS
BEGIN
select @ID1=[Id] from Sof_User where Name= @Name1
END
GO
--调用时:
declare
@Id1 int //定义不用为output型,只是后面要说明为output型
exec get_id 'li',@Id1 OUTPUT //说明为output型
select @Id1
--输出为"li"的Id 3;
----Id=cs.getInt(2); getInt(2)得到cs中的第二个值 int型 ,要用此方法需第二个参数是output型
(output 参数可以这么认为:你把你个u盘给我,我把电影拷贝上去,你再拿走去用)
CREATE PROCEDURE student1
@studentno1 nchar(10) -------形参
as --------------不能掉
SELECT sname
FROM student
WHERE studentno=@studentno1
执行:exec student1 '0822111208' --------------'0822111208' 实参
7.触发器
a. CREATE(alter) TRIGGER update_s_tr
ON student ------------student 表名
AFTER UPDATE
AS
IF UPDATE(studentno)
BEGIN
RAISERROR(‘不能修改学号’,16,2)
ROLLBACK
END
此时,若有更新语句如下:
UPDATE student SET studentno='0837221508'
WHERE studentno='0937221508'
则提示“不能修改学号”, 更新语句得不到执行。(AFTER触发器是操作后触发,然后回滚,针对delete无效)
b.CREATE TRIGGER delete_c_tr ON course
INSTEAD OF DELETE AS
IF EXISTS ( SELECT * FROM course
WHERE type='必修' )
BEGIN
RAISERROR('不能删除课程',16,2)
ROLLBACK
END
此时,DELETE FORM course
WHERE type='必修'
即:出现“DELETE ” ,则提示“不能删除必修课程”,删除语句得不到执行。(instead of 触发器是操作前触发)
8.BULK INSERT dbo.class
FROM 'E:\Java\q.txt'
WITH (FIELDTERMINATOR = '/') --------从文件插入记录,各字段用“/”隔开