SQL语法笔记

只是自己的理解,不一定权威正确。请读者慎重,请谅解。

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 = '/')     --------从文件插入记录,各字段用“/”隔开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值