日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【数据库原理及应用】——基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(学习笔记)

發(fā)布時(shí)間:2023/12/16 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据库原理及应用】——基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(学习笔记) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

📖 前言: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ù)。

CREATE TABLE Major_num (專業(yè)名 char(12),人數(shù) int);

然后求得各專業(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è)黾?分。

UPDATE SC /*UPDATE后面只能跟一個(gè)表,如果需要修改多個(gè)就嵌套*/ SET Grade = Grade +2 WHERE Sno IN(SELECT Sno FROM Student WHERE Smajor='計(jì)算機(jī)科學(xué)與技術(shù)');

🕘 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é)生的選課信息。

DELETE FROM SC WHERE Sno in ( SELECT Sno FROM Student WHERE Smajor='計(jì)算機(jī)科學(xué)與技術(shù)' )

🕒 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)行查詢建立視圖。

CREATE VIEW NW_VIEW_20160303 AS SELECT * FROM NW_VIEW WHERE Sno='20160303'

例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 Sno

Vno?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)換后的查詢

例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=Vno

Vno?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子句中。派生表僅存在于外部查詢中.
使用派生表的一般形式如下:

FROM (SELECT * FROM TA WHERE ...) AS T

派生出來的表必須是一個(gè)有效的表,因此,它必須遵守以下幾條規(guī)則:

  • 所有列必須要有名稱
  • 列名稱必須是要唯一
  • 不允許使用ORDER BY(除非指定了TOP)
  • 如果子查詢中沒有聚集函數(shù),派生表可以不指定屬性列,子查詢SELECT子句后面的列名為其缺省屬性。
    例12:查詢所有選修了1號(hào)課程的學(xué)生姓名,可以用如下查詢完成:

    • 派生表
    SELECT Sname FROM Student, (SELECT Sno FROM SC WHERE Cno=' 1 ') AS SC1 WHERE Student.Sno=SC1.Sno;
    • 連接查詢
    SELECT Sname FROM Student, SC WHERE Student.Sno=SC.Sno and Cno=' 1 ';
    • 嵌套查詢一
    SELECT Sname FROM Student WHERE sno inselect sno from sc where cno='1'
    • 嵌套查詢二
    SELECT Sname FROM Student WHERE existsselect * from sc where sno=student.sno and cno='1'
    • 視圖
    CREATE VIEW v_cno_1 AS SELECT * FROM student,sc WHERE sc.sno=student.sno and cno='1'; SELECT sname FROM v_cno_1;

    🕒 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’王%’

  • CREATE TABLE SPJ ( SNO VARCHAR(2)REFERENCES S(SNO),PNO VARCHAR(2),JNO VARCHAR(2),QTY NUMERIC(4), PRIMARY KEY (SNO,PNO,JNO),FOREIGN KEY(PNO) REFERENCES P(PNO),FOREIGN KEY(JNO) REFERENCES J(JNO) ); /* 注意:本題中主鍵約束只能放在表級(jí),外鍵約束既可以放在表級(jí)也可以放在行級(jí)。 */
  • /*(1)*/ SELECT DISTINCT JNO FROM SPJ WHERE SNO=’S1’ /*(2)*/ SELECT PNAME,QTY FROM P,SPJ WHERE P.PNO=SPJ.PNO AND JNO=’J2’ /*(3)*/ SELECT DISTINCT PNO FROM SPJ WHERE SNO IN(SELECT SNO FROM S WHERE SCITY=’上海’) /*(4)*/ SELECT JNAME FROM J,SPJ,S WHERE J.JNO=SPJ.JNO AND SPJ.SNO=S.SNO AND S.SCITY=’上?!?--或者 SELECT JNAME FROM J WHERE JNO IN (SELECT JNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND S.SCITY=’上海’) --或者 SELECT JNAME FROM J WHERE JNO IN (SELECT JNO FROM SPJ WHERE SNO IN (SELECT SNO FROM S WHERE SCITY=’上海’)) /*(5)*/ SELECT JNO FROM J WHERE NOT EXISTS(SELECT * FROM SPJ WHERE JNO= J.JNO AND SNO IN(SELECT SNO FROM S WHERE SCITY=’天津’)) --或者 SELECT JNO FROM J WHERE JNO NOT IN(SELECT JNO FROM SPJ WHERE SNO IN(SELECT SNO FROM S WHERE SCITY=’天津’)) --或者 SELECT JNO FROM J WHERE JNO NOT IN(SELECT JNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND SCITY=’天津’) --或者 (SELECT JNO FROM J) EXCEPT (SELECT JNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND SCITY=’天津’) /*(6)*/ UPDATE SPJ SET SNO=’S3’ WHERE SNO=’S5’ AND PNO=’P6’ AND JNO=’J4’ /*(7)*/ DELETE FROM SPJ WHERE SNO=’S2’; DELETE FROM S WHERE SNO=’S2’; /* 本題一定要注意執(zhí)行的順序。 Delete from SPJ,S where 是錯(cuò)誤的!!! Update語句后面什么時(shí)候都不可能出現(xiàn)兩個(gè)表 需要用嵌套查詢 */ /*(8)*/ INSERT INTO SPJ(SNO,JNO,PNO,QTY)VALUES (‘S2’,‘J6’,’P4’,500) --或者 INSERT INTO SPJVALUES (‘S2’,’P4’,’J6’,500)
  • /*(1)*/ SELECT CNO,CNAME FROM C WHERE TEACHER LIKE ’劉%; /*(2)*/ SELECT SNO ,SNAME FROM S WHERE AGE>23 AND SEX=’男’; /*(3)*/ SELECT * FROM C WHERE CNO IN(SELECT CNO FROM SC WHERE SNO=’S3’); /*(4)*/ SELECT CNO,CNAME FROM C WHERE NOT EXISTS(SELECT * FROM SC WHERE CNO=C.CNO AND SNO IN(SELECT SNO FROM S WHERE SNAME=’張小飛’)); /*本題可以用EXCEPT*/ /*(5)*/ SELECT SNO,SNAME FROM S WHERE SNO IN(SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(*)>=3) COUNT(CNO)也可以 --或者 SELECT SNO,SNAME FROM S WHERE (SELECT COUNT(CNO) FROM SC WHERE SNO=S.SNO)>=3 /*上面這個(gè)思路是:對(duì)于S表中的每一個(gè)學(xué)生,去檢查他選修的課程門數(shù)是否大于等于3*/ --或者用連接查詢,但一般不用,沒有必要 SELECT SNO,SNAME FROM S WHERE SNO IN( SELECT S.SNO FROM S,SC WHERE S.SNO=SC.SNOGROUP BY S.SNO HAVING COUNT(*)>=3) /*(6)*/ DELETE FROM SC WHERE GRADE IS NULL; /*(7)*/ UPDATE SC SET GRADE=60 WHERE GRADE<60 AND CNO IN(SELECT CNO FROM C WHERE CNAME=’高等數(shù)學(xué)’) /*(8)*/ UPDATE SC SET GRADE=GRADE+GRADE*0.05 WHERE SNO IN (SELECT SNO FROM S WHERE S.SEX=’女’)AND GRADE < (SELECT AVG(GRADE) FROM SC) /*(9)*/ INSERT INTO C VLAUES(‘C8’,‘VC++’,‘王昆’) --或者 INSERT INTO C (CNO ,CNAME ,TEACHAR) VLAUES(‘C8’,‘VC++’,‘王昆’)
  • CREATE VIEW V_SPJ AS SELECT DISTINCT SNO,PNO,QTY FROM SPJ WHERE JNO in(SELECT JNO FROM J WHERE JNAME=’三建’) --或者 CREATE VIEW V_SPJ AS SELECT DISTINCT SNO,PNO,QTY FROM SPJ,J WHERE SPJ.JNO=J.JNO AND JNAME=’三建’ /*(1)*/ SELECT PNO,SUM(QTY) FROM V_SPJ Group by pno /*(2)*/ SELECT * FROM V_SPJ WHERE SNO=’S1’

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。