只是自己的理解,不一定權威正確。請讀者慎重,請諒解。
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 = '/') --------從文件插入記錄,各字段用“/”隔開