數據庫(主鍵外鍵、子查詢)


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='二班' ))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM