1.主鍵
數據庫主鍵是指表中一個列或列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。當創建或更改表時可通過定義 PRIMARY KEY約束來創建主鍵。一個表只能有一個 PRIMARY KEY 約束,而且 PRIMARY KEY 約束中的列不能接受空值。由於 PRIMARY KEY 約束確保唯一數據,所以經常用來定義標識列。
主鍵的作用
主鍵的主要作用如下:
(1)保證實體的完整性;
(2)加快數據庫的操作速度;
(3) 在表中添加新記錄時,數據庫會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復;
(4) 數據庫自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
主鍵具有的特點:唯一性、非空性。
設置主鍵語句示例:
code int primary key, 主鍵不能為空,不能重復,確保唯一性
設置自增長主鍵語句示例:
code int primary key identity(1,1) 從1開始,每次增長1,添加values時不用添加此列
設置外鍵:
在要設置外鍵的表上右鍵,選擇設計,在需要設置外鍵的列名前右鍵,如下圖:
選擇關系單擊,出現對話框,單擊添加,單擊表和列規范后面的省略號,如下圖:
在出現的界面做出如下操作:
點擊確定,再點擊確定,操作成功。
2.子查詢,又叫做嵌套查詢。
將一個查詢語句做為一個結果集供其他SQL語句使用,就像使用普通的表一樣,被當作結果集的查詢語句被稱為子查詢。
子查詢有兩種類型:
一種是只返回一個單值的子查詢,這時它可以用在一個單值可以使用的地方,這時子查詢可以看作是一個擁有返回值的函數;
另外一種是返回一列值的子查詢,這時子查詢可以看作是一個在內存中臨時存在的數據表。
先建如下圖的表並添加內容
開始如下的子查詢:
--語文成績前五名的所有信息及班主任 select top 5 code,name,sex,yuwen,shuxue,yingyu,(select boss from banji where banji.bcode=grade.bc)as'班主任',(select banji from banji where banji.bcode=grade.bc)as '班級'from grade --查看英語成績最大的人所在的班級 select banji from banji where bcode=(select bc from grade where yingyu=(select MAX(yingyu) from grade)) --按照數學成績排序(由高到低)后6/7/8名人員的所有信息 select top 3 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc)from grade where code not in (select top 5 code from grade order by shuxue desc) order by shuxue desc --分頁查詢,要求一頁給顯示5條數據 --第一頁 select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班級'from grade --第二頁 select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班級'from grade where code not in(select top 5 code from grade) --第三頁 select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班級'from grade where code not in(select top 10 code from grade ) --第四頁 select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班級'from grade where code not in(select top 15 code from grade ) --第五頁 select top 5 code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班級'from grade where code not in(select top 20 code from grade ) --總共有幾頁???? select CEILING( COUNT(*)/5.0) from grade --查詢二班里的語文成績大於85的人的所有信息 select code,name,sex,yuwen,shuxue,yingyu,(select banji from banji where banji.bcode=grade.bc) as '班級'from grade where code in(select code from grade where yuwen>85 and bc=(select bcode from banji where banji='二班' ))