目錄
一旗们、環(huán)境準備
在開始完成作業(yè)之前沪羔,需要確保你的計算機上已經(jīng)安裝并配置好必要的軟件针饥。以下是詳細的步驟:
1.1 安裝 SQL Server 2012 Express
步驟:
-
下載 SQL Server 2012 Express:
- 訪問微軟官方下載頁面:Download SQL Server 2012 Express
- 或者使用你提供的百度網(wǎng)盤鏈接:SQL SERVER 2012 SP1(提取碼:vfbx)
-
運行安裝程序:
- 雙擊下載的安裝包鲜屏,開始安裝泄鹏。
- 在安裝向?qū)е羞x擇“新建安裝或向現(xiàn)有安裝添加功能”饿这。
-
選擇安裝類型:
- 選擇“基本安裝”以使用默認設(shè)置坯屿,或者“自定義安裝”以自定義安裝路徑和功能淹真。
- 建議:選擇“基本安裝”即可滿足大部分需求抓韩。
-
完成安裝:
- 按照向?qū)崾就瓿砂惭b過程纠永,安裝完成后,你將看到安裝成功的提示谒拴。
1.2 安裝 SQL Server Management Studio (SSMS)
步驟:
-
下載 SSMS:
- 訪問微軟的下載頁面:SSMS 下載頁面
- 點擊“下載 SQL Server Management Studio”按鈕尝江,下載安裝包。
-
運行安裝程序:
- 雙擊下載的安裝包英上,開始安裝炭序。
- 按照向?qū)崾就瓿砂惭b過程啤覆。
-
啟動 SSMS:
- 安裝完成后,在“開始”菜單中找到“SQL Server Management Studio”惭聂,點擊啟動窗声。
1.3 配置并連接到 SQL Server
步驟:
-
啟動 SSMS:
- 打開“SQL Server Management Studio”。
-
連接到服務(wù)器:
服務(wù)器類型:Database Engine
服務(wù)器名稱:本地服務(wù)器可以使用
(local)
,localhost
, 或者.
(點號)-
身份驗證:
- Windows Authentication:使用當前 Windows 用戶登錄辜纲。
- SQL Server Authentication:如果在安裝時設(shè)置了 SQL Server 賬戶笨觅,使用對應(yīng)的用戶名和密碼。
建議:默認情況下耕腾,使用 Windows Authentication 即可见剩。
-
點擊“連接”按鈕:
- 成功連接后,你將在左側(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%);
操作步驟:
打開 SSMS 并連接到 SQL Server。
-
新建查詢窗口:
- 點擊工具欄上的“新建查詢”按鈕没炒,打開一個新的查詢編輯器窗口涛癌。
-
切換到 master 數(shù)據(jù)庫:
- 在查詢編輯器中輸入:
USE master; GO
-
解釋:在創(chuàng)建新數(shù)據(jù)庫之前,首先需要切換到系統(tǒng)數(shù)據(jù)庫
master
送火。
- 在查詢編輯器中輸入:
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
CREATE DATABASE
語句粘貼到查詢編輯器中拳话。 - 點擊“執(zhí)行”按鈕(或按
F5
鍵)運行腳本。
- 將上述
-
驗證數(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)限恩闻。
-
文件大小單位:在
SIZE
和FILEGROWTH
參數(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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕翅楼。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
以切換到目標數(shù)據(jù)庫。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
ALTER DATABASE
語句粘貼到查詢編輯器中真慢。 - 點擊“執(zhí)行”按鈕(或按
F5
鍵)犁嗅。
- 將上述
-
驗證文件大小修改:
- 在“對象資源管理器”中,展開
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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕扰楼。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
ALTER DATABASE
語句粘貼到查詢編輯器中美浦。 - 點擊“執(zhí)行”按鈕弦赖。
- 將上述
-
驗證文件添加:
- 在“對象資源管理器”中,展開
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
操作步驟:
-
確保文件為空:
- 在移除文件之前旦装,必須確保該文件中沒有任何數(shù)據(jù)√希可以將數(shù)據(jù)遷移到其他數(shù)據(jù)文件阴绢,或者刪除表和索引以釋放空間。
-
示例:
USE JXGL; GO ALTER DATABASE JXGL REMOVE FILE JXGL_1; GO
- 如果文件中有數(shù)據(jù)惭载,SQL Server 將無法移除文件旱函,并提示錯誤。
-
新建查詢窗口:
- 點擊“新建查詢”按鈕描滔。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
棒妨。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
ALTER DATABASE
語句粘貼到查詢編輯器中。 - 點擊“執(zhí)行”按鈕。
- 將上述
-
驗證文件移除:
- 在“對象資源管理器”中券腔,展開
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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕参滴。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
CREATE TABLE
語句粘貼到查詢編輯器中锻弓。 - 點擊“執(zhí)行”按鈕砾赔。
- 將上述
-
驗證表創(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ù)字。
-
- 數(shù)據(jù)類型:
-
SNAME:
- 數(shù)據(jù)類型:
nchar(8)
- 約束:
NOT NULL
贷币,不允許為空击胜。
- 數(shù)據(jù)類型:
-
SEX:
- 數(shù)據(jù)類型:
nchar(1)
- 約束:
NULL
,允許為空役纹。
- 數(shù)據(jù)類型:
-
AGE:
- 數(shù)據(jù)類型:
SMALLINT
- 約束:
NULL
偶摔,允許為空。
- 數(shù)據(jù)類型:
-
COLLEGE:
- 數(shù)據(jù)類型:
nchar(20)
- 約束:
NULL
促脉,允許為空辰斋。
- 數(shù)據(jù)類型:
注意事項:
-
主鍵唯一性:
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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
毅贮。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
ALTER TABLE
語句粘貼到查詢編輯器中办悟。 - 點擊“執(zhí)行”按鈕。
- 將上述
-
驗證列修改:
- 在“對象資源管理器”中滩褥,展開
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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕苛蒲。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
卤橄。
- 輸入
-
粘貼并執(zhí)行刪除列的 SQL 語句:
- 將
ALTER TABLE S DROP COLUMN BIRTHDATE; GO
語句粘貼到查詢編輯器中。 - 點擊“執(zhí)行”按鈕臂外。
- 將
-
粘貼并執(zhí)行添加列的 SQL 語句:
- 將
ALTER TABLE S ADD AGE SMALLINT; GO
語句粘貼到查詢編輯器中窟扑。 - 點擊“執(zhí)行”按鈕。
- 將
-
驗證列修改:
- 在“對象資源管理器”中漏健,右鍵點擊
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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕玄组。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
ALTER TABLE
語句粘貼到查詢編輯器中。 - 點擊“執(zhí)行”按鈕巧勤。
- 將上述
-
驗證約束刪除:
- 在“對象資源管理器”中嵌灰,展開
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
操作步驟:
-
備份數(shù)據(jù)(可選):
- 在刪除表之前,建議備份數(shù)據(jù)以防止數(shù)據(jù)丟失枝缔。
-
示例:
SELECT * INTO S_Backup FROM S; GO
-
新建查詢窗口:
- 點擊“新建查詢”按鈕布疙。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
DROP TABLE
語句粘貼到查詢編輯器中愿卸。 - 點擊“執(zhí)行”按鈕灵临。
- 將上述
-
驗證表刪除:
- 在“對象資源管理器”中,展開
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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕孵淘。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
锌唾。
- 輸入
-
選擇插入方法并粘貼 SQL 語句:
- 方法一更為推薦,因為明確指定列名可以避免由于列順序變化導(dǎo)致的問題夺英。
- 將上述其中一個
INSERT INTO
語句粘貼到查詢編輯器中晌涕。
-
點擊“執(zhí)行”按鈕:
- 運行插入操作。
-
驗證數(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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕甸昏。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
UPDATE
語句粘貼到查詢編輯器中徐许。 - 點擊“執(zhí)行”按鈕施蜜。
- 將上述
-
驗證數(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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
县恕。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
DELETE
語句粘貼到查詢編輯器中东羹。 - 點擊“執(zhí)行”按鈕。
- 將上述
-
驗證數(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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕袱箱。
-
切換到
JXGL
數(shù)據(jù)庫:- 輸入
USE JXGL; GO
。
- 輸入
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
TRUNCATE TABLE
語句粘貼到查詢編輯器中义矛。 - 點擊“執(zhí)行”按鈕发笔。
- 將上述
-
驗證數(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
操作步驟:
-
新建查詢窗口:
- 點擊“新建查詢”按鈕鳍烁。
-
粘貼并執(zhí)行 SQL 語句:
- 將上述
SELECT
語句粘貼到查詢編輯器中。 - 點擊“執(zhí)行”按鈕繁扎。
- 將上述
-
查看查詢結(jié)果:
- 查詢結(jié)果將在下方的“結(jié)果”窗格中顯示幔荒,包含
SNO
和SNAME
兩列。
- 查詢結(jié)果將在下方的“結(jié)果”窗格中顯示幔荒,包含
示例輸出:
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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句提澎。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNAME
卫键、SNO
和COLLEGE
三列。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口莉炉。
粘貼并執(zhí)行 SQL 語句钓账。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含表
S
的所有列:SNO
、SNAME
絮宁、SEX
梆暮、AGE
和COLLEGE
。
- 查詢結(jié)果將包含表
示例輸出:
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
操作步驟:
新建查詢窗口啦粹。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNAME
和計算出的AGE
兩列窘游。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口艾蓝。
粘貼并執(zhí)行 SQL 語句力崇。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
姓名
、年齡
和所在學(xué)院
三列赢织,其中所在學(xué)院
將以小寫顯示亮靴。
- 查詢結(jié)果將包含
示例輸出:
姓名 | 年齡 | 所在學(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
操作步驟:
新建查詢窗口八毯。
粘貼并執(zhí)行 SQL 語句搓侄。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNO
列,每個學(xué)號只出現(xiàn)一次宪彩。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句筹麸。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含所有
COLLEGE
為CS
的學(xué)生姓名活合。
- 查詢結(jié)果將包含所有
示例輸出:
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
操作步驟:
新建查詢窗口白指。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
姓名
和年齡
酵紫,僅顯示AGE < 20
的學(xué)生告嘲。
- 查詢結(jié)果將包含
示例輸出:
姓名 | 年齡 |
---|---|
孫曉 | 19 |
... | ... |
注意事項:
- 精確性:如前所述错维,該方法僅按年份計算年齡,未考慮具體日期橄唬。
6.9 例6.9:使用子查詢
目標:查詢成績低于60分的學(xué)生學(xué)號赋焕。
SQL 語句:
USE JXGL;
GO
SELECT DISTINCT SNO
FROM SC
WHERE GRADE < 60;
GO
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句仰楚。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNO
列隆判,顯示成績低于60分的學(xué)生學(xué)號。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口咬腕。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNAME
笆豁、COLLEGE
和BIRTHDATE
郎汪,僅顯示出生日期在指定范圍內(nèi)的學(xué)生。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口照筑。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNAME
瘦陈、COLLEGE
和AGE
凝危,僅顯示年齡不在20到23歲之間的學(xué)生。
- 查詢結(jié)果將包含
示例輸出:
SNAME | COLLEGE | 年齡 |
---|---|---|
孫曉 | CS | 19 |
吳剛 | IS | 25 |
... | ... | ... |
注意事項:
-
邏輯運算:
NOT BETWEEN
用于排除指定范圍內(nèi)的值晨逝。
6.12 例6.12:IN 子句查詢
目標:查詢學(xué)院為 CS
蛾默、MA
或 IS
的學(xué)生姓名和性別。
SQL 語句:
USE JXGL;
GO
SELECT SNAME, SEX
FROM S
WHERE COLLEGE IN ('CS', 'MA', 'IS');
GO
操作步驟:
新建查詢窗口捉貌。
粘貼并執(zhí)行 SQL 語句支鸡。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNAME
和SEX
,僅顯示COLLEGE
為CS
趁窃、MA
或IS
的學(xué)生牧挣。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行
LIKE
語句刨摩。-
查看查詢結(jié)果:
- 查詢結(jié)果將包含所有
SNO
以S3
開頭的學(xué)生記錄寺晌。
- 查詢結(jié)果將包含所有
示例輸出:
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
操作步驟:
新建查詢窗口边篮。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNAME
奏甫、SNO
和SEX
戈轿,僅顯示SNAME
以李
開頭的學(xué)生。
- 查詢結(jié)果將包含
示例輸出:
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
操作步驟:
新建查詢窗口挠进。
粘貼并執(zhí)行 SQL 語句色乾。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNO
和CNO
,僅顯示GRADE
為空的記錄领突。
- 查詢結(jié)果將包含
示例輸出:
SNO | CNO |
---|---|
S04 | C1 |
... | ... |
注意事項:
-
空值判斷:在 SQL 中暖璧,
NULL
值需要使用IS NULL
或IS NOT NULL
來判斷,不能使用=
或<>
運算符君旦。
6.16 例6.16:非空值查詢
目標:查詢成績 (GRADE
) 不為空的學(xué)生學(xué)號和課程號澎办。
SQL 語句:
USE JXGL;
GO
SELECT SNO, CNO
FROM SC
WHERE GRADE IS NOT NULL;
GO
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句金砍。
-
查看查詢結(jié)果:
- 查詢結(jié)果將包含
SNO
和CNO
局蚀,僅顯示GRADE
不為空的記錄。
- 查詢結(jié)果將包含
示例輸出:
SNO | CNO |
---|---|
S01 | C1 |
S01 | C2 |
... | ... |
注意事項:
-
空值判斷:使用
IS NOT NULL
來篩選非空值記錄恕稠。
6.17 例6.17:組合條件查詢
目標:
- 查詢學(xué)院為
CS
且出生日期在1997年9月1日之前的學(xué)生姓名和出生日期琅绅。 - 查詢學(xué)院為
CS
、MA
或IS
的學(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
操作步驟:
新建查詢窗口千扶。
粘貼并執(zhí)行第一部分 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
SNAME
和BIRTHDATE
昆著,僅包含符合條件的學(xué)生县貌。
- 結(jié)果將顯示
粘貼并執(zhí)行第二部分 SQL 語句术陶。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
SNAME
和SEX
凑懂,僅包含COLLEGE
為CS
、MA
或IS
的學(xué)生梧宫。
- 結(jié)果將顯示
示例輸出:
第一部分:
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
操作步驟:
新建查詢窗口扫夜。
粘貼并執(zhí)行 SQL 語句楞泼。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
SNO
和GRADE
,按GRADE
降序排列笤闯。
- 結(jié)果將顯示
示例輸出:
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
操作步驟:
新建查詢窗口浦马。
粘貼并執(zhí)行 SQL 語句时呀。
-
查看查詢結(jié)果:
- 結(jié)果將包含所有列,并按
COLLEGE
升序排列晶默,COLLEGE
相同的記錄按BIRTHDATE
降序排列谨娜。
- 結(jié)果將包含所有列,并按
示例輸出:
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
操作步驟:
新建查詢窗口仅政。
粘貼并執(zhí)行 SQL 語句垢油。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
性別
和人數(shù)
,表示每種性別的人數(shù)統(tǒng)計圆丹。
- 結(jié)果將顯示
示例輸出:
性別 | 人數(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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句倦微。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
課程號
和人數(shù)
妻味,表示每門課程有成績記錄的學(xué)生人數(shù)。
- 結(jié)果將顯示
示例輸出:
課程號 | 人數(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
操作步驟:
新建查詢窗口嘉裤。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
課程號
和人數(shù)
栖博,僅包含選修人數(shù) ≥ 8 的課程屑宠。
- 結(jié)果將顯示
示例輸出:
課程號 | 人數(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
操作步驟:
新建查詢窗口丧叽。
粘貼并執(zhí)行 SQL 語句秋柄。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
SNO
,僅包含選修課程數(shù)超過4門的學(xué)生學(xué)號蠢正。
- 結(jié)果將顯示
示例輸出:
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
操作步驟:
新建查詢窗口嚣崭。
粘貼并執(zhí)行 SQL 語句笨触。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
SNO
和GRADE
,僅包含成績最高的前三名學(xué)生雹舀。
- 結(jié)果將顯示
示例輸出:
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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句签财。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
學(xué)號
和總分
串慰,僅包含總分前20%的學(xué)生。
- 結(jié)果將顯示
示例輸出:
學(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
操作步驟:
新建查詢窗口屁魏。
粘貼并執(zhí)行 SQL 語句滔以。
-
查看新表創(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 操作
目標:查詢同時選修課程 C2
和 C4
的學(xué)生學(xué)號。
SQL 語句:
USE JXGL;
GO
SELECT SNO
FROM SC
WHERE CNO = 'C2'
UNION
SELECT SNO
FROM SC
WHERE CNO = 'C4';
GO
操作步驟:
新建查詢窗口宪摧。
粘貼并執(zhí)行 SQL 語句粒竖。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有選修
C2
或C4
課程的學(xué)生學(xué)號,且不重復(fù)几于。
- 結(jié)果將顯示所有選修
示例輸出:
SNO |
---|
S02 |
S04 |
S05 |
... |
注意事項:
- UNION:用于合并兩個查詢結(jié)果蕊苗,自動去除重復(fù)記錄。
-
UNION ALL:如果需要保留重復(fù)記錄沿彭,可以使用
UNION ALL
朽砰。
6.28 例6.28:INTERSECT 操作
目標:查詢同時選修課程 C1
和 C2
的學(xué)生學(xué)號。
SQL 語句:
USE JXGL;
GO
SELECT SNO
FROM SC
WHERE CNO = 'C1'
INTERSECT
SELECT SNO
FROM SC
WHERE CNO = 'C2';
GO
操作步驟:
新建查詢窗口喉刘。
粘貼并執(zhí)行 SQL 語句瞧柔。
-
查看查詢結(jié)果:
- 結(jié)果將顯示同時選修
C1
和C2
課程的學(xué)生學(xué)號。
- 結(jié)果將顯示同時選修
示例輸出:
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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句哥蔚。
-
查看查詢結(jié)果:
- 結(jié)果將顯示選修
C1
但未選修C3
的學(xué)生學(xué)號。
- 結(jié)果將顯示選修
示例輸出:
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
操作步驟:
新建查詢窗口牵祟。
粘貼并執(zhí)行 SQL 語句倍靡。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有選課的學(xué)生信息,包括
S
表和SC
表的所有列课舍。
- 結(jié)果將顯示所有選課的學(xué)生信息,包括
示例輸出:
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
操作步驟:
新建查詢窗口站辉。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示
CNO
和對應(yīng)的AVERAGE
(平均成績)。
- 結(jié)果將顯示
示例輸出:
CNO | AVERAGE |
---|---|
C1 | 85.0 |
C4 | 80.5 |
... | ... |
注意事項:
-
聚合函數(shù):
AVG(SC.GRADE)
計算每門課程的平均成績饰剥。 - ROUND 函數(shù):用于將平均成績四舍五入到一位小數(shù)殊霞。
- GROUP BY:按課程號分組,以計算每組的平均成績汰蓉。
6.32 例6.32:自連接查詢
目標:查詢選修課程 C4
且成績高于學(xué)生 S03
在 C4
課程中成績的其他學(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
操作步驟:
-
確定學(xué)生 S03 在 C4 課程中的成績:
- 可以先運行以下查詢祝钢,查看
S03
在C4
課程中的成績。USE JXGL; GO SELECT GRADE FROM SC WHERE SNO = 'S03' AND CNO = 'C4'; GO
- 可以先運行以下查詢祝钢,查看
新建查詢窗口若厚。
-
粘貼并執(zhí)行自連接 SQL 語句:
- 上述
SELECT
語句用于查找成績高于S03
在C4
課程中的成績的其他學(xué)生拦英。
- 上述
-
查看查詢結(jié)果:
- 結(jié)果將顯示符合條件的學(xué)生學(xué)號 (
SNO
)、課程號 (CNO
) 和成績 (GRADE
)测秸,并按成績降序排列疤估。
- 結(jié)果將顯示符合條件的學(xué)生學(xué)號 (
示例輸出:
SNO | CNO | GRADE |
---|---|---|
S08 | C4 | 85 |
... | ... | ... |
注意事項:
-
自連接:表
SC
被別名為a
和b
,用于比較不同記錄霎冯。 -
條件組合:確保
S03
在C4
課程中的成績已確定做裙,以便準確比較。
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
操作步驟:
新建查詢窗口拧廊。
粘貼并執(zhí)行任一 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示符合條件的學(xué)生學(xué)號 (
SNO
)晋修、姓名 (SNAME
)吧碾、課程號 (CNO
)、課程名 (CNAME
) 和成績 (GRADE
)墓卦。
- 結(jié)果將顯示符合條件的學(xué)生學(xué)號 (
示例輸出:
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
操作步驟:
新建查詢窗口呢堰。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有學(xué)生的信息凡泣,包括那些未選課的學(xué)生枉疼,其
CNO
和GRADE
可能為NULL
皮假。
- 結(jié)果將顯示所有學(xué)生的信息凡泣,包括那些未選課的學(xué)生枉疼,其
示例輸出:
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
操作步驟:
新建查詢窗口滑黔。
粘貼并執(zhí)行 SQL 語句略荡。
-
查看查詢結(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
操作步驟:
新建查詢窗口臼氨。
選擇方法一或方法二掺喻,粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有選修
C3
課程的學(xué)生姓名和學(xué)院腊状。
- 結(jié)果將顯示所有選修
示例輸出:
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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有至少有一門課程成績大于80分的學(xué)生信息泛释。
示例輸出:
SNO | SNAME | COLLEGE |
---|---|---|
S01 | 張麗 | CS |
S02 | 王中橋 | MA |
... | ... | ... |
注意事項:
- ANY 操作:用于比較主查詢中的值是否與子查詢返回的任一值匹配。
-
邏輯理解:確保理解
ANY
與ALL
、SOME
的區(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
操作步驟:
新建查詢窗口饭玲。
選擇方法一或方法二,粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示符合條件的學(xué)生姓名和年齡。
示例輸出:
SNAME | AGE |
---|---|
李華 | 22 |
... | ... |
注意事項:
-
SOME 與 ANY:
SOME
與ANY
功能相同,用于比較是否滿足子查詢中的任一條件。 -
子查詢中的聚合函數(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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句。
-
查看查詢結(jié)果:
- 結(jié)果將顯示每個學(xué)生在其選修課程中冬阳,成績高于或等于其平均成績的課程信息刑顺。
示例輸出:
SNO | CNO | GRADE |
---|---|---|
S01 | C1 | 85 |
S02 | C1 | 90 |
S02 | C3 | 88 |
... | ... | ... |
注意事項:
-
別名使用:
AS a
和AS 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
操作步驟:
新建查詢窗口。
粘貼并執(zhí)行 SQL 語句学密。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有選修
C2
課程的學(xué)生姓名哭靖。
- 結(jié)果將顯示所有選修
示例輸出:
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
操作步驟:
新建查詢窗口垫蛆。
粘貼并執(zhí)行 SQL 語句虑乖。
-
查看查詢結(jié)果:
- 結(jié)果將顯示所有
COLLEGE
為CS
且未選修C4
課程的學(xué)生學(xué)號和姓名。
- 結(jié)果將顯示所有
示例輸出:
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
操作步驟:
新建查詢窗口。
-
粘貼并執(zhí)行創(chuàng)建表的 SQL 語句:
- 包含
CREATE TABLE
語句,創(chuàng)建COLL_AGE
表追驴。
- 包含
-
粘貼并執(zhí)行插入數(shù)據(jù)的 SQL 語句:
- 使用
INSERT INTO ... SELECT
語句丙曙,將每個學(xué)院的平均年齡插入到COLL_AGE
表中。
- 使用
-
驗證新表和數(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
操作步驟:
新建查詢窗口。
-
粘貼并執(zhí)行 SQL 語句:
- 該語句刪除所有
SC
表中對應(yīng)S
表中COLLEGE
為CS
的記錄。
- 該語句刪除所有
-
查看刪除結(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
操作步驟:
新建查詢窗口憾朴。
-
粘貼并執(zhí)行 SQL 語句:
- 該語句為符合條件的
SC
表記錄的GRADE
增加5%芦圾。
- 該語句為符合條件的
-
查看更新結(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)信息棋恼。
操作步驟:
-
確定插入或更新方式:
- 插入新記錄:如果你是新學(xué)生返弹,可以插入一條新的記錄。
- 更新現(xiàn)有記錄:如果已有記錄爪飘,可以更新其中一條記錄义起。
-
插入新記錄的 SQL 語句:
示例:
USE JXGL; GO INSERT INTO S (SNO, SNAME, SEX, AGE, COLLEGE) VALUES ('S99', '張三', '男', 22, 'CS'); GO
步驟:
- 新建查詢窗口。
- 粘貼并執(zhí)行上述
INSERT
語句师崎。 -
驗證插入:
- 右鍵點擊
S
表默终,選擇“選擇前1000行”,確認新記錄是否已插入。
- 右鍵點擊
-
更新現(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章中的查詢指令
操作目標:
- 凡是查詢結(jié)果中有姓名的地方,其結(jié)果中應(yīng)包含自己的姓名鸦做。
- 凡是查詢結(jié)果中有課程名稱的地方励烦,其結(jié)果應(yīng)包含“數(shù)據(jù)庫原理與應(yīng)用”。
操作步驟:
-
理解修改需求:
- 添加自己的姓名:在查詢結(jié)果中新增一列泼诱,顯示你的姓名坛掠。
- 添加特定課程名稱:在查詢結(jié)果中新增一列,顯示“數(shù)據(jù)庫原理與應(yīng)用”治筒。
-
修改查詢語句:
-
使用
AS
關(guān)鍵字為新列指定別名屉栓。 -
使用常量值:在
SELECT
子句中添加常量字符串。
-
使用
-
示例修改:
原始查詢(例6.1):
SELECT SNO, SNAME FROM S;
修改后:
SELECT SNO, SNAME, '張三' AS '我的姓名' FROM S; GO
解釋:
- 添加了一列
'我的姓名'
耸袜,其值為'張三'
友多,即你的姓名。
- 添加了一列
-
另一個例子(例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)用'
。
- 添加了一列
-
完整修改示例:
假設(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é)果中新增
'我的姓名'
列蜈抓,顯示'張三'
启绰。
- 在結(jié)果中新增
注意事項:
- 列名唯一性:確保新添加的列名與現(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é)果嗽桩。
建議:
-
動手實踐:
- 通過實際操作來加深對 SQL 語句和數(shù)據(jù)庫管理的理解岳守。不要僅停留在閱讀,實際執(zhí)行每一步操作碌冶。
-
備份數(shù)據(jù):
- 在進行刪除或修改操作之前湿痢,建議備份數(shù)據(jù)庫或相關(guān)表,以防止數(shù)據(jù)意外丟失扑庞。
-
理解約束:
- 熟悉主鍵譬重、外鍵、檢查約束等數(shù)據(jù)庫約束的作用和使用方法罐氨,確保數(shù)據(jù)的完整性和一致性臀规。
-
優(yōu)化查詢:
- 學(xué)習(xí)如何使用索引、優(yōu)化 SQL 語句栅隐,以提高查詢效率塔嬉。
-
參考文檔:
- 利用微軟官方文檔和其他 SQL 學(xué)習(xí)資源,深入理解 SQL Server 的功能和最佳實踐约啊。
-
問題解決:
- 遇到問題時邑遏,仔細閱讀錯誤信息,理解其原因恰矩。常見問題包括權(quán)限不足、路徑錯誤憎蛤、數(shù)據(jù)類型不匹配等外傅。
-
學(xué)習(xí) SQL 規(guī)范:
- 遵循良好的 SQL 編碼規(guī)范,如使用縮進俩檬、注釋萎胰、明確的別名等,提升代碼可讀性和可維護性棚辽。
-
持續(xù)學(xué)習(xí):
- SQL 和數(shù)據(jù)庫技術(shù)不斷發(fā)展技竟,保持學(xué)習(xí)新技術(shù)和新方法,提升自身技能屈藐。
附加資源
- 微軟 SQL Server 官方文檔:SQL Server Documentation
- SQL 教程網(wǎng)站:W3Schools SQL 教程
-
SQL 書籍推薦:
- 《SQL 必知必會》
- 《SQL Server 實戰(zhàn)》
如果在完成作業(yè)過程中遇到任何問題榔组,歡迎隨時向我提問,我將盡力幫助你解決联逻。祝你學(xué)習(xí)順利搓扯,作業(yè)取得優(yōu)異的成績!