【数据库原理及应用】——基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(学习笔记)
📖 前言:SQL中常用的數(shù)據(jù)更新操作也成為數(shù)據(jù)操作或數(shù)據(jù)操縱,包括插入數(shù)據(jù)、刪除數(shù)據(jù)和修改數(shù)據(jù)三個(gè)方面的功能。
視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。視圖在數(shù)據(jù)庫(kù)中并不是以數(shù)值存儲(chǔ)集形式存在,除非是索引視圖。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。對(duì)其中所引用的基礎(chǔ)表來說,視圖的作用類似于篩選。
目錄
- 🕒 0. 思維導(dǎo)圖
- 🕒 1. 基本表更新TABLE
- 🕘 1.1 插入數(shù)據(jù)(INSERT INTO)
- 🕤 1.1.1 插入元組
- 🕤 1.1.2 插入子查詢結(jié)果
- 🕘 1.2 修改數(shù)據(jù)(UPDATE SET)
- 🕘 1.3 刪除數(shù)據(jù)(DELETE)
- 🕒 2. 視圖VIEW
- 🕘 2.1 定義視圖
- 🕘 2.2 查詢視圖
- 🕘 2.3 更新視圖
- 🕘 2.4 修改視圖
- 🕘 2.5 刪除視圖
- 🕘 2.6 擴(kuò)充:基于派生表的查詢
- 🕒 3. 課后習(xí)題
🕒 0. 思維導(dǎo)圖
🕒 1. 基本表更新TABLE
🕘 1.1 插入數(shù)據(jù)(INSERT INTO)
可以一次插入多個(gè)元組
🕤 1.1.1 插入元組
語句格式:
INSERTINTO <表名> [(<屬性列1>[,<屬性列2 >…)]VALUES (<常量1> [,<常量2>] … )功能:將新元組插入指定表中
INTO子句
- 屬性列的順序可與表定義中的順序不一致
- 沒有指定屬性列
- 指定部分屬性列
VALUES子句
- 提供的值必須與INTO子句匹配
- 值的個(gè)數(shù)
- 值的類型
注意:DBMS在執(zhí)行插入語句時(shí)會(huì)檢查所插元組是否破壞表上已定義的完整性規(guī)則,包括
- 實(shí)體完整性
- 參照完整性
- 用戶定義的完整性
- NOT NULL約束
- UNIQUE約束
- 值域約束
例1:將一個(gè)新學(xué)生記錄(學(xué)號(hào)Sno:20211025;姓名Sname:育銳;性別Ssex:男;年齡Sage:20;專業(yè)名Smajor:網(wǎng)絡(luò)工程;籍貫Shometown:廣東揭陽)插入Student表中。
INSERT INTO Student (Sno, Smajor, Shometown, Sname, Ssex, Sage) VALUES ('20211025', '網(wǎng)絡(luò)工程', '廣東揭陽', '育銳', '男',20);在上例中,屬性列表的順序與表結(jié)構(gòu)中的順序不一致,因此不能省略INTO子句中的屬性列表,但是若此例表示為:
INSERT INTO Student (Sno,Sname,Ssex, Sage,Smajor Shometown, ) VALUES ('20211025', '育銳', '男',10,'網(wǎng)絡(luò)工程', '廣東揭陽');則該語句可簡(jiǎn)寫為:
INSERT INTO STUDENT VALUES ('20211025', '育銳', '男',10,'網(wǎng)絡(luò)工程', '廣東揭陽');例2:插入課程(課程號(hào)Cno:‘1000’, 課程名Cname:‘線性代數(shù)’, 無先修課程,學(xué)分Ccredit:1.5)。
INSERT INTO Course(Cno, Cname, Cpno, Ccredit) VALUES ('1000', '線性代數(shù)', NULL, 1.5);🕤 1.1.2 插入子查詢結(jié)果
語句格式:
INSERTINTO <表名> [(<屬性列1>[,<屬性列2 >…)]子查詢;功能:將子查詢結(jié)果插入指定表中
INTO子句(與插入元組類似)
子查詢
- SELECT子句目標(biāo)列必須與INTO子句匹配
- 值的個(gè)數(shù)
- 值的類型
例3:在數(shù)據(jù)庫(kù)新建一個(gè)表,存放STUDENT表中各專業(yè)的學(xué)生人數(shù)。
首先在數(shù)據(jù)庫(kù)中新建一張表,存放各專業(yè)的名稱及學(xué)生人數(shù)。
然后求得各專業(yè)的人數(shù)并插入新建的表中。
INSERT INTO Major_num SELECT Smajor,count(Sno) /*不能用sum*/ FROM STUDENT GROUP BY Smajor;專業(yè)名?人數(shù)?1計(jì)算機(jī)科學(xué)與技術(shù)42軟件工程43網(wǎng)絡(luò)工程5\begin{array}{|l|l|l|} \hline & \text { 專業(yè)名 } & \text { 人數(shù) } \\ \hline 1 & 計(jì)算機(jī)科學(xué)與技術(shù) & 4 \\ \hline 2 & 軟件工程 & 4 \\ \hline 3 & 網(wǎng)絡(luò)工程 & 5 \\ \hline \end{array}123??專業(yè)名?計(jì)算機(jī)科學(xué)與技術(shù)軟件工程網(wǎng)絡(luò)工程??人數(shù)?445??
🕘 1.2 修改數(shù)據(jù)(UPDATE SET)
語句格式:
UPDATE <表名> SET <列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]… [WHERE <條件>];功能:修改指定表中滿足WHERE子句條件的元組
SET子句
- 指定修改方式
- 要修改的列
- 修改后取值
WHERE子句
- 指定要修改的元組
- 缺省表示要修改表中的所有元組
三種修改方式
- 修改某些元組的值(有where子句)
- 修改表中全部的值(無where子句)
- 帶子查詢的修改語句
注意:DBMS在執(zhí)行修改語句時(shí)會(huì)檢查所修改元組是否破壞表上已定義的完整性規(guī)則,包括
- 實(shí)體完整性
- 一些DBMS規(guī)定主碼不允許修改
- 用戶定義的完整性
- NOT NULL約束
- UNIQUE約束
- 值域約束
例4:【帶子查詢的修改】:
將SC表中“計(jì)算機(jī)科學(xué)與技術(shù)”專業(yè)的所有的學(xué)生成績(jī)?cè)黾?分。
🕘 1.3 刪除數(shù)據(jù)(DELETE)
語句格式:
DELETEFROM <表名>[WHERE <條件>];功能:刪除指定表中滿足WHERE子句條件的元組
WHERE子句
- 指定要?jiǎng)h除的元組
- 缺省表示要?jiǎng)h除表中的全部元組,表的定義仍在字典中
注意:DROP是直接刪除整個(gè)表
DBMS在執(zhí)行刪除語句時(shí),會(huì)檢查所刪元組是否破壞表上已定義的完整性規(guī)則。
- 參照完整性
- 不允許刪除
- 級(jí)聯(lián)刪除(詳見第4章 完整性,后續(xù)會(huì)介紹)
三種刪除方式
- 刪除某個(gè)(某些)元組的值
- 刪除多個(gè)元組的值
- 帶子查詢的刪除語句
例5:【帶子查詢的修改】:
在SC表中刪除“計(jì)算機(jī)科學(xué)與技術(shù)”專業(yè)的所有學(xué)生的選課信息。
🕒 2. 視圖VIEW
視圖的特點(diǎn)
- 虛表,是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表
- 只存放視圖的定義,不存放視圖對(duì)應(yīng)的數(shù)據(jù)
- 基表中的數(shù)據(jù)發(fā)生變化,從視圖中查詢出的數(shù)據(jù)也隨之改變
視圖的作用(優(yōu)點(diǎn)):
- 視圖能夠簡(jiǎn)化用戶觀點(diǎn)
- 視圖使用戶能以多種角度看待同一數(shù)據(jù)
- 視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性(視圖是外模式的一種)
- 視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
- 適當(dāng)?shù)睦靡晥D可以更清晰的表達(dá)查詢
基于視圖的操作:查詢、刪除、受限更新、定義基于該視圖的新視圖
視圖的UPDATE、DELETE、INSERT INTO(有受限),數(shù)據(jù)更新與基本表同步。
? 轉(zhuǎn)載請(qǐng)注明出處
作者:HinsCoder
博客鏈接:🔎 作者博客主頁
🕘 2.1 定義視圖
語句格式:
CREATE VIEW <視圖名> [(<列名> [,<列名>]…)][WITH ENCRYPTION];AS <子查詢>[WITH CHECK OPTION];組成視圖的屬性列名:全部省略或全部指定
- 省略視圖的各個(gè)屬性列名,則隱含該視圖由子查詢中的select子句目標(biāo)列中的諸字段組成。
- 必須明確指定組成視圖的所有列名的情形:
- 某個(gè)目標(biāo)列不是單純的屬性名,而是集函數(shù)或列表達(dá)式(但實(shí)際并非如此,詳見例8寫法2);
- 需要在視圖中為某個(gè)列啟用新的更合適的名字。
子查詢:
- 通常不允許含有ORDER BY子句和DISTINCT(SQL Server中允許)短語
With check option:
- 透過視圖進(jìn)行增刪改操作時(shí),不得破壞視圖定義中的謂詞條件(即子查詢中的條件表達(dá)式)
RDBMS執(zhí)行CREATE VIEW語句時(shí)只是把視圖定義存入數(shù)據(jù)字典,并不執(zhí)行其中的SELECT語句。
在對(duì)視圖查詢時(shí),按視圖的定義從基本表中將數(shù)據(jù)查出。
常見視圖形式:
- 行列子集視圖(定義:一個(gè)視圖是從單個(gè)表導(dǎo)出的,并且只是去掉了基本表的某些行和某些列,但保留了主碼)
- With check option視圖
- 基于多個(gè)基表的視圖
- 基于視圖的視圖
- 帶表達(dá)式的視圖
- 分組視圖
例6:建立“網(wǎng)絡(luò)工程”專業(yè)的學(xué)生選課信息視圖NW_VIEW,包括學(xué)生的學(xué)號(hào)、姓名、課程號(hào)、成績(jī),且要保證對(duì)該視圖進(jìn)行修改和插入操作時(shí)都是“網(wǎng)絡(luò)工程”專業(yè)的學(xué)生。
CREATE VIEW NW_VIEW AS SELECT Student.Sno, Sname, SC.Cno, Grade FROM Student,SC WHERE Student.Sno=SC.Sno AND Smajor ='網(wǎng)絡(luò)工程' WITH CHECK OPTION ;對(duì)NW_VIEW視圖的更新操作:
- 修改操作:自動(dòng)加上Smajor='網(wǎng)絡(luò)工程’的條件
- 刪除操作:自動(dòng)加上Smajor='網(wǎng)絡(luò)工程’的條件
- 插入操作:自動(dòng)檢查Smajor屬性值是否為’網(wǎng)絡(luò)工程’
- 如果不是,則拒絕該插入操作
- 如果沒有提供Smajor屬性值,則自動(dòng)定義Smajor值為’網(wǎng)絡(luò)工程’
例7:創(chuàng)建一個(gè)視圖NW_VIEW_20160303,該視圖中定義的是學(xué)號(hào)為“20160303”學(xué)生的選課信息。
分析,該例可以直接對(duì)表進(jìn)行查詢建立視圖,也可以對(duì)視圖進(jìn)行查詢建立視圖。
例8:定義學(xué)生選修總學(xué)分的視圖Total_Credit,包括該學(xué)生的學(xué)號(hào)和總學(xué)分。
CREATE VIEW Total_Credit (Vno, VCredit) AS SELECT Sno, SUM(Course.Ccredit) FROM SC, Course WHERE SC.Cno=Course.Cno GROUP BY SnoVno?VCredit?1201601019.52201601023.53201602013.542016020345201602043.562016030327\begin{array}{|l|l|l|} \hline & \text { Vno } & \text { VCredit } \\ \hline1 & 20160101 & 9.5 \\ \hline2 & 20160102 & 3.5 \\ \hline3 & 20160201 & 3.5 \\ \hline4 & 20160203 & 4 \\ \hline5 & 20160204 & 3.5 \\ \hline6 & 20160303 & 27 \\ \hline \end{array}123456??Vno?201601012016010220160201201602032016020420160303??VCredit?9.53.53.543.527??
/*寫法2*/ CREATE VIEW Total_Credit AS SELECT Sno, SUM(Course.Ccredit) AS VCredit FROM SC, Course WHERE SC.Cno=Course.Cno GROUP BY Sno🕘 2.2 查詢視圖
- 用戶角度:查詢視圖與查詢基本表相同
- RDBMS實(shí)現(xiàn)視圖查詢的方法
- 視圖消解法(View Resolution)
- 進(jìn)行有效性檢查
- 轉(zhuǎn)換成等價(jià)的對(duì)基本表的查詢
- 執(zhí)行轉(zhuǎn)換后的查詢
- 視圖消解法(View Resolution)
例9:查詢“計(jì)算機(jī)科學(xué)與技術(shù)”和“軟件工程”兩個(gè)專業(yè)的所有學(xué)生的學(xué)號(hào)、姓名、專業(yè)、總學(xué)分。
SELECT Vno, Sname, Smajor, Vcredit FROM Student, Total_Credit WHERE Smajor IN ('計(jì)算機(jī)科學(xué)與技術(shù)','軟件工程') and Sno=VnoVno?Sname?Smajor?Vcredit?120160101徐成波?計(jì)算機(jī)科學(xué)與技術(shù)?9.5220160102黃曉君?計(jì)算機(jī)科學(xué)與技術(shù)?3.5320160201黃曉君?軟件工程?3.5420160203張順峰?軟件工程?4520160204洪銘勇?軟件工程?3.5\begin{array}{|l|l|l|l|l|} \hline & \text { Vno } & \text { Sname } & \text { Smajor } & \text { Vcredit } \\ \hline 1 & 20160101 & \text { 徐成波 } & \text { 計(jì)算機(jī)科學(xué)與技術(shù) } & 9.5 \\ \hline 2 & 20160102 & \text { 黃曉君 } & \text { 計(jì)算機(jī)科學(xué)與技術(shù) } & 3.5 \\ \hline 3 & 20160201 & \text { 黃曉君 } & \text { 軟件工程 } & 3.5 \\ \hline 4 & 20160203 & \text { 張順峰 } & \text { 軟件工程 } & 4 \\ \hline 5 & 20160204 & \text { 洪銘勇 } & \text { 軟件工程 } & 3.5 \\ \hline \end{array}12345??Vno?2016010120160102201602012016020320160204??Sname??徐成波??黃曉君??黃曉君??張順峰??洪銘勇???Smajor??計(jì)算機(jī)科學(xué)與技術(shù)??計(jì)算機(jī)科學(xué)與技術(shù)??軟件工程??軟件工程??軟件工程???Vcredit?9.53.53.543.5??
DBMS在執(zhí)行此查詢時(shí),首先進(jìn)行有效性檢查,然后從數(shù)據(jù)字典中取出Total_Credit視圖的定義,再與Student基本表的連接查詢進(jìn)行合并消解,轉(zhuǎn)換為對(duì)基本表Student、Course和SC的查詢。
🕘 2.3 更新視圖
更新視圖操作包括:
- 插入(INSERT)
- 刪除(DELETE)
- 修改(UPDATE)
在DB2中對(duì)視圖的更新有如下限制:
(1)若視圖的屬性來自屬性表達(dá)式或常數(shù),則不允許對(duì)視圖執(zhí)行INSERT和UPDATE操作,但允許執(zhí)行DELETE操作。
(2)若視圖的屬性來自聚集函數(shù),則不允許對(duì)此視圖更新。
(3)若視圖定義中有GROUP BY子句,則不允許對(duì)此視圖更新。
(4)若視圖定義中有DISTINCT任選項(xiàng),則不允許對(duì)此視圖更新。
(5)若視圖定義中有嵌套查詢,并且嵌套查詢的FROM子句涉及導(dǎo)出該視圖的基本表,則不允許對(duì)此視圖更新。
(6)如果在一個(gè)不允許更新的視圖上再定義一個(gè)視圖,這種二次視圖是不允許更新的。
PS:書上的這條,請(qǐng)注意:
若視圖由兩個(gè)以上的基本表導(dǎo)出,則不允許對(duì)此視圖更新。-----實(shí)際上是可以的。
小結(jié):只有行列子集視圖允許更新,但我們一般不對(duì)視圖做更新。
例10:將視圖NW_VIEW中學(xué)號(hào)“20160303”和課程號(hào)“1006”的成績(jī)修改為91。
UPDATE NW_VIEW SET Grade=91 WHERE Sno='20160303' AND Cno='1006'本例中該更新語句是可以執(zhí)行的,且執(zhí)行時(shí)也是轉(zhuǎn)換為對(duì)基本表的更新。但是其他幾個(gè)視圖的更新是不允許的。
🕘 2.4 修改視圖
視圖修改的SQL語句格式為:
ALTER VIEW < 視圖名> [WITH ENCRYPTION]; AS <子查詢> [WITH CHECK OPTION];如果原來的視圖定義中使用了WITH ENCRYPTION或WITH CHECK OPTION選項(xiàng),則只有在ALTER VIEW中也包含這些選項(xiàng)時(shí),這些選項(xiàng)才能有效。修改視圖并不會(huì)影響相關(guān)對(duì)象,除非對(duì)視圖定義的更改使得該相關(guān)對(duì)象不再有效。
🕘 2.5 刪除視圖
語句的格式:
DROP VIEW <視圖名>;該語句從數(shù)據(jù)字典中刪除指定的視圖定義
- 如果該視圖上還導(dǎo)出了其他視圖,其定義還在數(shù)據(jù)字典中,但已不能使用,必須顯式刪除。
- 刪除基表時(shí),由該基表導(dǎo)出的所有視圖定義都必須顯式地使用DROP VIEW語句刪除
🕘 2.6 擴(kuò)充:基于派生表的查詢
子查詢不僅可以出現(xiàn)在WHERE子句中,還可以出現(xiàn)在FROM子句中,這時(shí)子查詢生成的臨時(shí)派生表(Derived Table)成為主查詢的查詢對(duì)象
例11:找出每個(gè)學(xué)生超過他自己選修課程平均成績(jī)的課程號(hào)。
有哪些解決方案?
方法一:
SELECT Sno,Cno,grade as '這門課的成績(jī)',avg_grade FROM SC, (SELECT Sno, Avg(Grade) FROM SC GROUP BY Sno) AS Avg_sc(avg_sno,avg_grade) /*定義了一個(gè)臨時(shí)表*/ WHERE SC.Sno = Avg_sc.avg_sno and SC.Grade >=Avg_sc.avg_grade方法二:
CREATE VIEW V_avg_sc (avg_sno,avg_grade) AS SELECT Sno, Avg(Grade) FROM SC GROUP BY Sno; SELECT Sno, Cno,grade as '這門課的成績(jī)', avg_grade FROM SC,V_avg_sc where Sno = avg_sno and Grade >=avg_grade;Sno?Cno?這門課的成績(jī)?avg_grade?120160101100691902201601011008929032016010210058282420160201100590905201602031003898962016020410059696720160303100188858201603031002868592016030310049885102016030310069185\begin{array}{|l|l|l|l|l|} \hline & \text { Sno } & \text { Cno } & \text { 這門課的成績(jī) } & \text { avg\_grade } \\ \hline 1 & 20160101 & 1006 & 91 & 90 \\ \hline 2 & 20160101 & 1008 & 92 & 90 \\ \hline 3 & 20160102 & 1005 & 82 & 82 \\ \hline 4 & 20160201 & 1005 & 90 & 90 \\ \hline 5 & 20160203 & 1003 & 89 & 89 \\ \hline 6 & 20160204 & 1005 & 96 & 96 \\ \hline 7 & 20160303 & 1001 & 88 & 85 \\ \hline 8 & 20160303 & 1002 & 86 & 85 \\ \hline 9 & 20160303 & 1004 & 98 & 85 \\ \hline 10 & 20160303 & 1006 & 91 & 85 \\ \hline \end{array}12345678910??Sno?20160101201601012016010220160201201602032016020420160303201603032016030320160303??Cno?1006100810051005100310051001100210041006??這門課的成績(jī)?91928290899688869891??avg_grade?90908290899685858585??
派生表是一種從查詢表達(dá)式派生出虛擬結(jié)果表的表達(dá)式。
派生表與其他表一樣出現(xiàn)在查詢的FROM子句中。派生表僅存在于外部查詢中.
使用派生表的一般形式如下:
派生出來的表必須是一個(gè)有效的表,因此,它必須遵守以下幾條規(guī)則:
如果子查詢中沒有聚集函數(shù),派生表可以不指定屬性列,子查詢SELECT子句后面的列名為其缺省屬性。
例12:查詢所有選修了1號(hào)課程的學(xué)生姓名,可以用如下查詢完成:
- 派生表
- 連接查詢
- 嵌套查詢一
- 嵌套查詢二
- 視圖
🕒 3. 課后習(xí)題
【單選題】職工表EMP和部門表DEPT如圖所示,其中有下劃線的屬性為主鍵,有波浪線的屬性為外鍵。下面操作不能正確執(zhí)行的是( )。
EMP
職工號(hào)? ̄部門號(hào)~~~~~職工名?E01D03李路E25D01武明E19D04崔浩E32D01李穎\begin{array}{|l|l|l|} \hline \underline{\text { 職工號(hào) }} & \underset{\sim\sim\sim\sim\sim}{部門號(hào)} & \text { 職工名 } \\ \hline E01 & D03 & 李路 \\ \hline E25 & D01 & 武明 \\ \hline E19 & D04 & 崔浩 \\ \hline E32 & D01 & 李穎 \\ \hline \end{array}?職工號(hào)??E01E25E19E32?~~~~~部門號(hào)?D03D01D04D01??職工名?李路武明崔浩李穎??
DEPT
部門號(hào)? ̄部門名?D01研發(fā)部D02市場(chǎng)部D03人事部D04財(cái)務(wù)部\begin{array}{|l|l|} \hline \underline{\text { 部門號(hào) }} & \text { 部門名 } \\ \hline D01 & 研發(fā)部 \\ \hline D02 & 市場(chǎng)部 \\ \hline D03 & 人事部 \\ \hline D04 & 財(cái)務(wù)部 \\ \hline \end{array}?部門號(hào)??D01D02D03D04??部門名?研發(fā)部市場(chǎng)部人事部財(cái)務(wù)部??
A.檢索部門號(hào)為“D05”的職工號(hào)
B.將EMP表中職工“李路”的部門號(hào)改為空值
C.刪除職工“崔浩”的記錄
D.在EMP表中插入記錄(“E18”,“D05”,“育銳”)
【多選題】對(duì)于student-course數(shù)據(jù)庫(kù),如果要查詢沒有選修了1號(hào)課程的學(xué)生姓名,以下選項(xiàng)正確是( )
A.SELECT Sname FROM Student, SC
WHERE Student.Sno=SC.Sno and Cno<>’ 1 ‘;
B.SELECT Sname FROM Student
WHERE sno not in (select sno from sc where cno=‘1’)
C.SELECT Sname FROM Student, (SELECT Sno FROM SC WHERE Cno<>’ 1 ') AS SC1
WHERE Student.Sno=SC1.Sno;
D.SELECT Sname FROM Student
WHERE not exists
(select * from sc where sno=student.sno and cno=‘1’)
E.create view v_cno_1
as select * from student,sc where sc.sno=student.sno and cno<>‘1’;
select sname from v_cno_1;
F.SELECT Sname FROM Student
WHERE sno in (select sno from sc where cno<>‘1’)
G.SELECT Sname FROM Student
WHERE not exists
(select * from sc where sno=student.sno and cno<>‘1’)
【單選題】若用如下的SQL語句創(chuàng)建一個(gè)Student表:
CREATE TABLE student (NO char(4) not null,
NAME Char(8) not null,
SEX char(2),
AGE numeric(2))
可以插入到student表中的是
A、(‘1031’,’育銳’,男,23)
B、(‘1031’,’育銳’,NULL,NULL)
C、(NULL,’育銳’,’男’,’23’)
D、(’1031’,NULL,’男’,23)
【單選題】在視圖上不能完成的操作是( )
A、在視圖上定義新的視圖
B、查詢操作
C、更新視圖
D、在視圖上定義新的基本表
【單選題】當(dāng)修改基表數(shù)據(jù)時(shí),視圖________。
A、需要重建
B、可以看到修改結(jié)果
C、無法看到修改結(jié)果
D、不允許修改帶視圖的基表
【填空題】
設(shè)有如下關(guān)系表R:
R(NO,NAME,SEX,AGE,CLASS)
其中NO為學(xué)號(hào),NAME為姓名,SEX為性別,AGE為年齡,CLASS為班號(hào)。寫出實(shí)現(xiàn)下列功能的SQL語句。
①插入一個(gè)記錄(25,‘李明’,‘男’,21,‘95031’);
②插入‘95031’ 班學(xué)號(hào)為30、姓名為‘鄭和’的學(xué)生記錄;
③將學(xué)號(hào)為 10的學(xué)生姓名改為 ‘王華’;
④將所有‘95101’ 班號(hào)改為‘95091’;
⑤刪除學(xué)號(hào)為20的學(xué)生記錄;
⑥刪除姓‘王’的學(xué)生記錄;
用SQL語句建立關(guān)系代數(shù)課后習(xí)題第19題中的四個(gè)表🔎 關(guān)系代數(shù)學(xué)習(xí)筆記
S(SNO,SNAME,STATUS,SCITY);
P(PNO,PNAME,COLOR,WEIGHT);
J(JNO,JNANE,JCITY);
SPJ(SNO,PNO,JNO,QTY)。
其中在SPJ表中,SNO、PNO和JNO是外鍵分別參照S、P、J中的相應(yīng)字段。
注意:只需要?jiǎng)?chuàng)建SPJ表即可,但要記得外鍵和主鍵
針對(duì)上題中四個(gè)表,用SQL語句完成下述操作。
(1)找出使用供應(yīng)商S1所供零件的工程號(hào)碼。
(2)找出工程項(xiàng)目J2使用的各種零件名稱及其數(shù)量。
(3)找出上海廠商供應(yīng)的所有零件號(hào)碼。
(4)找出使用上海產(chǎn)的零件的工程名稱。
(5)找出沒有使用天津產(chǎn)零件的工程號(hào)碼。
(6)將由供應(yīng)商S5供給工程代碼為J4的零件P6改為由S3供應(yīng)。
(7)從供應(yīng)商關(guān)系中刪除S2的記錄,并從供應(yīng)零件關(guān)系中刪除相應(yīng)的記錄。
(8)請(qǐng)將(S2,J6,P4,500)插入供應(yīng)情況表。
對(duì)于教學(xué)數(shù)據(jù)庫(kù)的三個(gè)基本表:
S(SNO ,SNAME ,AGE ,SEX)
SC(SNO ,CNO ,GRADE)
C(CNO ,CNAME ,TEACHER)
試用SQL語句表達(dá)下列查詢:
(1)查詢姓劉的老師所授課程的課程號(hào)和課程名。
(2)查詢年齡大于23歲的男同學(xué)的學(xué)號(hào)和姓名。
(3)查詢學(xué)號(hào)為S3學(xué)生所學(xué)課程的課程號(hào)、課程名和任課教師名。
(4)查詢“張小飛”沒有選修的課程號(hào)和課程名。
(5)查詢至少選修了3門課程的學(xué)生的學(xué)號(hào)和姓名。
(6)在SC中刪除尚無成績(jī)的選課元組。
(7)把“高等數(shù)學(xué)”課的所有不及格成績(jī)都改為60。
(8)把低于所有人總平均成績(jī)的女同學(xué)的成績(jī)提高5%。
(9)向C中插入元組(‘C8’,‘VC++’,‘王昆’)。
請(qǐng)為三建工程項(xiàng)目建立一個(gè)供應(yīng)情況的視圖,包括供應(yīng)商代碼(SNO)、零件代碼(PNO)、供應(yīng)數(shù)量(QTY),并完成以下查詢。
(1)找出三建工程項(xiàng)目使用的各種零件代碼及其數(shù)量。
(2)找出供應(yīng)商S1的供應(yīng)情況。
答案:1.D(解析:因?yàn)镋MP表的部門號(hào)是外鍵,參照的是DEPT表的主鍵,而DEPT表里沒有D05,因此無法正確執(zhí)行) 2.BD(解析:ACEFG都是否定在內(nèi)層,不行) 3.B 4.D 5.B
6.第一空: INSERT INFO R VALUES(25, ‘李明’, ‘男’,21, ‘95031’);
第二空: INSERT INFO R(NO, NAME, CLASS) VALUES (30, ‘鄭和’, ‘95031’);
第三空: UPDATE R
SET NAME=‘王華’
WHERE NO=‘10’
第四空: UPDATE R
SET CLASS = ‘95091’
WHERE CLASS=‘95101’
第五空: DELETE FROM R
WHERE NO = ‘20’
第六空: DELETE FROM R
WHERE NAME LIKE’王%’
OK,以上就是本期知識(shí)點(diǎn)“基本表更新(INSERT、UPDATE、ALTER、DELETE)與視圖VIEW”的知識(shí)啦~~ ,感謝友友們的閱讀。后續(xù)還會(huì)繼續(xù)更新,歡迎持續(xù)關(guān)注喲📌~
💫如果有錯(cuò)誤?,歡迎批評(píng)指正呀👀~讓我們一起相互進(jìn)步🚀
🎉如果覺得收獲滿滿,可以點(diǎn)點(diǎn)贊👍支持一下喲~
? 轉(zhuǎn)載請(qǐng)注明出處
作者:HinsCoder
博客鏈接:🔎 作者博客主頁
總結(jié)
以上是生活随笔為你收集整理的【数据库原理及应用】——基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(学习笔记)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 02华为面试
- 下一篇: mysql查询bom清单_U8 数据库B