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 = '/')     --------從文件插入記錄,各字段用“/”隔開

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章