數(shù)據(jù)庫原理上機指導(dǎo)詳細注釋版-byHackerHang


目錄

  1. 環(huán)境準備
  2. 第5章:數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建與管理
  3. 第6章:SQL 查詢語言的使用
  4. 作業(yè)要求的特殊修改
  5. 總結(jié)與建議

一旗们、環(huán)境準備

在開始完成作業(yè)之前沪羔,需要確保你的計算機上已經(jīng)安裝并配置好必要的軟件针饥。以下是詳細的步驟:

1.1 安裝 SQL Server 2012 Express

步驟:

  1. 下載 SQL Server 2012 Express:

  2. 運行安裝程序:

    • 雙擊下載的安裝包鲜屏,開始安裝泄鹏。
    • 在安裝向?qū)е羞x擇“新建安裝或向現(xiàn)有安裝添加功能”饿这。
  3. 選擇安裝類型:

    • 選擇“基本安裝”以使用默認設(shè)置坯屿,或者“自定義安裝”以自定義安裝路徑和功能淹真。
    • 建議:選擇“基本安裝”即可滿足大部分需求抓韩。
  4. 完成安裝:

    • 按照向?qū)崾就瓿砂惭b過程纠永,安裝完成后,你將看到安裝成功的提示谒拴。

1.2 安裝 SQL Server Management Studio (SSMS)

步驟:

  1. 下載 SSMS:

    • 訪問微軟的下載頁面:SSMS 下載頁面
    • 點擊“下載 SQL Server Management Studio”按鈕尝江,下載安裝包。
  2. 運行安裝程序:

    • 雙擊下載的安裝包英上,開始安裝炭序。
    • 按照向?qū)崾就瓿砂惭b過程啤覆。
  3. 啟動 SSMS:

    • 安裝完成后,在“開始”菜單中找到“SQL Server Management Studio”惭聂,點擊啟動窗声。

1.3 配置并連接到 SQL Server

步驟:

  1. 啟動 SSMS:

    • 打開“SQL Server Management Studio”。
  2. 連接到服務(wù)器:

    • 服務(wù)器類型:Database Engine

    • 服務(wù)器名稱:本地服務(wù)器可以使用 (local), localhost, 或者 .(點號)

    • 身份驗證

      • Windows Authentication:使用當前 Windows 用戶登錄辜纲。
      • SQL Server Authentication:如果在安裝時設(shè)置了 SQL Server 賬戶笨觅,使用對應(yīng)的用戶名和密碼。
    • 建議:默認情況下耕腾,使用 Windows Authentication 即可见剩。

  3. 點擊“連接”按鈕:

    • 成功連接后,你將在左側(cè)的“對象資源管理器”中看到已連接的服務(wù)器實例扫俺。

二苍苞、第5章:數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建與管理

本章主要涉及如何創(chuàng)建和管理數(shù)據(jù)庫及其文件肩狂,設(shè)計表結(jié)構(gòu)局待,并進行基本的增刪改操作。下面將逐一介紹各個例題的詳細操作步驟龄砰。

5.1 創(chuàng)建數(shù)據(jù)庫 JXGL(例5.1)

目標:創(chuàng)建一個名為 JXGL 的數(shù)據(jù)庫畸颅,并指定數(shù)據(jù)文件和日志文件的位置及大小担巩。

SQL 語句:

CREATE DATABASE JXGL
ON 
  (NAME = JXGL,
   FILENAME = 'D:\JXGLSYS\DATA\JXGL.mdf',
   SIZE = 5MB,
   FILEGROWTH = 1MB)
LOG ON
  (NAME = JXGL_log,
   FILENAME = 'D:\JXGLSYS\DATA\JXGL_log.ldf',
   SIZE = 2MB,
   MAXSIZE = 20MB,
   FILEGROWTH = 10%);

操作步驟:

  1. 打開 SSMS 并連接到 SQL Server。

  2. 新建查詢窗口:

    • 點擊工具欄上的“新建查詢”按鈕没炒,打開一個新的查詢編輯器窗口涛癌。
  3. 切換到 master 數(shù)據(jù)庫:

    • 在查詢編輯器中輸入:
      USE master;
      GO
      
    • 解釋:在創(chuàng)建新數(shù)據(jù)庫之前,首先需要切換到系統(tǒng)數(shù)據(jù)庫 master送火。
  4. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 CREATE DATABASE 語句粘貼到查詢編輯器中拳话。
    • 點擊“執(zhí)行”按鈕(或按 F5 鍵)運行腳本。
  5. 驗證數(shù)據(jù)庫創(chuàng)建:

    • 在“對象資源管理器”中种吸,右鍵點擊服務(wù)器實例弃衍,選擇“刷新”。
    • 展開“數(shù)據(jù)庫”節(jié)點坚俗,確認是否已出現(xiàn) JXGL 數(shù)據(jù)庫镜盯。

注意事項:

  • 文件路徑:確保 D:\JXGLSYS\DATA\ 路徑存在。如果不存在猖败,需先創(chuàng)建該文件夾速缆,或者將 FILENAME 改為你計算機上存在的路徑。
  • 權(quán)限:確保 SQL Server 服務(wù)賬戶對指定路徑有讀寫權(quán)限恩闻。
  • 文件大小單位:在 SIZEFILEGROWTH 參數(shù)中明確指定單位(如 5MB)艺糜,否則可能會導(dǎo)致錯誤。

5.2 修改數(shù)據(jù)庫文件大小(例5.2)

目標:修改 JXGL 數(shù)據(jù)庫的數(shù)據(jù)文件大小破停。

SQL 語句:

USE JXGL;
GO
ALTER DATABASE JXGL
    MODIFY FILE
    (NAME = JXGL, SIZE = 10MB);
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕翅楼。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO 以切換到目標數(shù)據(jù)庫。
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 ALTER DATABASE 語句粘貼到查詢編輯器中真慢。
    • 點擊“執(zhí)行”按鈕(或按 F5 鍵)犁嗅。
  4. 驗證文件大小修改:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫晤碘。
    • 右鍵點擊 JXGL 數(shù)據(jù)庫,選擇“屬性”功蜓。
    • 在“數(shù)據(jù)庫屬性”窗口中园爷,選擇“文件”頁簽,查看數(shù)據(jù)文件 JXGL.mdf 的當前大小是否已修改為 10MB式撼。

注意事項:

  • 文件名準確性:確保 NAME = JXGL 與數(shù)據(jù)庫創(chuàng)建時指定的數(shù)據(jù)文件名一致童社。
  • 文件大小限制:確保新的大小不小于當前文件中存儲的數(shù)據(jù)量。

5.3 增加數(shù)據(jù)庫文件(例5.3)

目標:向 JXGL 數(shù)據(jù)庫添加一個新的數(shù)據(jù)文件著隆。

SQL 語句:

USE JXGL;
GO
ALTER DATABASE JXGL
    ADD FILE
    (NAME = JXGL_1,
     FILENAME = 'D:\JXGLSYS\DATA\JXGL_1.ndf',
     SIZE = 5MB,
     MAXSIZE = 30MB,
     FILEGROWTH = 5%);
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕扰楼。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 ALTER DATABASE 語句粘貼到查詢編輯器中美浦。
    • 點擊“執(zhí)行”按鈕弦赖。
  4. 驗證文件添加:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫浦辨。
    • 展開“數(shù)據(jù)庫文件”節(jié)點蹬竖,確認是否已添加 JXGL_1.ndf 文件。

注意事項:

  • 文件路徑:同樣需要確保指定的路徑存在且有適當權(quán)限流酬。
  • 邏輯文件名NAME = JXGL_1 是邏輯名稱币厕,用于在 SQL Server 中識別文件。

5.4 移除數(shù)據(jù)庫文件(例5.4)

目標:從 JXGL 數(shù)據(jù)庫中移除先前添加的數(shù)據(jù)文件 JXGL_1.ndf芽腾。

SQL 語句:

USE JXGL;
GO
ALTER DATABASE JXGL
    REMOVE FILE JXGL_1;
GO

操作步驟:

  1. 確保文件為空:

    • 在移除文件之前旦装,必須確保該文件中沒有任何數(shù)據(jù)√希可以將數(shù)據(jù)遷移到其他數(shù)據(jù)文件阴绢,或者刪除表和索引以釋放空間。
    • 示例
      USE JXGL;
      GO
      ALTER DATABASE JXGL
          REMOVE FILE JXGL_1;
      GO
      
    • 如果文件中有數(shù)據(jù)惭载,SQL Server 將無法移除文件旱函,并提示錯誤。
  2. 新建查詢窗口:

    • 點擊“新建查詢”按鈕描滔。
  3. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO棒妨。
  4. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 ALTER DATABASE 語句粘貼到查詢編輯器中。
    • 點擊“執(zhí)行”按鈕。
  5. 驗證文件移除:

    • 在“對象資源管理器”中券腔,展開 JXGL 數(shù)據(jù)庫伏穆。
    • 展開“數(shù)據(jù)庫文件”節(jié)點,確認是否已移除 JXGL_1.ndf 文件纷纫。

注意事項:

  • 數(shù)據(jù)遷移:如果 JXGL_1.ndf 中有數(shù)據(jù)枕扫,需要先將數(shù)據(jù)遷移到其他數(shù)據(jù)文件。
  • 操作風險:移除文件可能會導(dǎo)致數(shù)據(jù)丟失辱魁,務(wù)必確保文件為空或已備份數(shù)據(jù)烟瞧。

5.8 創(chuàng)建表 S(例5.8)

目標:在 JXGL 數(shù)據(jù)庫中創(chuàng)建一個名為 S 的學(xué)生表,包含多個字段及約束染簇。

SQL 語句:

USE JXGL;
GO
CREATE TABLE S
(
    SNO nchar(9) NOT NULL
        CONSTRAINT PK_SNO PRIMARY KEY CLUSTERED
        CHECK (SNO LIKE 'S[0-9][0-9]%'),
    SNAME nchar(8) NOT NULL,
    SEX nchar(1) NULL,
    AGE SMALLINT NULL,
    COLLEGE nchar(20) NULL
);
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕参滴。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 CREATE TABLE 語句粘貼到查詢編輯器中锻弓。
    • 點擊“執(zhí)行”按鈕砾赔。
  4. 驗證表創(chuàng)建:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫青灼。
    • 展開“表”節(jié)點暴心,確認是否已創(chuàng)建 S 表。

字段解釋:

  • SNO

    • 數(shù)據(jù)類型:nchar(9)
    • 約束:
      • NOT NULL:不允許為空杂拨。
      • PRIMARY KEY CLUSTERED:主鍵专普,聚集索引。
      • CHECK (SNO LIKE 'S[0-9][0-9]%'):檢查約束弹沽,確保學(xué)號以 S 開頭脆诉,后面跟兩個數(shù)字。
  • SNAME

    • 數(shù)據(jù)類型:nchar(8)
    • 約束:NOT NULL贷币,不允許為空击胜。
  • SEX

    • 數(shù)據(jù)類型:nchar(1)
    • 約束:NULL,允許為空役纹。
  • AGE

    • 數(shù)據(jù)類型:SMALLINT
    • 約束:NULL偶摔,允許為空。
  • COLLEGE

    • 數(shù)據(jù)類型:nchar(20)
    • 約束:NULL促脉,允許為空辰斋。

注意事項:

  • 主鍵唯一性SNO 字段作為主鍵,確保每個學(xué)生的學(xué)號唯一瘸味。
  • 約束命名PK_SNO 為主鍵約束的名稱宫仗,便于后續(xù)管理。

5.9 修改表 S 的 SEX 列(例5.9)

目標:修改表 S 中的 SEX 列的數(shù)據(jù)類型旁仿,從 nchar(2) 改為 CHAR(1)藕夫,并允許為空。

SQL 語句:

USE JXGL;
GO
ALTER TABLE S
    ALTER COLUMN SEX CHAR(1) NULL;
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO毅贮。
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 ALTER TABLE 語句粘貼到查詢編輯器中办悟。
    • 點擊“執(zhí)行”按鈕。
  4. 驗證列修改:

    • 在“對象資源管理器”中滩褥,展開 JXGL 數(shù)據(jù)庫病蛉。
    • 右鍵點擊 S 表,選擇“設(shè)計”瑰煎。
    • 確認 SEX 列的數(shù)據(jù)類型已更改為 CHAR(1)铺然,并允許為空。

注意事項:

  • 數(shù)據(jù)兼容性:修改數(shù)據(jù)類型時酒甸,確碧饺郏現(xiàn)有數(shù)據(jù)與新類型兼容,避免數(shù)據(jù)丟失或截斷烘挫。
  • 約束檢查:如果有其他約束依賴于該列,需先處理這些約束柬甥。

5.10 修改表 S 的列(例5.10)

目標:刪除 BIRTHDATE 列饮六,并添加 AGE 列到表 S 中。

SQL 語句:

USE JXGL;
GO
ALTER TABLE S
    DROP COLUMN BIRTHDATE;
GO

ALTER TABLE S
    ADD AGE SMALLINT;
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕苛蒲。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO卤橄。
  3. 粘貼并執(zhí)行刪除列的 SQL 語句:

    • ALTER TABLE S DROP COLUMN BIRTHDATE; GO 語句粘貼到查詢編輯器中。
    • 點擊“執(zhí)行”按鈕臂外。
  4. 粘貼并執(zhí)行添加列的 SQL 語句:

    • ALTER TABLE S ADD AGE SMALLINT; GO 語句粘貼到查詢編輯器中窟扑。
    • 點擊“執(zhí)行”按鈕。
  5. 驗證列修改:

    • 在“對象資源管理器”中漏健,右鍵點擊 S 表嚎货,選擇“設(shè)計”。
    • 確認 BIRTHDATE 列已被刪除蔫浆,AGE 列已被添加殖属,數(shù)據(jù)類型為 SMALLINT,并允許為空瓦盛。

注意事項:

  • 數(shù)據(jù)刪除風險:刪除列會導(dǎo)致該列中的所有數(shù)據(jù)被永久刪除洗显,務(wù)必確保不再需要這些數(shù)據(jù)或已備份。
  • 添加列約束:根據(jù)需求原环,可以在添加新列時指定是否允許 NULL挠唆,以及是否有默認值。

5.11 刪除主鍵約束(例5.11)

目標:刪除表 S 中的主鍵約束 PK_SNO嘱吗。

SQL 語句:

USE JXGL;
GO
ALTER TABLE S
    DROP CONSTRAINT PK_SNO;
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕玄组。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 ALTER TABLE 語句粘貼到查詢編輯器中。
    • 點擊“執(zhí)行”按鈕巧勤。
  4. 驗證約束刪除:

    • 在“對象資源管理器”中嵌灰,展開 S 表,查看“鍵”節(jié)點颅悉,確認主鍵約束 PK_SNO 已被刪除沽瞭。

注意事項:

  • 數(shù)據(jù)完整性:刪除主鍵約束后,表中將不再有唯一標識記錄的主鍵剩瓶,可能影響數(shù)據(jù)完整性驹溃。
  • 依賴關(guān)系:如果其他表有外鍵依賴于該主鍵,需先處理這些依賴關(guān)系延曙。

5.12 刪除表 S(例5.12)

目標:刪除表 S豌鹤。

SQL 語句:

USE JXGL;
GO
DROP TABLE S;
GO

操作步驟:

  1. 備份數(shù)據(jù)(可選):

    • 在刪除表之前,建議備份數(shù)據(jù)以防止數(shù)據(jù)丟失枝缔。
    • 示例
      SELECT * INTO S_Backup FROM S;
      GO
      
  2. 新建查詢窗口:

    • 點擊“新建查詢”按鈕布疙。
  3. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO
  4. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 DROP TABLE 語句粘貼到查詢編輯器中愿卸。
    • 點擊“執(zhí)行”按鈕灵临。
  5. 驗證表刪除:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫趴荸。
    • 展開“表”節(jié)點儒溉,確認 S 表已被刪除。

注意事項:

  • 數(shù)據(jù)丟失風險:刪除表將導(dǎo)致表中的所有數(shù)據(jù)和表結(jié)構(gòu)被永久刪除发钝,務(wù)必確保不再需要這些數(shù)據(jù)或已備份顿涣。
  • 外鍵依賴:如果其他表有外鍵依賴于表 S,需先刪除或修改這些外鍵約束酝豪。

5.13 向表 S 中插入數(shù)據(jù)(例5.13)

目標:向表 S 中插入一條新記錄涛碑。

SQL 語句:

方法一:明確指定列名

USE JXGL;
GO
INSERT INTO S (SNO, SNAME, SEX, AGE, COLLEGE)
VALUES ('S13', '程曉晴', '女', 21, 'CS');
GO

方法二:省略列名,按順序插入

USE JXGL;
GO
INSERT INTO S
VALUES ('S13', '程曉晴', '女', 21, 'CS');
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕孵淘。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO锌唾。
  3. 選擇插入方法并粘貼 SQL 語句:

    • 方法一更為推薦,因為明確指定列名可以避免由于列順序變化導(dǎo)致的問題夺英。
    • 將上述其中一個 INSERT INTO 語句粘貼到查詢編輯器中晌涕。
  4. 點擊“執(zhí)行”按鈕:

    • 運行插入操作。
  5. 驗證數(shù)據(jù)插入:

    • 在“對象資源管理器”中痛悯,展開 JXGL 數(shù)據(jù)庫余黎。
    • 右鍵點擊 S 表,選擇“選擇前1000行”载萌。
    • 確認新記錄 ('S13', '程曉晴', '女', 21, 'CS') 是否已成功插入惧财。

注意事項:

  • 數(shù)據(jù)類型匹配:確保插入的數(shù)據(jù)類型與表中列的數(shù)據(jù)類型一致巡扇。例如,AGE 列為 SMALLINT垮衷,插入時應(yīng)為整數(shù)厅翔。
  • 非空約束:表中有 NOT NULL 約束的列必須提供值,否則插入操作將失敗搀突。
  • 主鍵唯一性:插入的 SNO 值必須唯一刀闷,避免違反主鍵約束。

5.14 更新表 S 中的數(shù)據(jù)(例5.14)

目標:更新表 S 中學(xué)號為 S02 的學(xué)生的姓名和年齡仰迁。

SQL 語句:

USE JXGL;
GO
UPDATE S
SET SNAME = '王中橋', AGE = 20
WHERE SNO = 'S02';
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕甸昏。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 UPDATE 語句粘貼到查詢編輯器中徐许。
    • 點擊“執(zhí)行”按鈕施蜜。
  4. 驗證數(shù)據(jù)更新:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫雌隅。
    • 右鍵點擊 S 表翻默,選擇“選擇前1000行”。
    • 找到 SNO = 'S02' 的記錄恰起,確認 SNAME 是否已更新為 王中橋修械,AGE 是否為 20

注意事項:

  • WHERE 子句:確保 WHERE 子句準確定位到需要更新的記錄村缸,避免誤更新其他記錄。
  • 數(shù)據(jù)類型匹配:更新的值必須與列的數(shù)據(jù)類型一致武氓。

5.15 刪除表 S 中的數(shù)據(jù)(例5.15)

目標:刪除表 S 中姓名為 張麗 的學(xué)生記錄梯皿。

SQL 語句:

USE JXGL;
GO
DELETE FROM S
WHERE SNAME = '張麗';
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO县恕。
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 DELETE 語句粘貼到查詢編輯器中东羹。
    • 點擊“執(zhí)行”按鈕。
  4. 驗證數(shù)據(jù)刪除:

    • 在“對象資源管理器”中忠烛,展開 JXGL 數(shù)據(jù)庫属提。
    • 右鍵點擊 S 表,選擇“選擇前1000行”美尸。
    • 確認 SNAME = '張麗' 的記錄是否已被刪除冤议。

注意事項:

  • WHERE 子句:確保 WHERE 條件準確,以避免誤刪其他記錄师坎。
  • 事務(wù)處理(可選):對于重要的刪除操作恕酸,可以使用事務(wù)(BEGIN TRANSACTION 和 COMMIT)以便在出錯時回滾。

5.16 清空表 C 中的所有數(shù)據(jù)(例5.16)

目標:刪除表 C 中的所有記錄胯陋,但保留表結(jié)構(gòu)蕊温。

SQL 語句:

TRUNCATE TABLE C;
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕袱箱。
  2. 切換到 JXGL 數(shù)據(jù)庫:

    • 輸入 USE JXGL; GO
  3. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 TRUNCATE TABLE 語句粘貼到查詢編輯器中义矛。
    • 點擊“執(zhí)行”按鈕发笔。
  4. 驗證數(shù)據(jù)清空:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫凉翻。
    • 右鍵點擊 C 表了讨,選擇“選擇前1000行”锦援。
    • 確認表中不再有任何數(shù)據(jù)記錄达布。

區(qū)別于 DELETE FROM C

  • TRUNCATE TABLE 更快腿宰,因為它不逐行刪除數(shù)據(jù)燕锥,而是重新初始化表酌住。
  • TRUNCATE 無法在有外鍵約束的表上執(zhí)行墨微,且不能使用 WHERE 子句半等。
  • TRUNCATE 操作不能回滾(取決于數(shù)據(jù)庫設(shè)置)筒捺,而 DELETE 可以缩滨。

注意事項:

  • 權(quán)限要求:需要擁有足夠的權(quán)限才能執(zhí)行 TRUNCATE TABLE 操作势就。
  • 外鍵約束:如果表 C 有其他表的外鍵依賴,需先刪除這些外鍵約束或清空依賴表脉漏。

三苞冯、第6章:SQL 查詢語言的使用

本章涵蓋了多種 SQL 查詢操作,包括選擇查詢侧巨、條件查詢舅锄、聚合函數(shù)、連接查詢司忱、子查詢等皇忿。以下將逐一介紹每個例題的詳細操作步驟。

6.1 例6.1:簡單選擇查詢

目標:查詢表 S 中的學(xué)號 (SNO) 和姓名 (SNAME)坦仍。

SQL 語句:

USE JXGL;
GO
SELECT SNO, SNAME
FROM S;
GO

操作步驟:

  1. 新建查詢窗口:

    • 點擊“新建查詢”按鈕鳍烁。
  2. 粘貼并執(zhí)行 SQL 語句:

    • 將上述 SELECT 語句粘貼到查詢編輯器中。
    • 點擊“執(zhí)行”按鈕繁扎。
  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將在下方的“結(jié)果”窗格中顯示幔荒,包含 SNOSNAME 兩列。

示例輸出:

SNO SNAME
S01 張麗
S02 王中橋
S03 王強
... ...

6.2 例6.2:選擇多個列

目標:查詢表 S 中的姓名 (SNAME)梳玫、學(xué)號 (SNO) 和學(xué)院 (COLLEGE)爹梁。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, SNO, COLLEGE
FROM S;
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句提澎。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNAME卫键、SNOCOLLEGE 三列。

示例輸出:

SNAME SNO COLLEGE
張麗 S01 CS
王中橋 S02 MA
王強 S03 IS
... ... ...

6.3 例6.3:選擇所有列

目標:查詢表 S 中的所有列虱朵。

SQL 語句:

USE JXGL;
GO
SELECT *
FROM S;
GO

等價于:

USE JXGL;
GO
SELECT SNO, SNAME, SEX, AGE, COLLEGE
FROM S;
GO

操作步驟:

  1. 新建查詢窗口莉炉。

  2. 粘貼并執(zhí)行 SQL 語句钓账。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含表 S 的所有列:SNOSNAME絮宁、SEX梆暮、AGECOLLEGE

示例輸出:

SNO SNAME SEX AGE COLLEGE
S01 張麗 21 CS
S02 王中橋 20 MA
S03 王強 23 IS
... ... ... ... ...

6.4 例6.4:計算年齡

目標:查詢學(xué)生姓名及其年齡(當前年份減出生年份)绍昂。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, YEAR(GETDATE()) - YEAR(BIRTHDATE) AS AGE
FROM S;
GO

操作步驟:

  1. 新建查詢窗口啦粹。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNAME 和計算出的 AGE 兩列窘游。

示例輸出:

SNAME AGE
張麗 21
王中橋 20
王強 23
... ...

注意事項:

  • 準確性:該方法僅按年份計算年齡唠椭,未考慮具體的出生日期。更準確的計算需要考慮月份和日期忍饰。

6.5 例6.5:別名和函數(shù)使用

目標:使用別名和函數(shù)顯示姓名 (SNAME)贪嫂、年齡和所在學(xué)院(學(xué)院名稱轉(zhuǎn)為小寫)。

SQL 語句:

USE JXGL;
GO
SELECT SNAME AS '姓名', YEAR(GETDATE()) - YEAR(BIRTHDATE) AS '年齡', LOWER(COLLEGE) AS '所在學(xué)院'
FROM S;
GO

操作步驟:

  1. 新建查詢窗口艾蓝。

  2. 粘貼并執(zhí)行 SQL 語句力崇。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 姓名年齡所在學(xué)院 三列赢织,其中 所在學(xué)院 將以小寫顯示亮靴。

示例輸出:

姓名 年齡 所在學(xué)院
張麗 21 cs
王中橋 20 ma
王強 23 is
... ... ...

注意事項:

  • 函數(shù)使用

    • YEAR(GETDATE()):獲取當前年份。
    • LOWER(COLLEGE):將 COLLEGE 字段轉(zhuǎn)換為小寫于置。
  • 別名使用AS '別名' 用于為查詢結(jié)果的列指定更友好的名稱茧吊。

6.6 例6.6:選擇唯一值

目標:查詢 SC 表中唯一的學(xué)號 (SNO)。

SQL 語句:

USE JXGL;
GO
SELECT DISTINCT SNO
FROM SC;
GO

操作步驟:

  1. 新建查詢窗口八毯。

  2. 粘貼并執(zhí)行 SQL 語句搓侄。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNO 列,每個學(xué)號只出現(xiàn)一次宪彩。

示例輸出:

SNO
S01
S02
S03
...

注意事項:

  • DISTINCT:用于返回唯一不同的值休讳,去除重復(fù)記錄讲婚。

6.7 例6.7:條件查詢

目標:查詢學(xué)院為 CS 的學(xué)生姓名尿孔。

SQL 語句:

USE JXGL;
GO
SELECT SNAME
FROM S
WHERE COLLEGE = 'CS';
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句筹麸。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含所有 COLLEGECS 的學(xué)生姓名活合。

示例輸出:

SNAME
張麗
趙敏
孫曉
...

注意事項:

  • 條件匹配WHERE 子句用于篩選符合條件的記錄。

6.8 例6.8:條件范圍查詢

目標:查詢年齡小于20歲的學(xué)生姓名和年齡物赶。

SQL 語句:

USE JXGL;
GO
SELECT SNAME AS '姓名', YEAR(GETDATE()) - YEAR(BIRTHDATE) AS '年齡'
FROM S
WHERE YEAR(GETDATE()) - YEAR(BIRTHDATE) < 20;
GO

操作步驟:

  1. 新建查詢窗口白指。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 姓名年齡酵紫,僅顯示 AGE < 20 的學(xué)生告嘲。

示例輸出:

姓名 年齡
孫曉 19
... ...

注意事項:

  • 精確性:如前所述错维,該方法僅按年份計算年齡,未考慮具體日期橄唬。

6.9 例6.9:使用子查詢

目標:查詢成績低于60分的學(xué)生學(xué)號赋焕。

SQL 語句:

USE JXGL;
GO
SELECT DISTINCT SNO
FROM SC
WHERE GRADE < 60;
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句仰楚。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNO 列隆判,顯示成績低于60分的學(xué)生學(xué)號。

示例輸出:

SNO
S10
...

注意事項:

  • 子查詢:本例中未使用子查詢僧界,但可以結(jié)合其他查詢需求進行擴展侨嘀。

6.10 例6.10:范圍條件查詢

目標:查詢出生日期在1996年7月1日至1998年6月30日之間的學(xué)生姓名、學(xué)院和出生日期捂襟。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, COLLEGE, BIRTHDATE
FROM S
WHERE BIRTHDATE BETWEEN '1996-07-01' AND '1998-06-30';
GO

操作步驟:

  1. 新建查詢窗口咬腕。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNAME笆豁、COLLEGEBIRTHDATE郎汪,僅顯示出生日期在指定范圍內(nèi)的學(xué)生。

示例輸出:

SNAME COLLEGE BIRTHDATE
張麗 CS 1997-05-15
... ... ...

注意事項:

  • 日期格式:確保日期格式與數(shù)據(jù)庫配置一致闯狱,避免格式錯誤導(dǎo)致查詢失敗煞赢。

6.11 例6.11:不在范圍內(nèi)的查詢

目標:查詢年齡不在20到23歲之間的學(xué)生姓名、學(xué)院和年齡哄孤。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, COLLEGE, YEAR(GETDATE()) - YEAR(BIRTHDATE) AS '年齡'
FROM S
WHERE YEAR(GETDATE()) - YEAR(BIRTHDATE) NOT BETWEEN 20 AND 23;
GO

操作步驟:

  1. 新建查詢窗口照筑。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNAME瘦陈、COLLEGEAGE凝危,僅顯示年齡不在20到23歲之間的學(xué)生。

示例輸出:

SNAME COLLEGE 年齡
孫曉 CS 19
吳剛 IS 25
... ... ...

注意事項:

  • 邏輯運算NOT BETWEEN 用于排除指定范圍內(nèi)的值晨逝。

6.12 例6.12:IN 子句查詢

目標:查詢學(xué)院為 CS蛾默、MAIS 的學(xué)生姓名和性別。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, SEX
FROM S
WHERE COLLEGE IN ('CS', 'MA', 'IS');
GO

操作步驟:

  1. 新建查詢窗口捉貌。

  2. 粘貼并執(zhí)行 SQL 語句支鸡。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNAMESEX,僅顯示 COLLEGECS趁窃、MAIS 的學(xué)生牧挣。

示例輸出:

SNAME SEX
張麗
王中橋
... ...

注意事項:

  • IN 子句:用于指定多個可能的匹配值,簡化多個 OR 條件的寫法醒陆。

6.13 例6.13:模糊查詢

目標:查詢學(xué)號以 S3 開頭的所有學(xué)生記錄瀑构。

SQL 語句:

USE JXGL;
GO
SELECT *
FROM S
WHERE SNO LIKE 'S3%';
GO

等價于:

USE JXGL;
GO
SELECT *
FROM S
WHERE SNO = 'S3';
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 LIKE 語句刨摩。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含所有 SNOS3 開頭的學(xué)生記錄寺晌。

示例輸出:

SNO SNAME SEX AGE COLLEGE
S03 王強 23 IS
... ... ... ... ...

注意事項:

  • 通配符 %:表示任意數(shù)量的字符世吨,因此 LIKE 'S3%' 匹配所有以 S3 開頭的字符串。
  • 等價性LIKE 'S3%' 匹配以 S3 開頭的所有字符串呻征,而 SNO = 'S3' 僅匹配完全等于 S3 的記錄另假。

6.14 例6.14:模糊查詢

目標:查詢姓名以 開頭的學(xué)生姓名、學(xué)號和性別怕犁。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, SNO, SEX
FROM S
WHERE SNAME LIKE '李%';
GO

操作步驟:

  1. 新建查詢窗口边篮。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNAME奏甫、SNOSEX戈轿,僅顯示 SNAME 開頭的學(xué)生。

示例輸出:

SNAME SNO SEX
李明 S02
李強 S04
... ... ...

注意事項:

  • 通配符 %:同樣用于表示任意數(shù)量的字符阵子,確保匹配正確的記錄思杯。

6.15 例6.15:空值查詢

目標:查詢成績 (GRADE) 為空的學(xué)生學(xué)號和課程號。

SQL 語句:

USE JXGL;
GO
SELECT SNO, CNO
FROM SC
WHERE GRADE IS NULL;
GO

操作步驟:

  1. 新建查詢窗口挠进。

  2. 粘貼并執(zhí)行 SQL 語句色乾。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNOCNO,僅顯示 GRADE 為空的記錄领突。

示例輸出:

SNO CNO
S04 C1
... ...

注意事項:

  • 空值判斷:在 SQL 中暖璧,NULL 值需要使用 IS NULLIS NOT NULL 來判斷,不能使用 =<> 運算符君旦。

6.16 例6.16:非空值查詢

目標:查詢成績 (GRADE) 不為空的學(xué)生學(xué)號和課程號澎办。

SQL 語句:

USE JXGL;
GO
SELECT SNO, CNO
FROM SC
WHERE GRADE IS NOT NULL;
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句金砍。

  3. 查看查詢結(jié)果:

    • 查詢結(jié)果將包含 SNOCNO局蚀,僅顯示 GRADE 不為空的記錄。

示例輸出:

SNO CNO
S01 C1
S01 C2
... ...

注意事項:

  • 空值判斷:使用 IS NOT NULL 來篩選非空值記錄恕稠。

6.17 例6.17:組合條件查詢

目標

  1. 查詢學(xué)院為 CS 且出生日期在1997年9月1日之前的學(xué)生姓名和出生日期琅绅。
  2. 查詢學(xué)院為 CSMAIS 的學(xué)生姓名和性別鹅巍。

SQL 語句:

第一部分:

USE JXGL;
GO
SELECT SNAME, BIRTHDATE
FROM S
WHERE COLLEGE = 'CS' AND BIRTHDATE < '1997-09-01';
GO

第二部分:

USE JXGL;
GO
SELECT SNAME, SEX
FROM S
WHERE COLLEGE = 'CS' OR COLLEGE = 'MA' OR COLLEGE = 'IS';
GO

操作步驟:

  1. 新建查詢窗口千扶。

  2. 粘貼并執(zhí)行第一部分 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 SNAMEBIRTHDATE昆著,僅包含符合條件的學(xué)生县貌。
  4. 粘貼并執(zhí)行第二部分 SQL 語句术陶。

  5. 查看查詢結(jié)果:

    • 結(jié)果將顯示 SNAMESEX凑懂,僅包含 COLLEGECSMAIS 的學(xué)生梧宫。

示例輸出:

第一部分:

SNAME BIRTHDATE
張麗 1996-05-15
... ...

第二部分:

SNAME SEX
張麗
王中橋
... ...

注意事項:

  • 邏輯運算符AND 用于連接多個條件接谨,所有條件必須滿足摆碉;OR 用于連接多個條件,任一條件滿足即可脓豪。

6.18 例6.18:排序查詢

目標:查詢課程號為 C3 的學(xué)生學(xué)號和成績巷帝,并按成績降序排列。

SQL 語句:

USE JXGL;
GO
SELECT SNO, GRADE
FROM SC
WHERE CNO = 'C3'
ORDER BY GRADE DESC;
GO

操作步驟:

  1. 新建查詢窗口扫夜。

  2. 粘貼并執(zhí)行 SQL 語句楞泼。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 SNOGRADE,按 GRADE 降序排列笤闯。

示例輸出:

SNO GRADE
S02 88
S03 75
... ...

注意事項:

  • 排序方向DESC 表示降序堕阔,ASC 表示升序(默認)。

6.19 例6.19:多列排序

目標:查詢表 S 中的所有記錄颗味,并按學(xué)院升序超陆、出生日期降序排列。

SQL 語句:

USE JXGL;
GO
SELECT *
FROM S
ORDER BY COLLEGE ASC, BIRTHDATE DESC;
GO

操作步驟:

  1. 新建查詢窗口浦马。

  2. 粘貼并執(zhí)行 SQL 語句时呀。

  3. 查看查詢結(jié)果:

    • 結(jié)果將包含所有列,并按 COLLEGE 升序排列晶默,COLLEGE 相同的記錄按 BIRTHDATE 降序排列谨娜。

示例輸出:

SNO SNAME SEX AGE COLLEGE
S01 張麗 21 CS
S05 孫曉 19 CS
S02 王中橋 20 MA
S09 馮雪 21 MA
... ... ... ... ...

注意事項:

  • 多列排序:可以根據(jù)多個列進行排序,依次指定排序方向磺陡。

6.20 例6.20:分組和聚合函數(shù)

目標:按性別分組瞧预,統(tǒng)計每種性別的人數(shù)。

SQL 語句:

USE JXGL;
GO
SELECT SEX AS '性別', COUNT(*) AS '人數(shù)'
FROM S
GROUP BY SEX;
GO

操作步驟:

  1. 新建查詢窗口仅政。

  2. 粘貼并執(zhí)行 SQL 語句垢油。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 性別人數(shù),表示每種性別的人數(shù)統(tǒng)計圆丹。

示例輸出:

性別 人數(shù)
5
3
NULL 2

注意事項:

  • GROUP BY:用于將查詢結(jié)果按照指定的列進行分組滩愁。
  • 聚合函數(shù):如 COUNT(*) 用于統(tǒng)計記錄數(shù)。

6.21 例6.21:分組和條件聚合

目標:按課程號分組辫封,統(tǒng)計有成績記錄的學(xué)生人數(shù)硝枉。

SQL 語句:

USE JXGL;
GO
SELECT CNO AS '課程號', COUNT(*) AS '人數(shù)'
FROM SC
WHERE GRADE IS NOT NULL
GROUP BY CNO;
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句倦微。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 課程號人數(shù)妻味,表示每門課程有成績記錄的學(xué)生人數(shù)。

示例輸出:

課程號 人數(shù)
C1 4
C2 3
C3 5
... ...

注意事項:

  • WHERE 子句:用于篩選符合條件的記錄欣福,此處篩選 GRADE 不為空的記錄责球。
  • 聚合函數(shù)COUNT(*) 統(tǒng)計分組后的記錄數(shù)。

6.22 例6.22:分組條件篩選

目標:按課程號分組,統(tǒng)計選修人數(shù)不少于8人的課程號和人數(shù)雏逾。

SQL 語句:

USE JXGL;
GO
SELECT CNO AS '課程號', COUNT(SNO) AS '人數(shù)'
FROM SC
GROUP BY CNO
HAVING COUNT(SNO) >= 8;
GO

操作步驟:

  1. 新建查詢窗口嘉裤。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 課程號人數(shù)栖博,僅包含選修人數(shù) ≥ 8 的課程屑宠。

示例輸出:

課程號 人數(shù)
C1 10
C2 9
... ...

注意事項:

  • HAVING 子句:用于在分組后篩選符合條件的組,與 WHERE 子句不同仇让,WHERE 在分組前篩選記錄典奉。

6.23 例6.23:分組后的子查詢

目標:查詢選修課程數(shù)超過4門的學(xué)生學(xué)號。

SQL 語句:

USE JXGL;
GO
SELECT SNO
FROM SC
GROUP BY SNO
HAVING COUNT(*) > 4;
GO

操作步驟:

  1. 新建查詢窗口丧叽。

  2. 粘貼并執(zhí)行 SQL 語句秋柄。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 SNO,僅包含選修課程數(shù)超過4門的學(xué)生學(xué)號蠢正。

示例輸出:

SNO
S01
S02
...

注意事項:

  • GROUP BY 和 HAVING:結(jié)合使用可實現(xiàn)分組后的條件篩選骇笔。

6.24 例6.24:TOP 關(guān)鍵字

目標:查詢課程號為 C1 的前三名成績最高的學(xué)生學(xué)號和成績。

SQL 語句:

USE JXGL;
GO
SELECT TOP 3 SNO, GRADE
FROM SC
WHERE CNO = 'C1'
ORDER BY GRADE DESC;
GO

操作步驟:

  1. 新建查詢窗口嚣崭。

  2. 粘貼并執(zhí)行 SQL 語句笨触。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 SNOGRADE,僅包含成績最高的前三名學(xué)生雹舀。

示例輸出:

SNO GRADE
S08 95
S02 90
S01 85

注意事項:

  • TOP 子句:用于限制查詢結(jié)果的行數(shù)芦劣。
  • 排序順序:確保 ORDER BY 子句與 TOP 子句配合使用,以獲取預(yù)期結(jié)果说榆。

6.25 例6.25:百分比選擇

目標:查詢總分前20%的學(xué)生學(xué)號和總分虚吟。

SQL 語句:

USE JXGL;
GO
SELECT TOP 20 PERCENT SNO AS '學(xué)號', SUM(GRADE) AS '總分'
FROM SC
GROUP BY SNO
ORDER BY SUM(GRADE) DESC;
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句签财。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 學(xué)號總分串慰,僅包含總分前20%的學(xué)生。

示例輸出:

學(xué)號 總分
S08 180
S02 178
... ...

注意事項:

  • TOP 20 PERCENT:用于獲取總分前20%的學(xué)生唱蒸。
  • GROUP BY 和 SUM:結(jié)合使用以計算每個學(xué)生的總分邦鲫。
  • ORDER BY:按總分降序排列,確保前20%為最高分神汹。

6.26 例6.26:創(chuàng)建新表并插入數(shù)據(jù)

目標:創(chuàng)建一個新表 GRADE_NPASS庆捺,存儲成績低于60分的學(xué)生學(xué)號。

SQL 語句:

USE JXGL;
GO
SELECT DISTINCT SNO INTO GRADE_NPASS
FROM SC
WHERE GRADE < 60;
GO

操作步驟:

  1. 新建查詢窗口屁魏。

  2. 粘貼并執(zhí)行 SQL 語句滔以。

  3. 查看新表創(chuàng)建和數(shù)據(jù)插入:

    • 在“對象資源管理器”中,展開 JXGL 數(shù)據(jù)庫氓拼。
    • 展開“表”節(jié)點你画,確認是否已創(chuàng)建 GRADE_NPASS 表抵碟。
    • 右鍵點擊 GRADE_NPASS 表,選擇“選擇前1000行”撬即,確認數(shù)據(jù)是否正確插入。

注意事項:

  • SELECT INTO:用于創(chuàng)建新表并插入查詢結(jié)果呈队。
  • DISTINCT:確保 SNO 不重復(fù)剥槐。

6.27 例6.27:UNION 操作

目標:查詢同時選修課程 C2C4 的學(xué)生學(xué)號。

SQL 語句:

USE JXGL;
GO
SELECT SNO
FROM SC
WHERE CNO = 'C2'
UNION
SELECT SNO
FROM SC
WHERE CNO = 'C4';
GO

操作步驟:

  1. 新建查詢窗口宪摧。

  2. 粘貼并執(zhí)行 SQL 語句粒竖。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有選修 C2C4 課程的學(xué)生學(xué)號,且不重復(fù)几于。

示例輸出:

SNO
S02
S04
S05
...

注意事項:

  • UNION:用于合并兩個查詢結(jié)果蕊苗,自動去除重復(fù)記錄。
  • UNION ALL:如果需要保留重復(fù)記錄沿彭,可以使用 UNION ALL朽砰。

6.28 例6.28:INTERSECT 操作

目標:查詢同時選修課程 C1C2 的學(xué)生學(xué)號。

SQL 語句:

USE JXGL;
GO
SELECT SNO
FROM SC
WHERE CNO = 'C1'
INTERSECT
SELECT SNO
FROM SC
WHERE CNO = 'C2';
GO

操作步驟:

  1. 新建查詢窗口喉刘。

  2. 粘貼并執(zhí)行 SQL 語句瞧柔。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示同時選修 C1C2 課程的學(xué)生學(xué)號。

示例輸出:

SNO
S02
S08
...

注意事項:

  • INTERSECT:用于返回兩個查詢的交集渣慕,即同時滿足兩個查詢條件的記錄隔箍。

6.29 例6.29:EXCEPT 操作

目標:查詢選修課程 C1 但未選修 C3 的學(xué)生學(xué)號态坦。

SQL 語句:

USE JXGL;
GO
SELECT SNO
FROM SC
WHERE CNO = 'C1'
EXCEPT
SELECT SNO
FROM SC
WHERE CNO = 'C3';
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句哥蔚。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示選修 C1 但未選修 C3 的學(xué)生學(xué)號。

示例輸出:

SNO
S01
S08
...

注意事項:

  • EXCEPT:用于返回第一個查詢中存在但第二個查詢中不存在的記錄蛛蒙。

6.30 例6.30:內(nèi)連接查詢

目標:查詢學(xué)生表和選課表的內(nèi)連接結(jié)果糙箍,即所有選課的學(xué)生信息。

SQL 語句:

USE JXGL;
GO
SELECT *
FROM S
INNER JOIN SC ON S.SNO = SC.SNO;
GO

操作步驟:

  1. 新建查詢窗口牵祟。

  2. 粘貼并執(zhí)行 SQL 語句倍靡。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有選課的學(xué)生信息,包括 S 表和 SC 表的所有列课舍。

示例輸出:

SNO SNAME SEX AGE COLLEGE SNO CNO GRADE
S01 張麗 21 CS S01 C1 85
S01 張麗 21 CS S01 C2 78
... ... ... ... ... ... ... ...

注意事項:

  • 內(nèi)連接:僅返回在兩個表中匹配的記錄塌西。
  • 字段重復(fù):由于 SNO 在兩個表中都有,結(jié)果中會顯示重復(fù)列筝尾〖裥瑁可以通過指定列名來避免重復(fù)。

改進示例:

USE JXGL;
GO
SELECT S.SNO, S.SNAME, SC.CNO, SC.GRADE
FROM S
INNER JOIN SC ON S.SNO = SC.SNO;
GO

6.31 例6.31:內(nèi)連接與聚合函數(shù)

目標:查詢 CS 學(xué)院學(xué)生各課程的平均成績筹淫。

SQL 語句:

USE JXGL;
GO
SELECT SC.CNO, ROUND(AVG(SC.GRADE), 1) AS 'AVERAGE'
FROM S
JOIN SC ON S.SNO = SC.SNO AND S.COLLEGE = 'CS'
GROUP BY SC.CNO;
GO

操作步驟:

  1. 新建查詢窗口站辉。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示 CNO 和對應(yīng)的 AVERAGE(平均成績)。

示例輸出:

CNO AVERAGE
C1 85.0
C4 80.5
... ...

注意事項:

  • 聚合函數(shù)AVG(SC.GRADE) 計算每門課程的平均成績饰剥。
  • ROUND 函數(shù):用于將平均成績四舍五入到一位小數(shù)殊霞。
  • GROUP BY:按課程號分組,以計算每組的平均成績汰蓉。

6.32 例6.32:自連接查詢

目標:查詢選修課程 C4 且成績高于學(xué)生 S03C4 課程中成績的其他學(xué)生的學(xué)號绷蹲、課程號和成績,并按成績降序排列顾孽。

SQL 語句:

USE JXGL;
GO
SELECT a.SNO, a.CNO, a.GRADE
FROM SC a
INNER JOIN SC b
    ON a.CNO = 'C4' 
    AND a.GRADE > b.GRADE 
    AND b.SNO = 'S03' 
    AND b.CNO = 'C4'
ORDER BY a.GRADE DESC;
GO

操作步驟:

  1. 確定學(xué)生 S03 在 C4 課程中的成績:

    • 可以先運行以下查詢祝钢,查看 S03C4 課程中的成績。
      USE JXGL;
      GO
      SELECT GRADE
      FROM SC
      WHERE SNO = 'S03' AND CNO = 'C4';
      GO
      
  2. 新建查詢窗口若厚。

  3. 粘貼并執(zhí)行自連接 SQL 語句:

    • 上述 SELECT 語句用于查找成績高于 S03C4 課程中的成績的其他學(xué)生拦英。
  4. 查看查詢結(jié)果:

    • 結(jié)果將顯示符合條件的學(xué)生學(xué)號 (SNO)、課程號 (CNO) 和成績 (GRADE)测秸,并按成績降序排列疤估。

示例輸出:

SNO CNO GRADE
S08 C4 85
... ... ...

注意事項:

  • 自連接:表 SC 被別名為 ab,用于比較不同記錄霎冯。
  • 條件組合:確保 S03C4 課程中的成績已確定做裙,以便準確比較。

6.33 例6.33:多表連接查詢

目標:查詢成績大于等于90分的學(xué)生學(xué)號肃晚、姓名锚贱、課程號、課程名和成績关串。

SQL 語句:

USE JXGL;
GO
SELECT S.SNO, S.SNAME, SC.CNO, C.CNAME, SC.GRADE
FROM S
JOIN SC ON S.SNO = SC.SNO AND SC.GRADE >= 90
JOIN C ON SC.CNO = C.CNO;
GO

或者

USE JXGL;
GO
SELECT S.SNO, S.SNAME, SC.CNO, C.CNAME, SC.GRADE
FROM S
JOIN (SC JOIN C ON SC.CNO = C.CNO)
    ON S.SNO = SC.SNO AND SC.GRADE >= 90;
GO

操作步驟:

  1. 新建查詢窗口拧廊。

  2. 粘貼并執(zhí)行任一 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示符合條件的學(xué)生學(xué)號 (SNO)晋修、姓名 (SNAME)吧碾、課程號 (CNO)、課程名 (CNAME) 和成績 (GRADE)墓卦。

示例輸出:

SNO SNAME CNO CNAME GRADE
S02 王中橋 C1 數(shù)據(jù)庫原理與應(yīng)用 90
S03 王強 C4 操作系統(tǒng) 92
S08 鄭凱 C1 數(shù)據(jù)庫原理與應(yīng)用 95
... ... ... ... ...

注意事項:

  • 多表連接:確保連接條件正確倦春,以避免生成笛卡爾積。
  • 篩選條件:成績篩選條件 SC.GRADE >= 90 應(yīng)位于適當?shù)奈恢寐浼簦源_保只獲取符合條件的記錄睁本。

6.34 例6.34:左連接查詢

目標:查詢所有學(xué)生的信息及其選課情況,即使學(xué)生沒有選課也會顯示忠怖。

SQL 語句:

USE JXGL;
GO
SELECT S.*, SC.CNO, SC.GRADE
FROM S
LEFT JOIN SC ON S.SNO = SC.SNO;
GO

操作步驟:

  1. 新建查詢窗口呢堰。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有學(xué)生的信息凡泣,包括那些未選課的學(xué)生枉疼,其 CNOGRADE 可能為 NULL皮假。

示例輸出:

SNO SNAME SEX AGE COLLEGE CNO GRADE
S01 張麗 21 CS C1 85
S01 張麗 21 CS C2 78
S04 趙敏 20 CS C1 NULL
S05 孫曉 19 CS C1 65
... ... ... ... ... ... ...

注意事項:

  • LEFT JOIN:返回左表 (S) 的所有記錄,即使右表 (SC) 中沒有匹配的記錄惹资。
  • NULL 值:未選課的學(xué)生其相關(guān)字段 (CNO, GRADE) 將顯示為 NULL褪测。

6.35 例6.35:交叉連接查詢

目標:查詢學(xué)生表和選課表的笛卡爾積稠肘,即每個學(xué)生與每門課程的組合。

SQL 語句:

USE JXGL;
GO
SELECT S.*, SC.CNO, SC.GRADE
FROM S
CROSS JOIN SC;
GO

操作步驟:

  1. 新建查詢窗口滑黔。

  2. 粘貼并執(zhí)行 SQL 語句略荡。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示學(xué)生與選課的所有可能組合,數(shù)據(jù)量通常很大歉胶。
    • 示例輸出
      • 如果有10個學(xué)生和15條選課記錄汛兜,則結(jié)果將有150條記錄。

注意事項:

  • CROSS JOIN:生成兩個表的笛卡爾積通今,數(shù)據(jù)量可能非常大粥谬,需謹慎使用。
  • 用途:通常用于特定的數(shù)據(jù)分析或生成組合數(shù)據(jù)辫塌,不常用于日常查詢漏策。

6.36 例6.36:嵌套查詢

目標:展示如何使用子查詢和自身連接進行嵌套查詢。

SQL 語句:

方法一:使用子查詢

USE JXGL;
GO
SELECT SNO, SNAME, COLLEGE 
FROM S
WHERE COLLEGE IN
    (SELECT COLLEGE
     FROM S
     WHERE SNAME = '王曉杰');
GO

方法二:使用自身連接

USE JXGL;
GO
SELECT b.SNO, b.SNAME, b.COLLEGE 
FROM S AS a
JOIN S AS b 
    ON a.COLLEGE = b.COLLEGE AND a.SNAME = '許文秀';
GO

操作步驟:

  1. 新建查詢窗口臼氨。

  2. 選擇方法一或方法二掺喻,粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 方法一:返回 COLLEGE王曉杰 相同的所有學(xué)生記錄感耙。
    • 方法二:通過自身連接返回 COLLEGE許文秀 相同的所有學(xué)生記錄舆蝴。

示例輸出:

方法一:

SNO SNAME COLLEGE
S02 王中杰 CS
... ... ...

方法二:

SNO SNAME COLLEGE
S01 張麗 CS
S04 趙敏 CS
... ... ...

注意事項:

  • 子查詢與自身連接:兩種方法實現(xiàn)相同的查詢目的,但方式不同草冈,理解其用途有助于靈活運用拳恋。
  • 條件設(shè)置:確保子查詢或連接條件正確垦藏,以返回預(yù)期結(jié)果。

6.37 例6.37:嵌套查詢

目標:查詢選修課程 C3 的學(xué)生姓名和學(xué)院。

SQL 語句:

USE JXGL;
GO
SELECT SNAME, COLLEGE 
FROM S
WHERE SNO IN
    (SELECT SNO
     FROM SC
     WHERE CNO = 'C3');
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有選修 C3 課程的學(xué)生姓名和學(xué)院腊状。

示例輸出:

SNAME COLLEGE
王強 IS
... ...

注意事項:

  • 子查詢:用于在主查詢中篩選符合特定條件的記錄映屋。
  • IN 子句:用于匹配多個可能的值。

6.38 例6.38:ANY 操作

目標:查詢至少選修一門成績大于80分課程的學(xué)生信息。

SQL 語句:

USE JXGL;
GO
SELECT SNO, SNAME, COLLEGE
FROM S
WHERE SNO = ANY (SELECT SNO
                FROM SC 
                WHERE GRADE > 80);
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有至少有一門課程成績大于80分的學(xué)生信息泛释。

示例輸出:

SNO SNAME COLLEGE
S01 張麗 CS
S02 王中橋 MA
... ... ...

注意事項:

  • ANY 操作:用于比較主查詢中的值是否與子查詢返回的任一值匹配。
  • 邏輯理解:確保理解 ANYALLSOME 的區(qū)別和用途。

6.39 例6.39:SOME 操作與子查詢

目標:查詢學(xué)院不是 CS 且出生日期晚于 CS 學(xué)院學(xué)生中最晚出生日期的學(xué)生姓名和年齡键科。

SQL 語句:

方法一:使用 SOME 操作

USE JXGL;
GO
SELECT SNAME, YEAR(GETDATE()) - YEAR(BIRTHDATE) AS AGE
FROM S
WHERE BIRTHDATE > SOME (SELECT BIRTHDATE
                        FROM S
                        WHERE COLLEGE = 'CS')
      AND COLLEGE <> 'CS';
GO

方法二:使用子查詢獲取最大出生日期

USE JXGL;
GO
SELECT SNAME, YEAR(GETDATE()) - YEAR(BIRTHDATE) AS AGE
FROM S
WHERE BIRTHDATE > (SELECT MAX(BIRTHDATE)
                   FROM S
                   WHERE COLLEGE = 'CS')
      AND COLLEGE <> 'CS';
GO

操作步驟:

  1. 新建查詢窗口饭玲。

  2. 選擇方法一或方法二,粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示符合條件的學(xué)生姓名和年齡。

示例輸出:

SNAME AGE
李華 22
... ...

注意事項:

  • SOME 與 ANYSOMEANY 功能相同,用于比較是否滿足子查詢中的任一條件。
  • 子查詢中的聚合函數(shù):方法二通過 MAX 函數(shù)獲取 CS 學(xué)院學(xué)生的最晚出生日期鼓寺,進行精確比較苦银。

6.40 例6.40:子查詢中的聚合函數(shù)

目標:查詢每個學(xué)生在其選修課程中想括,成績高于或等于其平均成績的課程信息。

SQL 語句:

USE JXGL;
GO
SELECT SNO, CNO, GRADE
FROM SC AS a
WHERE GRADE >=
    (SELECT AVG(GRADE)  
     FROM SC AS b
     WHERE a.SNO = b.SNO);
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示每個學(xué)生在其選修課程中冬阳,成績高于或等于其平均成績的課程信息刑顺。

示例輸出:

SNO CNO GRADE
S01 C1 85
S02 C1 90
S02 C3 88
... ... ...

注意事項:

  • 別名使用AS aAS b 用于區(qū)分子查詢和主查詢的同名表。
  • 相關(guān)子查詢:子查詢依賴于主查詢的 SNO 值,確保正確關(guān)聯(lián)。

6.41 例6.41:EXISTS 操作

目標:查詢選修課程 C2 的學(xué)生姓名衅檀。

SQL 語句:

USE JXGL;
GO
SELECT SNAME
FROM S
WHERE EXISTS 
    (SELECT *
     FROM SC
     WHERE SNO = S.SNO AND SC.CNO = 'C2');
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句学密。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有選修 C2 課程的學(xué)生姓名哭靖。

示例輸出:

SNAME
王中杰
李明
...

注意事項:

  • EXISTS 操作:用于判斷子查詢是否返回至少一條記錄铺坞,存在則返回主查詢中的記錄。
  • 效率優(yōu)化EXISTS 通常比 IN 更高效腐晾,尤其在子查詢結(jié)果集較大時颖御。

6.42 例6.42:NOT EXISTS 操作

目標:查詢學(xué)院為 CS 且未選修課程 C4 的學(xué)生學(xué)號和姓名。

SQL 語句:

USE JXGL;
GO
SELECT SNO, SNAME
FROM S
WHERE NOT EXISTS 
    (SELECT *
     FROM SC
     WHERE SNO = S.SNO AND SC.CNO = 'C4')
      AND COLLEGE = 'CS';
GO

操作步驟:

  1. 新建查詢窗口垫蛆。

  2. 粘貼并執(zhí)行 SQL 語句虑乖。

  3. 查看查詢結(jié)果:

    • 結(jié)果將顯示所有 COLLEGECS 且未選修 C4 課程的學(xué)生學(xué)號和姓名。

示例輸出:

SNO SNAME
S05 孫曉
... ...

注意事項:

  • 邏輯運算NOT EXISTS 用于排除滿足子查詢條件的記錄洪灯。
  • 組合條件AND COLLEGE = 'CS' 確保僅查詢 CS 學(xué)院的學(xué)生。

6.43 例6.43:創(chuàng)建新表并插入聚合數(shù)據(jù)

目標:創(chuàng)建一個新表 COLL_AGE,存儲每個學(xué)院的平均年齡。

SQL 語句:

USE JXGL;
GO
CREATE TABLE COLL_AGE(
    COLLEGE nchar(20),
    AVG_AGE REAL
);
GO

INSERT INTO COLL_AGE(COLLEGE, AVG_AGE)
SELECT COLLEGE, AVG(YEAR(GETDATE()) - YEAR(BIRTHDATE))
FROM S
GROUP BY COLLEGE;
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行創(chuàng)建表的 SQL 語句:

    • 包含 CREATE TABLE 語句,創(chuàng)建 COLL_AGE 表追驴。
  3. 粘貼并執(zhí)行插入數(shù)據(jù)的 SQL 語句:

    • 使用 INSERT INTO ... SELECT 語句丙曙,將每個學(xué)院的平均年齡插入到 COLL_AGE 表中。
  4. 驗證新表和數(shù)據(jù):

    • 在“對象資源管理器”中惰瓜,展開 JXGL 數(shù)據(jù)庫曲尸。
    • 右鍵點擊 COLL_AGE 表鸦列,選擇“選擇前1000行”,確認數(shù)據(jù)是否正確插入鹏倘。

示例輸出:

COLLEGE AVG_AGE
CS 20.5
MA 21.0
IS 22.3
... ...

注意事項:

  • 數(shù)據(jù)準確性:確保 BIRTHDATE 列的數(shù)據(jù)完整性薯嗤,以準確計算平均年齡。
  • 數(shù)據(jù)類型AVG_AGE 使用 REAL 類型纤泵,適用于存儲浮點數(shù)。

6.44 例6.44:刪除符合條件的記錄

目標:刪除選修課程的學(xué)生中,學(xué)院為 CS 的選課記錄。

SQL 語句:

USE JXGL;
GO
DELETE FROM SC
WHERE 'CS' = (SELECT COLLEGE
             FROM S
             WHERE S.SNO = SC.SNO);
GO

操作步驟:

  1. 新建查詢窗口。

  2. 粘貼并執(zhí)行 SQL 語句:

    • 該語句刪除所有 SC 表中對應(yīng) S 表中 COLLEGECS 的記錄。
  3. 查看刪除結(jié)果:

    • 可以通過以下查詢確認刪除是否成功:
      USE JXGL;
      GO
      SELECT *
      FROM SC
      WHERE SNO IN (SELECT SNO FROM S WHERE COLLEGE = 'CS');
      GO
      

示例輸出:

  • 若刪除成功举户,則以上查詢結(jié)果將不包含任何 SNO 屬于 CS 學(xué)院的選課記錄膳帕。

注意事項:

  • 子查詢返回單一值:確保子查詢在 WHERE 子句中返回單一值演痒,否則可能導(dǎo)致錯誤。
  • 外鍵約束:刪除操作可能受外鍵約束影響喷楣,需先處理相關(guān)依賴。

6.45 例6.45:更新符合條件的記錄

目標:為學(xué)院為 CS 且選修課程 C4 的學(xué)生的成績增加5%朴乖。

SQL 語句:

USE JXGL;
GO
UPDATE SC
SET GRADE = GRADE + GRADE * 0.05
WHERE 'CS' = (SELECT COLLEGE
             FROM S
             WHERE S.SNO = SC.SNO AND CNO = 'C4');
GO

操作步驟:

  1. 新建查詢窗口憾朴。

  2. 粘貼并執(zhí)行 SQL 語句:

    • 該語句為符合條件的 SC 表記錄的 GRADE 增加5%芦圾。
  3. 查看更新結(jié)果:

    • 通過以下查詢確認成績是否正確更新:
      USE JXGL;
      GO
      SELECT SC.SNO, S.SNAME, SC.CNO, SC.GRADE
      FROM SC
      JOIN S ON SC.SNO = S.SNO
      WHERE S.COLLEGE = 'CS' AND SC.CNO = 'C4';
      GO
      

示例輸出:

SNO SNAME CNO GRADE
S03 王強 C4 96.6
S08 鄭凱 C4 89.3
... ... ... ...

注意事項:

  • 計算準確性:確保 GRADE 字段的數(shù)據(jù)類型支持小數(shù)點,避免數(shù)據(jù)截斷。
  • 事務(wù)處理(可選):對于批量更新操作嗅辣,建議使用事務(wù)(BEGIN TRANSACTION 和 COMMIT)以便在出錯時回滾掐暮。

四、作業(yè)要求的特殊修改

根據(jù)你的作業(yè)要求治笨,需要對第5章和第6章的部分操作進行特定的修改咐熙。以下將詳細說明如何完成這些修改弱恒。

要求1:在表 S 中錄入自己的姓名

操作目標:在表 S 中插入或更新一條記錄,包含你的姓名及相關(guān)信息棋恼。

操作步驟:

  1. 確定插入或更新方式:

    • 插入新記錄:如果你是新學(xué)生返弹,可以插入一條新的記錄。
    • 更新現(xiàn)有記錄:如果已有記錄爪飘,可以更新其中一條記錄义起。
  2. 插入新記錄的 SQL 語句:

    示例:

    USE JXGL;
    GO
    INSERT INTO S (SNO, SNAME, SEX, AGE, COLLEGE)
    VALUES ('S99', '張三', '男', 22, 'CS');
    GO
    

    步驟:

    • 新建查詢窗口。
    • 粘貼并執(zhí)行上述 INSERT 語句师崎。
    • 驗證插入:
      • 右鍵點擊 S 表默终,選擇“選擇前1000行”,確認新記錄是否已插入。
  3. 更新現(xiàn)有記錄的 SQL 語句:

    示例:

    USE JXGL;
    GO
    UPDATE S
    SET SNAME = '張三', SEX = '男', AGE = 22, COLLEGE = 'CS'
    WHERE SNO = 'S02';
    GO
    

    步驟:

    • 新建查詢窗口穷蛹。
    • 粘貼并執(zhí)行上述 UPDATE 語句土陪。
    • 驗證更新:
      • 右鍵點擊 S 表,選擇“選擇前1000行”肴熏,確認指定記錄是否已更新鬼雀。

注意事項:

  • 唯一性:確保插入的新 SNO 值是唯一的,避免違反主鍵約束蛙吏。
  • 數(shù)據(jù)類型匹配:插入或更新的數(shù)據(jù)類型必須與表定義一致源哩。

要求2:修改第6章中的查詢指令

操作目標

  1. 凡是查詢結(jié)果中有姓名的地方,其結(jié)果中應(yīng)包含自己的姓名鸦做。
  2. 凡是查詢結(jié)果中有課程名稱的地方励烦,其結(jié)果應(yīng)包含“數(shù)據(jù)庫原理與應(yīng)用”。

操作步驟:

  1. 理解修改需求:

    • 添加自己的姓名:在查詢結(jié)果中新增一列泼诱,顯示你的姓名坛掠。
    • 添加特定課程名稱:在查詢結(jié)果中新增一列,顯示“數(shù)據(jù)庫原理與應(yīng)用”治筒。
  2. 修改查詢語句:

    • 使用 AS 關(guān)鍵字為新列指定別名屉栓。
    • 使用常量值:在 SELECT 子句中添加常量字符串。
  3. 示例修改:

    原始查詢(例6.1):

    SELECT SNO, SNAME
    FROM S;
    

    修改后:

    SELECT SNO, SNAME, '張三' AS '我的姓名'
    FROM S;
    GO
    

    解釋

    • 添加了一列 '我的姓名'耸袜,其值為 '張三'友多,即你的姓名。
  4. 另一個例子(例6.33):

    原始查詢:

    SELECT S.SNO, S.SNAME, SC.CNO, C.CNAME, SC.GRADE
    FROM S
    JOIN SC ON S.SNO = SC.SNO AND SC.GRADE >= 90
    JOIN C ON SC.CNO = C.CNO;
    

    修改后:

    SELECT S.SNO, S.SNAME, '張三' AS '我的姓名', SC.CNO, '數(shù)據(jù)庫原理與應(yīng)用' AS 'CNAME', SC.GRADE
    FROM S
    JOIN SC ON S.SNO = SC.SNO AND SC.GRADE >= 90
    JOIN C ON SC.CNO = C.CNO;
    GO
    

    解釋

    • 添加了一列 '我的姓名'堤框,其值為 '張三'域滥。
    • CNAME 列的值修改為 '數(shù)據(jù)庫原理與應(yīng)用'
  5. 完整修改示例:

    假設(shè)你要修改例6.5:

    原始查詢:

    SELECT SNAME AS '姓名', YEAR(GETDATE()) - YEAR(BIRTHDATE) AS '年齡', LOWER(COLLEGE) AS '所在學(xué)院'
    FROM S;
    

    修改后:

    SELECT SNAME AS '姓名', YEAR(GETDATE()) - YEAR(BIRTHDATE) AS '年齡', LOWER(COLLEGE) AS '所在學(xué)院', '張三' AS '我的姓名'
    FROM S;
    GO
    

    解釋

    • 在結(jié)果中新增 '我的姓名' 列蜈抓,顯示 '張三'启绰。
  6. 注意事項:

  • 列名唯一性:確保新添加的列名與現(xiàn)有列名不沖突。
  • 常量值:添加的常量值應(yīng)符合查詢邏輯资昧,不影響數(shù)據(jù)分析酬土。
  • 查詢邏輯:修改后的查詢應(yīng)仍然滿足原有查詢的目的和邏輯。

五格带、總結(jié)與建議

通過以上詳細的步驟講解撤缴,你應(yīng)該能夠:

  • 熟練安裝和配置 SQL Server 2012 Express 及 SSMS。
  • 創(chuàng)建和管理數(shù)據(jù)庫及其文件叽唱。
  • 設(shè)計和修改數(shù)據(jù)表結(jié)構(gòu)屈呕。
  • 執(zhí)行基本的增刪改操作。
  • 編寫和修改復(fù)雜的 SQL 查詢棺亭,包括連接虎眨、子查詢、聚合函數(shù)等。
  • 根據(jù)特定要求調(diào)整查詢結(jié)果嗽桩。

建議:

  1. 動手實踐:

    • 通過實際操作來加深對 SQL 語句和數(shù)據(jù)庫管理的理解岳守。不要僅停留在閱讀,實際執(zhí)行每一步操作碌冶。
  2. 備份數(shù)據(jù):

    • 在進行刪除或修改操作之前湿痢,建議備份數(shù)據(jù)庫或相關(guān)表,以防止數(shù)據(jù)意外丟失扑庞。
  3. 理解約束:

    • 熟悉主鍵譬重、外鍵、檢查約束等數(shù)據(jù)庫約束的作用和使用方法罐氨,確保數(shù)據(jù)的完整性和一致性臀规。
  4. 優(yōu)化查詢:

    • 學(xué)習(xí)如何使用索引、優(yōu)化 SQL 語句栅隐,以提高查詢效率塔嬉。
  5. 參考文檔:

    • 利用微軟官方文檔和其他 SQL 學(xué)習(xí)資源,深入理解 SQL Server 的功能和最佳實踐约啊。
  6. 問題解決:

    • 遇到問題時邑遏,仔細閱讀錯誤信息,理解其原因恰矩。常見問題包括權(quán)限不足、路徑錯誤憎蛤、數(shù)據(jù)類型不匹配等外傅。
  7. 學(xué)習(xí) SQL 規(guī)范:

    • 遵循良好的 SQL 編碼規(guī)范,如使用縮進俩檬、注釋萎胰、明確的別名等,提升代碼可讀性和可維護性棚辽。
  8. 持續(xù)學(xué)習(xí):

    • SQL 和數(shù)據(jù)庫技術(shù)不斷發(fā)展技竟,保持學(xué)習(xí)新技術(shù)和新方法,提升自身技能屈藐。

附加資源


如果在完成作業(yè)過程中遇到任何問題榔组,歡迎隨時向我提問,我將盡力幫助你解決联逻。祝你學(xué)習(xí)順利搓扯,作業(yè)取得優(yōu)異的成績!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末包归,一起剝皮案震驚了整個濱河市锨推,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖换可,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椎椰,死亡現(xiàn)場離奇詭異,居然都是意外死亡沾鳄,警方通過查閱死者的電腦和手機慨飘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洞渔,“玉大人套媚,你說我怎么就攤上這事〈沤罚” “怎么了堤瘤?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浆熔。 經(jīng)常有香客問我本辐,道長,這世上最難降的妖魔是什么医增? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任慎皱,我火速辦了婚禮,結(jié)果婚禮上叶骨,老公的妹妹穿的比我還像新娘茫多。我一直安慰自己,他們只是感情好忽刽,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布天揖。 她就那樣靜靜地躺著,像睡著了一般跪帝。 火紅的嫁衣襯著肌膚如雪今膊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天伞剑,我揣著相機與錄音斑唬,去河邊找鬼。 笑死黎泣,一個胖子當著我的面吹牛恕刘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聘裁,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雪营,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衡便?” 一聲冷哼從身側(cè)響起献起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洋访,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谴餐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姻政,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年岂嗓,在試婚紗的時候發(fā)現(xiàn)自己被綠了躲惰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片端三。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝠引,到底是詐尸還是另有隱情怜俐,我是刑警寧澤梳杏,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布容贝,位于F島的核電站,受9級特大地震影響楼眷,放射性物質(zhì)發(fā)生泄漏铲汪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一罐柳、第九天 我趴在偏房一處隱蔽的房頂上張望掌腰。 院中可真熱鬧,春花似錦张吉、人聲如沸齿梁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽士飒。三九已至,卻和暖如春蔗崎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扰藕。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工缓苛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邓深。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓未桥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芥备。 傳聞我的和親對象是個殘疾皇子冬耿,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355