摘要:一文帶你快速學(xué)完數(shù)據(jù)庫(kù)期末復(fù)習(xí)一數(shù)據(jù)庫(kù)系統(tǒng)概述數(shù)據(jù)庫(kù)系統(tǒng)的組成數(shù)據(jù)庫(kù)的特點(diǎn)數(shù)據(jù)庫(kù)的模式結(jié)構(gòu)數(shù)據(jù)庫(kù)建立的流程圖關(guān)系數(shù)據(jù)庫(kù)的一些術(shù)語(yǔ)關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)完整性二數(shù)據(jù)庫(kù)設(shè)計(jì)思路以及規(guī)范圖數(shù)據(jù)庫(kù)設(shè)計(jì)三范式三數(shù)據(jù)庫(kù)語(yǔ)句的基礎(chǔ)關(guān)系代數(shù)基
本來(lái)想寫(xiě)文章來(lái)復(fù)習(xí)的,后面發(fā)現(xiàn)越寫(xiě)越多,而且感覺(jué)本末倒置了,查詢(xún)語(yǔ)句寫(xiě)的最少,其他倒是寫(xiě)的很詳細(xì),數(shù)據(jù)庫(kù)知識(shí)真的太細(xì)太碎了,整理起來(lái)難度真的挺大的,如果是數(shù)據(jù)庫(kù)小白,這篇文章肯定很有用,它沒(méi)有過(guò)多的實(shí)戰(zhàn),帶你了解數(shù)據(jù)庫(kù)的基本框架和能夠完成的任務(wù),如果是數(shù)據(jù)庫(kù)學(xué)過(guò)的話,那這篇文章可能對(duì)你而言只有前面數(shù)據(jù)庫(kù)概述和設(shè)計(jì)數(shù)據(jù)庫(kù)有用,數(shù)據(jù)庫(kù)sql語(yǔ)句這部分非常的精簡(jiǎn),幾乎只是了解個(gè)框架,歡迎評(píng)論區(qū)大佬們的指正,第一次寫(xiě)長(zhǎng)文
DB -> DBMS -> DBS -> user
即由數(shù)據(jù)庫(kù)(database)出發(fā)
利用數(shù)據(jù)庫(kù)管理系統(tǒng)(database manage system)創(chuàng)建數(shù)據(jù)庫(kù)中的表(database schema)
最后由user進(jìn)行查詢(xún)等等相關(guān)操作
有結(jié)構(gòu)的
數(shù)據(jù)庫(kù)按照關(guān)系模型來(lái)儲(chǔ)存數(shù)據(jù)和聯(lián)系數(shù)據(jù)
一般采用二維表的形式進(jìn)行實(shí)現(xiàn)
集成的
集成一系列數(shù)據(jù)
并按照一定的原則進(jìn)行分類(lèi)
盡量減少數(shù)據(jù)之間的冗余性
可共享的
可以同時(shí)被多個(gè)用戶(hù)操作
并可以指定權(quán)限等等
統(tǒng)一管理的
一般是由DBMS完成數(shù)據(jù)庫(kù)的全部操作
學(xué)習(xí)數(shù)據(jù)庫(kù)主要研究然后高效的儲(chǔ)存、使用和管理數(shù)據(jù),不僅僅局限與只是查詢(xún)數(shù)據(jù)以及存儲(chǔ)數(shù)據(jù)的載體
這是一門(mén)頗具藝術(shù)的課程
外模式
一般指將數(shù)據(jù)以一定的形式呈現(xiàn)給用戶(hù)
形式不是唯一的
例如在各個(gè)瀏覽器查詢(xún)的界面與各個(gè)軟件等等查詢(xún)的界面,都是外模式的一種體現(xiàn)
概念模式
即表中信息的描述,例如user(name,age)
內(nèi)模式
存儲(chǔ)結(jié)構(gòu)、存儲(chǔ)方法、存取策略等的描述,即設(shè)計(jì)表時(shí)的一些可選項(xiàng)
二級(jí)映射:
外模式到概念模式:邏輯獨(dú)立性
指概念模式改變時(shí)DBMS通過(guò)改變映射使得外模式不變
例子:比如user表多了一個(gè)身高的字段即變成user(name,age,height),展示數(shù)據(jù)的應(yīng)用程序界面不需要進(jìn)行修改
內(nèi)模式到概念模式:物理獨(dú)立性
指內(nèi)模式改變時(shí)DBMS通過(guò)改變映射使得概念模式不變
例子:比如user表的一個(gè)height字段中數(shù)據(jù)類(lèi)型想要從int到double,通過(guò)DBMS,概念模式無(wú)需改變
數(shù)據(jù)獨(dú)立性由邏輯獨(dú)立性和物理獨(dú)立性組成
即最終呈現(xiàn)給用戶(hù)的數(shù)據(jù)庫(kù)界面不受內(nèi)模式以及概念模式的改變而改變
關(guān)系(relation)
就是一張表,用R表示關(guān)系的名稱(chēng)
元組
也稱(chēng)記錄,行,對(duì)應(yīng)于數(shù)據(jù)庫(kù)數(shù)據(jù)中的條記錄即數(shù)據(jù)
屬性
關(guān)系表中一列即代表一個(gè)屬性,屬性只能有一個(gè)屬性名,而關(guān)系可以有多個(gè)屬性
一般在表中稱(chēng)為字段
域(domain)
即數(shù)據(jù)類(lèi)型的取值范圍,這里是指一般的取值,也可以是集合形式的取值范圍
候選鍵、主鍵和外鍵
候選鍵即可以唯一確定一條記錄的字段,可能有多個(gè)
主鍵就是在候選鍵中選取的一個(gè)
外鍵即在其他表中為主鍵的字段
極端情況下,候選鍵只有一個(gè)屬性或者全部屬性才能構(gòu)成一個(gè)候選鍵
實(shí)體完整性
即主鍵值唯一且不能為空值
參照完整性
一個(gè)表的外鍵值要么為空要么就是其他表中的某一個(gè)主鍵值
主要是為了確保數(shù)據(jù)的一致性
用戶(hù)自定義完整性
即用戶(hù)自定義的規(guī)則,數(shù)據(jù)符合規(guī)則才是合法的,才可以插入表中
基本概念
聯(lián)系(兩個(gè)實(shí)體間)
聯(lián)系也可以有屬性
一對(duì)一的聯(lián)系
在兩個(gè)實(shí)體之間任意一個(gè)加入另外一個(gè)實(shí)體的主鍵即可產(chǎn)生聯(lián)系
一對(duì)多的聯(lián)系
在多端實(shí)體加入一端實(shí)體的主鍵即可產(chǎn)生聯(lián)系
多對(duì)多的聯(lián)系
需要另外創(chuàng)建一張表進(jìn)行產(chǎn)生聯(lián)系
按照需要建立一個(gè)兩個(gè)字段的表即可
一個(gè)表的表示方式
主鍵一遍采用下劃線表示,表名一般就是實(shí)體的名字
主鍵由單個(gè)字段構(gòu)成
表名(字段1,字段2,字段3,字段4,字段5)
主鍵由多個(gè)字段構(gòu)成
表名(字段1,字段2,字段3,字段4,字段5)
背景
不合理的數(shù)據(jù)庫(kù)設(shè)計(jì)中存在以下問(wèn)題
數(shù)據(jù)冗余
盡量少出現(xiàn)重復(fù)的數(shù)據(jù),例如一個(gè)表中有好幾個(gè)相同學(xué)生的學(xué)號(hào)姓名,只是選的課程不一樣,這樣很多記錄中的學(xué)號(hào)和姓名明顯是冗余的。
更新異常
由于同一字段存在在同一個(gè)表中的不同的記錄中,導(dǎo)致修改該字段,需要修改好多條記錄,容易造成數(shù)據(jù)的不一致性
插入異常
插入一條新數(shù)據(jù)時(shí)依賴(lài)其他現(xiàn)有的數(shù)據(jù),導(dǎo)致插入不能很好的進(jìn)行
刪除異常
刪除數(shù)據(jù)時(shí),不可避免地刪除掉某些我們需要地信息
所以一個(gè)好的數(shù)據(jù)庫(kù)應(yīng)該盡量避免以上問(wèn)題
范式理論
預(yù)備知識(shí),函數(shù)依賴(lài)
概念
即對(duì)于某一個(gè)關(guān)系模型R,其屬性集合為U,X,Y為U的子集,即每個(gè)X對(duì)應(yīng)一個(gè)唯一的Y,即對(duì)于兩條記錄,若X對(duì)應(yīng)的屬性值相同,Y對(duì)應(yīng)的屬性值也相同,稱(chēng)X函數(shù)確定Y,Y函數(shù)依賴(lài)于X(其實(shí)這部分就是我們中學(xué)所學(xué)的函數(shù),只是應(yīng)用到數(shù)據(jù)庫(kù)中講的比較抽象而已,理解上就是按照函數(shù)來(lái)理解)
特例
平凡函數(shù)依賴(lài)
即Y包含在X集合中,這個(gè)形成函數(shù)依賴(lài)是顯然的(在數(shù)學(xué)術(shù)語(yǔ)中經(jīng)常出現(xiàn)平凡這個(gè)字眼,其實(shí)就是某些特例,比較簡(jiǎn)單,沒(méi)什么好研究的意思,比如線性方程組中的平凡解(即零向量)等等)
非平凡函數(shù)依賴(lài)
即Y不包含在X集合中
完全函數(shù)依賴(lài)、部分函數(shù)依賴(lài)和傳遞函數(shù)依賴(lài)
完全函數(shù)依賴(lài)
Y必需由X中的全部屬性才能決定
部分函數(shù)依賴(lài)
Y可以只由X中部分屬性確定
傳遞函數(shù)依賴(lài)
即指X與Y之間存在其他的中間聯(lián)系屬性集合,例如,Z函數(shù)依賴(lài)于X,Y函數(shù)依賴(lài)于Z
## 即存在某些中間關(guān)系X-->ZZ-->Y
候選碼
即表中可以唯一確定一條數(shù)據(jù)的屬性或者屬性集合,候選碼可能有多個(gè),可以選擇其中一個(gè)作為主鍵
范式
滿(mǎn)足一定約束條件的關(guān)系模式,即數(shù)據(jù)庫(kù)表的設(shè)計(jì)滿(mǎn)足一定的規(guī)范,關(guān)系模式的規(guī)范化即將低一級(jí)的關(guān)系模式分解成高一級(jí)的關(guān)系模式,表現(xiàn)為將表進(jìn)行分解。
第一范式(1NF)
所有屬性都是不可再分的數(shù)據(jù)項(xiàng),即屬性不能再分,一般來(lái)講數(shù)據(jù)庫(kù)表中的默認(rèn)滿(mǎn)足1NF,不過(guò)也有一些反例,比如對(duì)于身份這個(gè)屬性,出現(xiàn)男老師這個(gè)屬性值,就說(shuō)明表不滿(mǎn)足1NF,男老師可以進(jìn)行再分,即分為性別加身份
第二范式(2NF)
在滿(mǎn)足1NF的前提下,非主屬性完全函數(shù)依賴(lài)于候選碼,主屬性即為候選碼中的屬性,故2NF即所有非主屬性只能被候選碼完全確定,不會(huì)出現(xiàn)候選碼中的部分屬性確定其他非主屬性的情況
第三范式(3NF)
在滿(mǎn)足2NF的前提下,任一非主屬性都不傳遞依賴(lài)于任何候選碼
這部分內(nèi)容比較的抽象,不過(guò)作為sql語(yǔ)句的先導(dǎo)學(xué)習(xí)還是有幫助的
域
同種數(shù)據(jù)類(lèi)型值的集合,就像高中學(xué)過(guò)的函數(shù)中的定義域一樣
笛卡兒積
所有域的所有取值集合,不重復(fù),其中集合中的每個(gè)元素稱(chēng)為元組,例:D1中有3個(gè)元素,D2中有4個(gè)元素,則構(gòu)成的笛卡兒積中的元素就有3*4=12種
關(guān)系
笛卡兒積的有限子集稱(chēng)為在域上的一個(gè)關(guān)系,即將元素綁定在一起,關(guān)系中的元素滿(mǎn)足一定的條件
行一般就指記錄或者元組,列指屬性
列中的元素是同一種類(lèi)型的,不同列可能具有相同的域,但不同列要具有不同的屬性名,行和列的順序是隨意的,不會(huì)影響我們的操作
分成集合運(yùn)算符和比較運(yùn)算符
集合運(yùn)算符:交、差、并、廣義笛卡兒積
比較運(yùn)算符:大于、大于等于、小于、小于等于、等于、不等于
這邊的等于只要一個(gè)等號(hào)即可
專(zhuān)門(mén)運(yùn)算符: σ /sigma σ, π /pi π, ÷ /div ÷, ∞ /infty ∞, × /times ×
即選擇,投影,除法,連接
邏輯運(yùn)算符: ? /neg ?, ∨ /vee ∨, ∧ /wedge ∧
符號(hào)
σ /sigma σ
基本形式
σ [ o p t i o n s ] ( 表 ) /sigma_{[options]}(表) σ[options]?(表)
例子:
σ a g e = 15 ( s t u d e n t ) /sigma_{age=15}(student) σage=15?(student)
從學(xué)生表中查詢(xún)年齡等于15的學(xué)生
其實(shí)等價(jià)于后面要學(xué)的where語(yǔ)句
本質(zhì)上就是取出我們需要的字段,重新生成一張表
符號(hào)
π /pi π
基本形式
π [ 屬 性 1 ] , [ 屬 性 2 ] ( 表 ) /pi_{[屬性1],[屬性2]}(表) π[屬性1],[屬性2]?(表)
例子:
π a g e , n a m e ( s t u d e n t ) /pi_{age,name}(student) πage,name?(student)
表示選擇student中的age和name字段構(gòu)成一個(gè)關(guān)系,即一個(gè)表
將兩個(gè)表按照一定的規(guī)則連接,一般默認(rèn)就是自然連接,比較常用的是等值連接,也可以自己創(chuàng)建連接的規(guī)則
符號(hào)
∞ /infty ∞
一般形式
R ∞ A θ B S R/underset{A/theta B}{/infty}S RAθB∞?S
其中 θ /theta θ為比較運(yùn)算符,A與B為比較對(duì)象,一般是表中的某個(gè)字段的比較
等值連接
自然連接
特殊的等值連接,一般情況下連接符下面的條件可以省略,將兩張表中相同屬性組進(jìn)行等值連接,最后會(huì)將重復(fù)的屬性取掉
等值連接
條件運(yùn)算符是等號(hào)的連接,
非等值連接
即一般的條件判斷連接,會(huì)存在
還有一些概念,例如左外連接,右外連接,全外連接,即連接時(shí)如果沒(méi)有匹配到值做的一些處理,將沒(méi)有值的部分置為空值,左即保留左邊的全部元組,右即右邊,全即全部
象集
考慮一個(gè)關(guān)系模式R(X,Y),其中X,Y均為屬性組
現(xiàn)對(duì)任意的元組a,a在X屬性組上的取值等于某一給定的集合x(chóng),則此時(shí)滿(mǎn)足條件的元組的屬性組Y部分的取值即為象集
記為: Y x Y_{x} Yx?
例子:
有一個(gè)表如下圖所示
X 1 X_1 X1? | X 2 X_2 X2? | Y |
---|---|---|
x1 | x2 | y1 |
x1 | x2 | y2 |
x1 | x3 | y1 |
x2 | x1 | y2 |
其中X1和X2為屬性組X,
則x = (x1,x2)在R中的象集 Y x Y_x Yx? = {y1,y2}
b = (x1,x3)在R中的象集 Y x Y_x Yx? = {y1}以此類(lèi)推
除法運(yùn)算本質(zhì)上就是象集的運(yùn)算
Y x Y_x Yx? 相當(dāng)于 R ÷ /div ÷ x
此時(shí)x為一個(gè)元素表
除法運(yùn)算考慮更一般的情況是一個(gè)一般的表
考慮更一般的情況
R(X,Y)和S(Y,Z)
R ÷ S R/div S R÷S即返回X的屬性列,即與S中Y都相同的元組的X屬性組的取值
總結(jié)一下,除法的運(yùn)算,主要是考慮到一種需求,如果我們想要某個(gè)屬性組中的值與給定表中的相同的元組,同時(shí)屬性又不全要,就可以考慮使用除法
符合: ∪ /cup ∪、-
并:R ∪ /cup ∪S當(dāng)且僅當(dāng)R與S具有相同的屬性,作用結(jié)果是元組數(shù)目不減少,可能不增
差:R-S也需要滿(mǎn)足R和S具有相同的屬性,作用結(jié)果是元組數(shù)目不增加,可能不減
符號(hào): × /times ×
例子
R :n目關(guān)系,k1個(gè)元組
S:m目關(guān)系,k2個(gè)元組
則R × /times ×S的結(jié)果是產(chǎn)生(m+n)列和(k1 × /times ×k2)行的一個(gè)二維表
即Database Define Language ,負(fù)責(zé)創(chuàng)建和解釋關(guān)系型數(shù)據(jù)庫(kù)的語(yǔ)言
這里包含兩部分,表和視圖
create table student( name varchar(10) primary key, age int)
創(chuàng)建了一個(gè)以name為主鍵的student表
一般約束可以分單列的約束創(chuàng)建和多列的約束創(chuàng)建
單列的直接放在字段后面即可,多列的在建表語(yǔ)句的最后出現(xiàn)
下面由于展示方便,沒(méi)有指定約束名,這里以主鍵約束展示一下,最好還是指定一下約束名,不然到時(shí)候刪除就有點(diǎn)麻煩,系統(tǒng)默認(rèn)會(huì)隨機(jī)生成一個(gè)約束名
ALTER TABLE student add constraint key PRIMARY key(sno)
作用:使得插入的數(shù)據(jù)不能為空值
--這里就是創(chuàng)建了一個(gè)非空約束create table student( name varchar(10) primary key, age int not null)
添加約束
-- 添加約束之前會(huì)檢查表中的數(shù)據(jù),如果有空值則不成功執(zhí)行alter table studentalter column age int not null
作用:使得字段非空且唯一
--這里就是創(chuàng)建了一個(gè)主鍵約束create table student( name varchar(10) primary key, age int)
如果想從現(xiàn)有表進(jìn)行添加主鍵約束
--首先要確保當(dāng)前的要添加主鍵約束的字段非空--不然就不滿(mǎn)足實(shí)體完整性create table student1( name varchar(10) not null, age int)ALTER TABLE student add PRIMARY key(sno)
作用:
與主鍵有點(diǎn)像,允許出現(xiàn)空值,但只能出現(xiàn)一次,保證鍵值的唯一性,一個(gè)表可以允許有多個(gè)唯一約束
--這里就是創(chuàng)建了一個(gè)唯一約束create table student( name varchar(10) primary key, age int unique)
添加的操作
alter table studentadd unique (age)--注意括號(hào)不能少
作用:
在每次系統(tǒng)插入或者更新數(shù)據(jù)時(shí)檢查數(shù)據(jù)
--這里就是創(chuàng)建了一個(gè)檢查約束create table student( name varchar(10) primary key, age int check(age between 15 and 30))
添加的操作
alter table studentadd check(age between 15 and 30)
作用:
給表中的列添加外鍵約束,使得插入的該列的值必須是合法的,即保證數(shù)據(jù)的一致性
--這里就是創(chuàng)建了一個(gè)外鍵約束create table student( name varchar(10) primary key, age int foreign key(age) references course(age) --age int foreign key references course(age))--這邊由于是列級(jí)約束,所以可以省略foreign key 后面的列名
添加約束
alter table studentadd foreign key(age) references course(age)
注意事項(xiàng)
foreign key 中引用的外鍵數(shù)必須和references 里面數(shù)目和類(lèi)型一致這里回顧一下外鍵的定義:一個(gè)表中的屬性或者屬性組是另一個(gè)表中的主鍵則稱(chēng)此屬性或者屬性組為外鍵
作用:
當(dāng)插入數(shù)據(jù)不指定字段的屬性值時(shí),自動(dòng)賦一個(gè)默認(rèn)的值
--這里就是創(chuàng)建了一個(gè)默認(rèn)約束create table student( name varchar(10) primary key, age int default 18)
添加約束的操作
--只能一條一條添加約束alter table studentadd default "18" for age
--這部分就比較簡(jiǎn)單了--為了比較順利的刪除約束,這里補(bǔ)充一下如何查看約束名稱(chēng)exec sp_help--由于一開(kāi)始沒(méi)有指定約束名,所以需要通過(guò)這個(gè)命令查看
刪除表
drop table student
刪除約束
alter table studentdrop constraint 名字--多個(gè)的話采用括號(hào)括起來(lái)
更新表,約束
這部分其實(shí)有點(diǎn)重合,在上一部分以及講了,這里展示一下基本結(jié)構(gòu)
--更新表alter table 表名alter column 修改的列--更新約束--這里其實(shí)是添加,約束不能直接更新的,要先刪除然后再更新alter table 表名add 約束
在寫(xiě)sql語(yǔ)句時(shí)有時(shí)需要會(huì)寫(xiě)很多重復(fù)的sql語(yǔ)句,但它們的功能基本相同,所以這時(shí)候重用sql語(yǔ)句就變得非常重要,于是就產(chǎn)生了視圖這個(gè)工具。
create view 名字 assql語(yǔ)句--舉個(gè)簡(jiǎn)單的例子create view test_view asselect age,name from student
--視圖的使用其實(shí)和普通的表沒(méi)有多大區(qū)別--可視為一個(gè)表進(jìn)行操作select * from test_view--此時(shí)就檢索出age和name構(gòu)成的記錄--一般來(lái)講視圖是用于檢索數(shù)據(jù)的,當(dāng)然也可以插入,更新,刪除,但是會(huì)有限制,這部分在下面的誤區(qū)會(huì)講
--首先視圖并不是一個(gè)真實(shí)的表,它只是一個(gè)虛表,本質(zhì)上并不儲(chǔ)存數(shù)據(jù),數(shù)據(jù)都在視圖sql語(yǔ)句中的基表當(dāng)中--故視圖在下列情況下不能被更新1.使用分組2.使用連接3.使用子查詢(xún)4.使用并操作5.使用聚集函數(shù)6.使用distinct7.使用計(jì)算列--這些數(shù)據(jù)本質(zhì)上都是由基表計(jì)算出來(lái)的,當(dāng)基表中無(wú)這些數(shù)據(jù),由于對(duì)視圖的更新相當(dāng)于對(duì)基表的更新,故不能更新
select 列名 from 表名select *from 表名--代表查詢(xún)?nèi)苛械囊馑?-舉個(gè)例子--查找student中name列select namefrom student
對(duì)查詢(xún)的記錄增加條件
select 列名from 表名where 條件--舉個(gè)例子--查找name為zhang的學(xué)生select * from studentwhere name = "zhang"
--group by 顧名思義是分組查詢(xún),將數(shù)據(jù)按照一定的原則進(jìn)行排序--涉及到幾個(gè)比較常見(jiàn)的聚集函數(shù)--count,min,max,avg,sum--count(*)代表統(tǒng)計(jì)全部的數(shù)據(jù)包括空值,count(具體列名)則代表非空的數(shù)據(jù)--當(dāng)條件中有出現(xiàn)聚集函數(shù)必須使用having子句進(jìn)行限制,不能使用where--聚集函數(shù)相當(dāng)于在分組里面進(jìn)行計(jì)算,故select 中選擇的屬性必須包含在group by子句中--選擇的列要么出現(xiàn)在group by 子句中要么出現(xiàn)在聚集函數(shù)中--先分組再有having條件select 列名from 表名where 條件group by 列名--舉個(gè)例子--查找name相同的個(gè)數(shù)select name ,count(*)from studentgroup name
--包括自然連接,等值連接,有條件的連接--left join,right join ,full join--這些join語(yǔ)句區(qū)別在于處理空值的原則不同--left join即代表保留左表的全部數(shù)據(jù),沒(méi)有的值按照null表示,right 和full類(lèi)似select 列名from 表1 join 表2 on 條件--多個(gè)的話 from 表1 join 表2 on 條件 join 表3 on 條件where 條件
--排序,比較簡(jiǎn)單,默認(rèn)升序排列--desc 降序排列--order by score desc--asc 升序排列--order by score asc--一般位于sql語(yǔ)句最后--舉個(gè)例子--將分?jǐn)?shù)按照降序排列select scorefrom studentorder by score desc--這里補(bǔ)充一個(gè)top 關(guān)鍵字--top 2代表前兩名--top 2 with ties 代表考慮并列select top 2 with ties score from student --percent 關(guān)鍵字--選出前30%select top 30 percent from student
由于很多時(shí)候我們的表不能滿(mǎn)足我們需求,由于通過(guò)sql語(yǔ)句查詢(xún)出來(lái)的表具有很好的靈活性,故引入子查詢(xún)
使得我們可以用子查詢(xún)的記錄當(dāng)成一個(gè)表進(jìn)行操作
不相關(guān)子查詢(xún)
--顧名思義就是子查詢(xún)與目前執(zhí)行的查詢(xún)語(yǔ)句相互獨(dú)立--子查詢(xún)本質(zhì)就是一個(gè)sql語(yǔ)句
相關(guān)子查詢(xún)
--顧名思義就是子查詢(xún)與主要的查詢(xún)直接有關(guān)系--例如
between and 包括范圍點(diǎn)
like匹配符匹配中文時(shí)也將中文看成一個(gè)字符
聚集函數(shù)相當(dāng)于在分組里面進(jìn)行計(jì)算,故select 中選擇的屬性必須包含在group by子句中
選擇的列要么出現(xiàn)在group by 子句中要么出現(xiàn)在聚集函數(shù)中
先分組再有having條件,最后時(shí)排序,這里有個(gè)順序
對(duì)于group by分組的理解
當(dāng)按照group by后面的屬性進(jìn)行分組好之后
select選擇的屬性只能時(shí)group by 中的屬性或者聚集函數(shù)構(gòu)成的屬性,否則
就會(huì)出現(xiàn)另外一個(gè)字段對(duì)其進(jìn)行分組,不符合常理
有時(shí)候兩個(gè)連接時(shí)為什么同一個(gè)字段不需要指定列名,因?yàn)檫B接時(shí)產(chǎn)生重復(fù)
這里有個(gè)疑問(wèn),自然連接再實(shí)際實(shí)現(xiàn)中好像沒(méi)有特殊操作
交叉查詢(xún)就是笛卡兒積
自連接需要再看一下,這邊就是出現(xiàn)列名不明確會(huì)影響結(jié)果
有兩種方式
沒(méi)有指定列名的插入語(yǔ)句
insert into 表名 values(值1,值2)--這里必須輸入表的全部屬性上的值才可以執(zhí)行,默認(rèn)按照表的定義結(jié)構(gòu)進(jìn)行賦值--比較容易出錯(cuò),不建議采取這種插入數(shù)據(jù)的方式--舉個(gè)例子insert into student values("zhang",19)
指定列名的插入語(yǔ)句
insert into 表名(字段1,字段2) values(值1,值2)--這里指定列名,值一一與前面的列名相對(duì)應(yīng)--語(yǔ)句比較清晰,但存在需要寫(xiě)很多字段的繁瑣操作--舉個(gè)例子insert into student(name,age) values("yu",10)
update 表名set 執(zhí)行更新的操作where 條件--舉個(gè)例子--更新name為zhang的學(xué)生的名字變成hhhupdate studentset name = "hhh"where name = "zhang"
delete from 表名where 條件--舉個(gè)例子--刪除name為zhang的學(xué)生delete from studentwhere name = "zhang"
授權(quán)
--授予某種權(quán)限給用戶(hù)grant 權(quán)限 to 用戶(hù)
回收權(quán)限
--回收權(quán)限r(nóng)evoke 權(quán)限 from 用戶(hù)
拒絕權(quán)限
--拒絕權(quán)限deny 權(quán)限 to 用戶(hù)
這部分初學(xué)者很難使用到,如果這篇文章能有50收藏,我考完就寫(xiě),太累了,先列個(gè)大綱
四個(gè)特性(ACID)
一級(jí)封鎖協(xié)議
二級(jí)封鎖協(xié)議
三級(jí)封鎖協(xié)議
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/125346.html
摘要:需要注意的是用矩陣形式如行列表示二維數(shù)組,是邏輯上的概念,能形象地表示出行列關(guān)系。再次強(qiáng)調(diào)二維數(shù)組名如是指向行的。一維數(shù)組名如是指向列元素的。 哈嘍!這里是一只派大鑫,不是派大星。本著基礎(chǔ)不牢,地動(dòng)山搖的學(xué)習(xí)態(tài)度,從基礎(chǔ)的C語(yǔ)言語(yǔ)法講到算法再到更高級(jí)的語(yǔ)法及框架的學(xué)習(xí)。更好地讓同樣熱愛(ài)編...
摘要:泛型類(lèi)型對(duì)象之間沒(méi)有關(guān)系,就算之間互為父子關(guān)系,也沒(méi)有任何關(guān)系。泛型類(lèi)的靜態(tài)上下文中類(lèi)型變量無(wú)效。不能捕獲或拋出泛型類(lèi)的實(shí)例。 前言 作為一塊后端沒(méi)有太多經(jīng)驗(yàn)的年糕,下周要考試了,所以我必須得來(lái)好好復(fù)習(xí)一下我的JAVA進(jìn)階課/(ㄒoㄒ)/~~。這個(gè)學(xué)期主要是學(xué)了: 泛型 反射 線程 JDBC JAVA WEB基礎(chǔ) Servlet session&cookie 過(guò)濾器&監(jiān)聽(tīng)器 泛型 ...
摘要:后來(lái)知道有了院賽,學(xué)長(zhǎng)說(shuō)刷院和杭電就可,我就一直刷院,到最后比賽前院的前五十道基本做完,杭電也弄了十來(lái)道,就這樣草草參加比賽了。 博客主頁(yè): https://b...
摘要:結(jié)束索引,默認(rèn)為字符串的長(zhǎng)度。列表這塊注意索引中的列表更像中數(shù)組的超集從頭開(kāi)始從尾開(kāi)始常用操作插入刪除還是一樣的知道函數(shù)容易做不知道函數(shù)也能做索引循環(huán)判斷自己造一個(gè)出來(lái)就行了列表允許修改增加方法用于在列表末尾添加新的對(duì)象。 ...
閱讀 3805·2023-01-11 11:02
閱讀 4308·2023-01-11 11:02
閱讀 3132·2023-01-11 11:02
閱讀 5239·2023-01-11 11:02
閱讀 4804·2023-01-11 11:02
閱讀 5578·2023-01-11 11:02
閱讀 5384·2023-01-11 11:02
閱讀 4084·2023-01-11 11:02