數據庫複習123_緒論_關係數據庫_SQL


第一章 緒論

  1. 數據
    是數據庫中存儲的基本對象 || 描述事物的符號記錄稱爲數據 || 數據的含義稱爲數據的語義,數據與語義是不可分的
  2. 數據庫
    是長期存儲在計算機內、有組織的、可共享的大量數據的集合 || 較小冗餘度、較高的數據獨立性、易擴展性、可爲各種用戶共享
    三個基本特點永久存儲、有組織、可共享
  3. 數據庫管理系統 (DBMS)
    是建立在【操作系統】之上的
    科學組織和儲存 ,是位於【用戶】和【操作系統】之間的一層數據管理軟件
    簡述數據庫管理系統的功能:1.數據定義功能 2.數據組織、存儲和管理 3.數據操縱功能 4.數據庫的事務管理和運行管理 5.數據庫的建立和維護功能 6.其它功能
  4. 數據庫系統 (DBS)
    由【數據庫】【數據庫管理系統】【應用程序】【數據庫管理員】組成的存儲、管理、處理和維護數據的系統
    ×××數據庫管理系統是指在計算機系統中引入數據庫後的系統,一般由DB、DBS、應用系統和DBA組成。
  5. 數據管理三個階段:【人工管理】【文件系統】【數據庫系統】
    在數據管理技術發展的過程中,有專門管理數據的軟件的是【文件系統階段和數據庫系統階段】
  6. 數據庫系統的特點:1、數據的結構化,這是數據庫的主要特徵之一,也是數據庫系統與文件系統的本質區別 2、數據的共享性高,冗餘低且易擴充 3、數據獨立性高(物理獨立性,邏輯獨立性)4、數據由數據庫管理系統統一管理和控制安全性保護完整性檢查 、併發控制、數據庫恢復)
  7. 數據模型是對【現實世界】數據特徵的抽象,是數據庫系統的核心和基礎
    包括 概念模型邏輯模型和物理模型
    【概念模型】現實世界->信息世界
    概念數據模型:實體-聯繫模型
    (概念模型是現實世界到機器世界的一箇中間層次。概念模型用於信息世界的建模,是數據庫設計人員進行數據庫設計的有力工具,也是數據庫設計人員和用戶之間進行交流的語言)
    1、實體:客觀存在並可相互區別的 事物
    2、屬性:實體所具有的某一特性
    3、碼:唯一標識實體的屬性集
    4、實體型:用實體名及其屬性名【集合】來抽象和刻畫同類實體,學號(學號,姓名,性別,出生年月)
    5、實體集:同一類型實體的集合,全體學生
    6、聯繫:實體之間的聯繫通常是指不同實體集之間的聯繫【一對一、一對多、多對多】
    7、E-R模型
    數據模型通常由數據結構、數據操作和完整性約束三部分組成
    數據結構:描述數據庫的組成對象和對象之間的聯繫,是對系統的靜態特性的描述。 ②數據操作:是指對數據庫中各種對象(型)的實例(值)允許進行的操作的集合,包括操作及有關的操作規則,是對系統動態特性的描述。 ③數據的約束條件:是完整性規則的集合,完整性規則是給定的數據模型中數據及其聯繫所具有的制約和依存規則,用以限定符合數據模型的數據庫狀態以及狀態的變化,以保證 數據的正確、有效和相容。

【常用數據模型】層次模型、網狀模型、關係模型 、面向對象數據模型、對象關係數據模型、半結構化數據模型

×××層次模型是比網狀模型更具普遍性的結構,網狀模型是層次模型的一個特例
【層次模型】:1、有且只有一個結點無雙親,是根節點 2、根以外的其他結點有且只有一個雙親
【網狀模型】:1、允許一個以上的結點無雙親 2、一個結點可以有多於一個的雙親

  1. 數據管理技術經歷了若干階段,其中人工管理階段和文件系統階段相比文件系統的個顯著優勢是【數據可以長期保存】

  2. 關係模型
    關係:一個關係對應通常說的一張表
    元組:表中的一【行】即爲一個元組
    屬性:表中的一【列】即爲一個屬性
    碼:唯一確定一個元組,學號
    主碼:是指從一個或多個碼中選其中一個
    域:一組具有相同數據類型的值的集合,屬性的取值範圍來自某個域
    分量:元素中的一個屬性值
    關係模式:對關係的描述
    (關係模型要求關係必須是規範化的)
    (關係的每一個分量必須是一個不可分的數據項)

  3. 三級模式結構
    外模式、模式、內模式
    數據庫系統的三級模式是對數據進行抽象的三個級別,把數據的具體組織留給DBMS管理
    模式(邏輯模式),是數據庫中全體數據的邏輯結構和特徵的描述,是所有用戶的公共數據視圖
    外模式(子模式/用戶模式)數據庫用戶可以看見和使用的 局部數據 的邏輯結構和特徵的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示
    外模式通常是模式的子集
    一個數據庫可以有多個外模式
    視圖對應外模式
    同一外模式也可以爲某一用戶的多個應用系統所使用
    但一個應用程序只能使用一個外模式
    外模式是保證數據庫安全的一個有力措施
    內模式(存儲模式/物理模型)
    一個數據庫只有一個內模式
    它是數據物理結構和存儲方式的描述,是數據在數據庫內部的組織方式

  4. 兩層映像
    保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性
    外模式/模式映像邏輯獨立性
    模式/內模式映像物理獨立性

  5. 在三級模式兩層映像結構中,“全局模式”是指【概念模式】,概念模式又稱爲邏輯模式

eg:三級模式優點:
數據庫系統的三級模式結構由外模式、模式和內模式組成 外模式,亦稱子模式或用戶模式,是數據庫用戶能夠看見和使用的局部數據的邏輯結構和特徵的描述,是數據庫用戶的數據視圖。 模式,亦稱邏輯模式,是數據庫中全體數據的邏輯結構和特性的描述,是所有用戶的公共數據視圖。模式描述的是數據的全局邏輯結構。外模式通常是模式的子集。 內模式,亦稱存儲模式,是數據在數據庫系統內部的表示,即對數據的物理結構和存儲方式的描述。 爲了能夠在內部實現這三個抽象層次的聯繫和轉換,數據庫系統在這三級模式之間提供了兩級映像:外模式模式映像和模式/內模式映像。正是這兩級映像保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性。

eg:簡述什麼是數據與程序的物理獨立性?什麼是數據與程序的邏輯獨立性?爲什麼數據庫系統具有數據與程序的獨立性?
邏輯獨立性:當數據的邏輯結構即模式改變時,由數據庫管理員對各個外模式/模式的映像作相應改變,可以使外模式保持不變,從而應用程序不必修改,這就是數據與程序的邏輯獨立性,簡稱數據的邏輯獨立性。
物理獨立性:當數據庫的存儲結構改變了,由數據庫管理員對模式/內模式映像作相應改變,可以使模式保持不變,從而應用程序也不必改變,這就是數據與程序的物理獨立性,簡稱數據的物理獨立性。
DBMS在三級模式之間提供的兩級映像保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性。

  1. 語言
    DDL數據定義語言
    DML數據操縱語言
    從邏輯模型到物理模型的轉換一般是由DBMS完成的
  2. 三類完整性
    實體完整性、參照完整性、用戶自定義完整性
  3. 第一代數據庫系統是指基於網狀模型或層次模型的數據庫系統
    第二代數據庫系統是指基於關係模型的數據庫系統
  4. DBA的職責
    1、決定數據庫中的信息內容和結構 2、決定數據庫的存儲結構和存取策略 3、定義數據的安全性要求和完整性約束條件 4、監控數據庫的使用和運行 5、數據庫的改進和重組、重構
  5. Mysql的安裝、配置方法; Mysql數據庫操作,通過操作,加深對概念的理解,參看PDF文檔《MySQL基礎》

第二章 關係數據庫

數據模型 的概念:對【現實世界】數據特徵的抽象
數據模型 的組成 : 數據結構數據操作完整性約束
關係模型的三個要素數據結構數據操作完整性約束(沒有關係運算)
一個關係就是一個Table
某關係R的外鍵是指:【其它關係的候選鍵,可以是R中的主屬性或非主屬性】
若某屬性非該關係的主鍵,卻是另外一個關係的主鍵,則該屬性稱爲【外鍵】

2.1關係數據結構及形式化定義

  1. 關係
    ①域:是一組具有相同數據類型的值的集合(自然數、{男,女}…)
    ②笛卡爾積:是域上的一種集合運算

    ③關係:

  2. 關係三種類型:基本關係(基本表/基表)、查詢表、視圖表
    基本表實際存在的表,實際存儲數據的邏輯表示
    查詢表查詢結果對應的表
    視圖表由基本表或其他視圖表導出的表,是虛表,不對應實際存儲的數據

  3. 基本關係的6個性質:
    ①列是同質的,即每一列中的分量是同一類型的數據,來自同一個域
    ②不同的列可出自同一個域,稱其中的每一列爲一個屬性,不同的屬性要給予不同的屬性名
    ③列的次序可以任意交換
    ④行的次序可以任意交換
    ⑤任意兩個元組的候選碼不能取相同的值
    ⑥分量必須取原子值,即每一個分量都必須是不可分的數據項
    (關係模型要求關係必須是【規範化】的,最基本的一條就是【⑥】,規範化的關係簡稱爲【範式】)
    (×××元組間的候選碼可以相同)

  4. 區分【關係】、【關係模式】、【關係數據庫】的概念
    (關係是關係模式在某一時刻的狀態或內容)
    關係是元組的集合 動態的、隨時間不斷變化的 、是
    關係模式是對關係的描述 R(U,D,DOM,F)靜態的、穩定的 、是
    關係數據庫所有關係的集合

2.2關係操作

  1. 常用關係操作:1、查詢操作(選擇、投影、並、差、笛卡爾積) 2、插入刪除修改操作
    關係操作特點:關係操作的特點是集合操作方式,即操作的對象和結果都是【集合】
  2. 關係操作語言

2.3關係的完整性

實體完整性、參照完整性、用戶定義的完整性

  1. 實體完整性:【主屬性】不能取空值(不知道/不存在/無意義)
  2. 參照完整性:【外碼】取空值 or 非空值(基本關係s中某個元組的主碼值) (定義外碼與主碼之間的引用規則)
  3. 用戶定義的完整性:是針對某一具體關係數據庫的約束條件,反應某一具體應用所涉及的數據必須滿足的語言要求

2.4關係代數

關係代數是一種抽象的查詢語言,用對關係的運算來表達查詢

  1. 選擇
  2. 投影
    關係R上的投影是從R中選擇出若干屬性【列】組成新的關係
    投影不僅取消了原關係中的某些列,而且還可能取消某些元組,因爲取消了某些屬性列後,就可能出現重複行,應取消這些完全相同的行
  3. 連接



  4. 除運算
    從行和列的角度


    題目
    1、 關係運算中花費時間可能最長的運算是【笛卡爾積】
    2、關係代數的5種基本基本運算是【並、差、選擇、投影、笛卡爾積】
    3、參加差運算的兩個關係【屬性個數必須相同】
    4、關係數據操作的對象和結果都是【集合】
    5、從關係中挑選出指定的屬性組成新關係的運算稱爲【投影】
    6、專門的關係運算包括選擇,投影,連接,除運算等。其中從行的角度進行的運算是【選擇】
    7、關係模型中,一個候選碼是【可由一個或多個其值能唯一標識該關係模式中任何元組的屬性組成】
    8、自然連接是構成新關係的有效方法。一般情況下,當對關係R和S使用自然連接時,要求R和S含有一個或多個共有的【屬性】
    9、設關係R和S的屬性個數分別爲n和m,那麼R×S操作結果的屬性個數爲【n+m】
    10、設關係R和S的元組個數分別爲100和300,關係T是R與S的笛卡爾積,則T的元組個數是【30000】
    11、設關係R與關係S具有相同的目數(或稱度數),且相對應屬性的值取自同一個域,則R- (R-S)等於【R∩S】
    12、在一個關係模式中,有可能沒有非主屬性
    13、給定關係R(X,Y)和S(Y),R和S做除運算時要求R中的屬性Y和S中的屬性Y必須具有相同的域
    14、選擇運算是從行的角度進行的運算
    15、任何關係數據庫系統都應該支持實體完整性和參照完整性
    16、×一個關係中可以有多個候選碼和主碼
    17、一個關係中往往會有多個候選碼,可以指定一個爲主碼,外碼所在的關係叫做參照關係,可以作爲候選碼的屬性也稱主屬性。
    18、關係中的不同的列可以來自同一個域
    19、包含在主碼中的屬性稱爲主屬性
    20、自然連接是一種特殊的等值連接
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

第三章 關係數據庫標準語言SQL

結構化查詢語言
SQL的特點:1、綜合統一 2、高度非過程化 3、面向集合的操作方式 4、以同一種語法結構提供多種使用方式5、語言簡單易學易用
在這裏插入圖片描述

3.1數據定義

三級模式:模式、外模式、內模式
基本對象:模式、表、視圖、索引

3.2數據查詢

SELECT [ALL|DISTINCT] <目標列表達式>
FROM     [AS]
WHERE
GROUP BY    [HAVING]
ORDER BY    [ASC|DESC] //默認升

1.單表查詢

  • 目標表達式: 屬性列、表達式2020-age、字符串常量’Year’、函數
  • 去掉重複的行: distinct (默認爲all)
    在這裏插入圖片描述
  • 通配符:%任意長度 _任意單個字符
    以DB _ 開頭的: where cname like 'DB \ _ % i _ _' ESCAPE ' \ ';
order by sdept,sage desc;
  • 當聚集函數遇到空值時,除count(*)以外,都跳過空值而只處理非空值
  • count(*)是對元組進行計數,某個元組的一個或部分列取空值不影響統計結果
  • where作用於基本表或視圖 , having作用於組
  • 聚集函數只能用於group by中的having語句
  • 分組後聚集函數將作用於每一個組,即每一組都有一個函數值
  • 求各個課程號及相應的選課人數
select cno,count(sno)
from sc
group by cno;
  • 查詢選修了三門以上課程的學生學號
select sno
from sc
group by sno
having count(*)>3;
  1. 連接查詢
    ①等值與非等值連接
    查詢每個學生及其選修課程的情況
select student.*,sc.*
from student,sc
where student,sno=sc.sno
//自然連接
select student.sno,sname,ssex,sage,sdept,cno,grade
from student,sc
where student,sno=sc.sno

②自身連接
③外連接

select student.sno,sname,ssex,sage,sdept,cno,grade
from student left outer join sc on(student.sno=sc.sno);

左外連接:列出左邊關係中所有的元組
右外連接:列出右邊關係中所有的元組
④多表連接

  1. 嵌套查詢
    不相關子查詢:子查詢的查詢條件不依賴於父查詢
    ①帶有in謂詞的子查詢
    相關子查詢:子查詢的查詢條件依賴於父查詢
    ②帶有比較運算符的子查詢
//找出每個學生超過他自己選修課程平均成績的課程號
select sno,cno
from sc x
where grade>=(select avg(grade)
				from sc y
				where y.sno=x.sno;
//內層查詢是求一個學生所有選修課程平均成績的
//至於是哪個學生的平均成績要看參數x.sno的值,
//而該值是與父查詢相關的

③帶有any(some)或all謂詞的子查詢

//查詢非計算機科學系中比計算機科學系【任意一個學生年齡小】的學生姓名和年齡
select sname,sage
from student
where sage<any(select sage
				from student
				where sdept='CS')
and sdept<>'CS';
//查詢非計算機科學系中比計算機科學系【所有學生年齡小】的學生姓名和年齡
select sname,sage
from student
where sage<all(select sage
				from student
				where sdept='CS')
and sdept<>'CS';

④帶有exisis謂詞的子查詢
不返回任何數據,只產生邏輯真值“true/false”

//查詢【所有】選修了1號課程的學生姓名
select sname
from student
where exists (select *
			from sc
			where sno=student.sno and cno='1');
//查詢【沒有】選修了1號課程的學生姓名
select sname
from student
where exists (select *
			from sc
			where sno=student.sno and cno='1');
//查詢選修了全部課程的學生姓名
select sname
from student
where not exists (select *
					from course
					where not exists (select * 
									from sc
									where sno=student.sno
									and cno=course.cno));
//查詢至少選修了學生201215122選修的全部課程的學生號碼
select distinct sno
from sc scx
where not exists (select *
					from sc scy
					where scy.sno='201215122'
					and not exists (select *
									from sc scz
									where scz.sno=scx.sno and scz.cno=scy.cno));
  1. 集合查詢

3.3數據更新

  1. 插入數據
    ①插入元組
insert
into
values
//插入新學生元組
insert 
into student
values('201215126','張成民','男',18,'CS');

②插入子查詢結果

insert
into
子查詢;
//對每一個系,求學生的平均年齡,並把結果存入數據庫
create table dept_age(sdept char(15)
						avg_age smallint);
insert
into dept_age(sdept,avg_age)
select sdept,avg(sage)
from student
group by sdept;
  1. 修改數據(更新數據)
update 
set
where
//修改某一個元組的值
update student
set sage=22
where sno='201215121';
//修改多個元組的值
update student
set sage=sage+1;
//帶子查詢的修改
update sc
set grade=0
where sno in(select sno 
			from student
			where sdept='CS');
  1. 刪除數據
delete 
from 
where
//刪除某一個元組的值
delete
from student
where sno='201215121';
//刪除多個元組的值
delete
from sc;
//帶子查詢的刪除
delete
from sc
where sno in(select sno 
			from student
			where sdept='CS');

3.4空值的處理

不能取空的:not null、unique、碼屬性

//選修1號課程的不及格的學生以及缺考的學生
select sno
from sc
where grade<60 and cno='1'
union
select sno
from sc
where grade is null and cno='1';
//或者
select sno
from sc
where cno='1' and (grade<60 or grade is null)

3.5視圖

  1. 虛表,只存放視圖的定義,不存放視圖對應的數據,這些數據仍存放在原來的基本表中
  2. 一旦基本表中的數據發生變化,從視圖中查詢出的數據也就隨之改變了
  3. 視圖一經定義,就可以和基本表一樣被查詢,被刪除,也可以在一個視圖上再定義新的視圖,但對視圖的更新(增刪改)操作則有一定的限制
    在這裏插入圖片描述
  4. 定義視圖
    ①建立視圖
create view
as
//建立信息系學生的視圖
create view is_student
as
select sno,sname,sage
from student
where sdept='IS';
//建立信息系選修了1號課程的學生的視圖(包括學號、姓名、成績)
create view is_s1(sno,sname,grade)
as
select student.sno,sname,grade
from student,sc
where sdept='IS' and student.sno=sc.sno and sc.cno='1';
//將學生的學號及平均成績定義爲一個視圖
create view s_g(sno,gavg)
as
select sno,avg(grade)
from sc
group by sno;

②刪除視圖

drop view is_s1
  1. 查詢視圖
//在信息系學生的視圖中找出年齡小於20歲的學生
select sno,sage
from is_student
where Sage<20;
  1. 更新視圖
update is_student
set sname='劉晨'
where sno='201215122'
//插入新的學生記錄
insert
into is_student
values('201215129','趙新',20);
//刪除記錄
delete
from is_student
where sno='201215129'

並不是所有的視圖都是可更新的
8. 視圖作用
①能夠簡化用戶的操作
②使用戶能以多種角度看待同一數據
③對重構數據庫提供了一定程度的邏輯獨立性
④能夠對機密數據提供安全保護
⑤適當利用視圖可以更清晰地表達查詢

部分作業題

  1. 集合操作不包括下列哪一項?【D】
    A並操作 B差操作 C交操作 D連接操作
  2. 關於查詢的敘述正確的是【可以根據數據庫表和已建查詢創建查詢】
  3. 在這裏插入圖片描述
  4. 在這裏插入圖片描述
  5. 在這裏插入圖片描述
  6. 在這裏插入圖片描述
  7. 在這裏插入圖片描述
  8. 在這裏插入圖片描述
  9. 在這裏插入圖片描述
  10. 在一個表上可以創建一個聚集索引,可以創建多個非聚集索引
  11. ×空值就是沒有值
  12. ×在關係數據庫中,所有的視圖都可以更新
  13. 子查詢的select-語句中不能使用order by 子句(order by 子句只能對最終查詢結果排序)
  14. 在SQL語句中,謂詞“EXISTS”的含義是存在量詞
  15. ×數據庫的更新操作包括:增、刪、改、查詢
  16. SQL語言是關係數據庫語言
  17. ×DELETE語句刪除的是關於表的定義
  18. 如果LIKE後面的匹配串中不含通配符,則可以用=運算符取代LIKE謂詞,用!=運算符取代NOT LIKE謂詞,
  19. ×聚集函數可以在where選擇條件中使用
  20. where子句中不能用聚集函數作爲條件表達式,只能用於select子句和group by 中的Having子句
  21. 帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯真值‘true’或邏輯假值‘false’
  22. ×使用INSERT命令一次只能插入一行數據
  23. ×嵌套查詢都可用連接運算所替代
  24. ×視圖本身獨立存儲在數據庫中
  25. 查詢選修了全部課程的學生的學號:
 select sno from student where not exists
      ( select * from course where not exists
                           (select *  from sc where sc.sno=student.sno  and  sc.cno=course.cno));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章