MySQL數(shù)據庫學習day3

回顧

字段類型(列類型):數(shù)值型暮顺,時間日期型和字符串類型

數(shù)值型:整型和小數(shù)型(浮點型和定點型)

時間日期型:datetime,date该贾,time,timestamp捌臊,year

字符串類型:定長杨蛋,變長,文本字符串(text和blob),枚舉和集合

mysql記錄長度:65535字節(jié)逞力,varchar達不到理論長度曙寡,NULL占用一個字節(jié),text
文本不占用記錄長度(但是本身占據十個字節(jié))

字段屬性:空屬性寇荧,列描述举庶,默認值

字段屬性

主鍵,唯一鍵揩抡,自增長户侥。

主鍵

主鍵:primary key,主要的鍵峦嗤。一張表只能有一個字段可以使用對應的鍵蕊唐。用來唯一的約束
該字段里面的數(shù)據不能重復。這種稱之為主鍵烁设。

一張表只能有最多一個主鍵替梨。

增加主鍵

SQL操作中有很多種方式可以給表增加主鍵:大體分為三種。

方案1:在創(chuàng)建表的時候署尤,直接在字段之后耙替,跟primary key關鍵字(主鍵本身不允許為空)

優(yōu)點:非常直接,缺點:只能使用一個字段作為主鍵曹体。

方案2:在創(chuàng)建表的時候俗扇,在所有字段之后,使用primary key(主鍵字段列表)來創(chuàng)建主鍵(如果有多個字段作為主鍵箕别,可以是復合主鍵)

方案3:當表已經創(chuàng)建好之后铜幽,額外追加主鍵:可以通過修改表字段屬性,也可以直接追加串稀。

alter table 表名 add primary key (字段列表);

前提:表中字段對應的數(shù)據本身是獨立的(不重復除抛,因為它沒辦法去修改數(shù)據)

主鍵約束

主鍵對應的字段中的數(shù)據不允許重復:一旦重復,數(shù)據操作失敗(增和改)

更新主鍵&刪除主鍵

沒有辦法更新主鍵母截,主鍵必須先刪除到忽,才能增加

alter table 表名 drop primary key;

主鍵分類

在實際創(chuàng)建表的過程中,很少使用真實業(yè)務數(shù)據作為主鍵字段(業(yè)務主鍵:如學號清寇,課程號)喘漏;
大部分的時候是使用邏輯性的字段(字段沒有業(yè)務含義,值是什么都沒關系)华烟,將這種字段的
主鍵稱之為邏輯主鍵

create table my_student(
    id int primary key auto_increment comment '邏輯主鍵:自增長', -- 邏輯主鍵
    number char(10) not null comment '學號',
    name varchar(10) not null
)

自動增長

新增自增長

自增長:當對應的字段不給值或者說給默認值或者給NULL的時候翩迈,會自動的被系統(tǒng)觸發(fā),系統(tǒng)
會從當前字段中已有的最大值再進行+1操作盔夜,得到一個新的不同的值。

自增長通常是跟主鍵搭配匈仗。

自增長特點:auto_increment

  1. 任何一個字段要做自增長必須前提是本身是一個索引(key一欄有值忙菠,主鍵一定是索引(主鍵索引)拾稳,索引卻不一定是主鍵)
  1. 自增長字段必須是數(shù)字(整型)
  1. 一張表最多只能有一個自增長

自增長的使用

當自增長被給定的值為NULL或者默認值的時候會觸發(fā)自動增長

自增長如果對應的字段輸入了值,那么自增長失效:但是下一次還是能夠正確的自增長(從最大值+1)

如何確定下一次是什么自增長呢轿腺?可以通過查看表創(chuàng)建語句看到拢操。

修改自增長

自增長如果涉及到字段改變:必須先刪除自增長亲配,后增加(因為一張表只能有一個自增長)

修改當前自增長已經存在的值:修改只能比當前已有的自增長的最大值當前油湖,不能小(小不生效)
alter table 表名 auto_increment = 值;

向上修改可以

思考:為什么自增長是從1開始巍扛?為什么每次都是自增1呢?

所有系統(tǒng)的表現(xiàn)(如字符集乏德,校對集)都是由系統(tǒng)內部的變量進行控制的撤奸。

查看自增長對應的變量:show variables like 'auto_increment%';

可以修改變量實現(xiàn)不同的效果:修改是對整個數(shù)據修改,而不是單張表(會話級)

set auto_increment = 5; -- 一次自增5

測試效果:自動使用自增長

由于系統(tǒng)誤差引起喊括。

刪除自增長

自增長是字段的一個屬性:可以通過modify來進行修改(保證字段沒有auto_increment即可)

alter table 表名 modify 字段 類型;

唯一鍵

一張表往往有很多字段需要具有唯一性胧瓜,數(shù)據不能重復:但是一張表只能有一個主鍵,
唯一鍵(unique key)就可以解決表中有多個字段需要唯一性約束的問題郑什。

唯一鍵的本質與主鍵差不多:唯一鍵默認允許自動為空贷痪,而且可以多個為空(空字段不參與唯一性比較)

增加唯一鍵

基本與主鍵差不多:三種方案

方案1:在創(chuàng)建表的時候,直接在字段之后蹦误,跟unique/unique key

方案2:在創(chuàng)建表的時候劫拢,在所有字段之后,使用unique -- 復合唯一鍵

方案3:當表已經創(chuàng)建好之后增加唯一鍵

唯一鍵約束

唯一鍵與主鍵本質相同:唯一區(qū)別就是唯一鍵默認允許為空强胰,而且是多個為空舱沧。

如果唯一鍵也不允許為空:與主鍵的約束作用是一直的。

更新唯一鍵&刪除唯一鍵

更新唯一鍵:先刪除后新增(唯一鍵可以有多個:可以不刪除)

刪除唯一鍵

alter table 表名 drop unqiue key; -- 錯誤:唯一鍵有多個

alter table 表名 drop index 索引名字; -- 唯一鍵默認使用字段名作為索引名字

索引

幾乎所有的索引都是建立在字段之上偶洋。

索引:系統(tǒng)根據某種算法熟吏,將已有的數(shù)據(未來可能新增的數(shù)據),單獨建立一個文件:文件能夠實現(xiàn)
快速的匹配數(shù)據玄窝,并且能夠快速的找到對應表中的記錄牵寺。

索引的意義:

  1. 提升查詢數(shù)據的效率
  2. 約束數(shù)據的有效性(唯一性等)

增加索引的前提條件:索引本身會產生索引文件(有時候有可能比數(shù)據文件還大),會非常耗費磁盤空間恩脂。

如果某個字段需要作為查詢的條件經常使用帽氓,那么可以使用索引(一定會想辦法增加)

如果某個字段需要進行有效性的約束,也可能使用索引(主鍵俩块,唯一鍵)

mysql中提供了多種索引:

  1. 主鍵索引:primary key
  2. 唯一鍵索引:unique key
  3. 全文索引:fulltext index
  4. 普通索引:index

全文索引:針對文章內部的關鍵字進行索引

全文索引最大的問題:在于如何確定關鍵字

英文很容易:英文單詞與單詞之間有空格

中文很難:沒有空格黎休,而且中文可以各種隨意組合(分詞:sphinx)

關系

將實體與實體的關系,反映到最終數(shù)據庫表的設計上來:將關系分成3種:一對一玉凯、一對多(多對一)和多對多势腮。

所有的關系都是指表與表之間的關系

一對一

一對一:一張表的一條記錄一定只能與另外一張表的一條記錄進行對應;反之亦然漫仆。

id(PRI) 姓名 性別 年齡 身高 體重 婚姻 籍貫 住址 聯(lián)系人

學生表:姓名捎拯,性別,年齡盲厌,身高署照,體重座菠,婚姻,籍貫藤树,住址,聯(lián)系人

id(PRI) 姓名 性別 年齡 身高 體重 婚姻 籍貫 住址 聯(lián)系人

表設計成以上這種形式:符合要求拓萌,其中姓名岁钓,性別,年齡微王,身高屡限,體重都屬于常用數(shù)據;但是
婚姻炕倘,籍貫钧大,住址,聯(lián)系人屬于不常用數(shù)據罩旋。如果每次都是查詢所有數(shù)據啊央,不常用的數(shù)據就會影響效率,實際又不用

解決方案:將常用的和不常用的信息分離存儲涨醋,分成兩張表

id(PRI) 姓名 性別 年齡 身高 體重

常用信息表

id(PRI) 姓名 性別 年齡 身高 體重
id(PRI) 婚姻 籍貫 住址 聯(lián)系人

不常用信息表:保證不常用信息與常用信息一定能夠對應上:找一個具有唯一性(確定記錄)
的字段來共同連接兩張表

id(PRI) 婚姻 籍貫 住址 聯(lián)系人

一個常用表中的一條記錄:永遠只能在一張不常用表中匹配一條記錄瓜饥;反過來读规,一個不常用表中的一條記錄
在常用表中也只能匹配一條記錄:一對一的關系

一對多

一對多:一張表中有一條記錄可以對應另一張表中的多條記錄励稳;但是反過來核偿,另一張表的一條記錄只能對應第一張表
的一條記錄夷恍,這種關系就是 一對多或多對一

母親與孩子的關系:兩個實體

id(PRI) 名字 年齡

母親表:

id(PRI) 名字 年齡
id(PRI) 名字 年齡

孩子表:

id(PRI) 名字 年齡

以上關系:一個母親可以在孩子表中找到多條記錄(也有可能是一條)揣炕;但是一個孩子只能找到一個母親:是一種典型的
一對多的關系

以上設計解決了實體的設計表問題鄙煤,但是沒有解決關系問題:孩子找不到母親离唬,目前也找不到孩子凿歼。

解決方案:在某一張表中增加一個字段梯轻,能夠找到另外一張表中的記錄:應該在孩子表中增加一個字段
指向母親表:因為孩子表的記錄只能匹配到一條母親表的記錄食磕。

id(PRI) 名字 年齡

母親表:

id(PRI) 名字 年齡
id(PRI) 名字 年齡 母親ID

孩子表:

id(PRI) 名字 年齡 母親ID

多對多

多對多:一張表中(A)的一條記錄能夠對應另外一張表B中的多條記錄;同時B表中的一條記錄也能對應A表中的多條記錄喳挑,
多對多的關系

老師教學:老師和學生

t_id(PRI) 姓名 性別
1 A
2 B

老師表:

t_id(PRI) 姓名 性別
1 A
2 B
s_id(PRI) 姓名 性別
1 張三
2 小芳

學生表:

s_id(PRI) 姓名 性別
1 張三
2 小芳

以上設計方案:實現(xiàn)了實體的設計芬为,但是沒有維護實體的關系

一個老師教過多個學生:一個學生也被多個老師教過。

解決方案:在學生表中增加老師字段:不管在哪張表中增加字段蟀悦,都會出現(xiàn)一個問題:該字段要保存多個數(shù)據媚朦,而且
是與其他表有關系的字段,不符合表設計規(guī)范:因此要增加一張新表:專門維護兩張表之間的關系日戈。

t_id(PRI) 姓名 性別
1 A
2 B

老師表:

t_id(PRI) 姓名 性別
1 A
2 B
s_id(PRI) 姓名 性別
1 張三
2 小芳

學生表:

s_id(PRI) 姓名 性別
1 張三
2 小芳
id(PRI) t_id s_id
1 1 1
2 1 2
3 2 1

中間關系表:老師與學生的關系

id(PRI) t_id s_id
1 1 1
2 1 2
3 2 1

增加中間表之后:中間表與老師形成了一對多的關系:而且中間表是多表询张,維護了能夠唯一找到
一表的關系;同樣的浙炼,學生表與中間表也是一個一對多的關系份氧,一對多的關系可以匹配到關聯(lián)表
之間的數(shù)據唯袄。

學生找老師:找出學生id -> 中間表尋找匹配多條記錄 -> 老師表匹配(一條記錄)

老師找學生:找出老師id -> 中間表尋找匹配多條記錄 -> 學生表匹配(一條記錄)

范式

范式:Normal Format,是一種離散數(shù)學中的知識蜗帜,是為了解決一種數(shù)據的存儲存儲與優(yōu)化的問題恋拷;
保存的數(shù)據存儲之后,凡是能夠通過關系尋找出來的數(shù)據厅缺,堅決不再重復存儲:終極目標是為了
減少數(shù)據的冗余蔬顾。

范式:是一種分層結構的規(guī)范,分為六層:每一層逗比都比上一層更加嚴格:若要滿足下一層范式湘捎,前提
是滿足上一層范式诀豁。

六層范式:1NF,2NF窥妇,3NF....6NF舷胜,1NF是最底層,要求最低活翩,6NF是最高層烹骨,最嚴格。

mysql屬于關系型數(shù)據庫材泄,有空間浪費展氓,因此它要致力于節(jié)省存儲空間:與范式所要解決的問題不謀而合:在
設計數(shù)據庫時,會利用范式來指導設計脸爱。

但是數(shù)據庫不單是要解決空間問題遇汞,還要保證效率問題,而范式只為解決空間問題簿废,所以數(shù)據庫的設計又不可能
完全按照范式的要求實現(xiàn):一般情況下空入,只有前三種凡是滿足需要。

范式在數(shù)據庫的設計當中是有指導意義:但不是強制規(guī)范

1NF

第一范式:在設計表存儲數(shù)據的時候族檬,如果表中設計的字段所存儲的數(shù)據歪赢,在取出來使用之前還需要額外的處理(拆分),那么
說明表的設計不滿足第一范式:第一范式要求字段的數(shù)據具有原子性(不可再分)。

講師P 性別 班級P 教室 代課時間 代課時間(開始单料,結束)
朱元璋 Male php0226 D302 30天 2014-02-27,2014-05-05
朱元璋 Male php0320 B206 30天 2014-03-21,2014-05-30
李世民 Male php0320 B206 15天 2014-06-01,2014-06-20

講師代課表

講師P 性別 班級P 教室 代課時間 代課時間(開始埋凯,結束)
朱元璋 Male php0226 D302 30天 2014-02-27,2014-05-05
朱元璋 Male php0320 B206 30天 2014-03-21,2014-05-30
李世民 Male php0320 B206 15天 2014-06-01,2014-06-20

上表設計不存在問題:但是如果需求是將數(shù)據查出來之后,要求顯示一個老師從什么時候開始
上課扫尖,到什么時候結課白对,那么將需要對代課時間進行拆分:不符合1NF(數(shù)據不具有原子性,可以再拆分)

講師p 性別 班級P 教室 代課時間 開始 結束
朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

解決方案:將代課時間拆分成兩個字段换怖。

講師p 性別 班級P 教室 代課時間 開始 結束
朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

2NF

第二范式:在數(shù)據表設計的過程中甩恼,如果有復合主鍵(多字段主鍵),且表中有字段并不是由整個主鍵來確定,
而是依賴主鍵中的某個字段(主鍵的部分):存在字段依賴主鍵的部分的問題条摸,稱之為部分依賴:第二范式就是
要解決表設計不允許出現(xiàn)部分依賴悦污。

講師p 性別 班級P 教室 代課時間 開始 結束
朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

講師代課表

講師p 性別 班級P 教室 代課時間 開始 結束
朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

以上表中:因為講師沒有辦法作為獨立主鍵,需要結合班級才能作為主鍵(復合主鍵:一個老師在一個班級永遠只帶一個
階段的課):代課時間钉蒲,開始和結束字段都與當前的代課主鍵(講師和班級)相關:但是性別并不依賴班級切端,教室不依賴
講師:性別只依賴講師,教室只依賴班級:出現(xiàn)了性別和教室依賴主鍵中的一部分:部分依賴顷啼,不符合第二范式踏枣。

解決方案1:可以將性別與講師單獨成表,班級與教室也單獨成表线梗。

IDP 講師 性別 班級 教室 代課時間 開始 結束
1 朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
2 朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
3 李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

解決方案2:取消復合主鍵,使用邏輯主鍵怠益。

IDP 講師 性別 班級 教室 代課時間 開始 結束
1 朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
2 朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
3 李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

ID = 講師 + 班級(業(yè)務邏輯約束:復合唯一鍵)

3NF

要滿足第三范式仪搔,必須滿足第二范式

第三范式:理論上講,應該一張表中的所有字段都應該直接依賴主鍵(邏輯主鍵:代表的是業(yè)務主鍵)蜻牢,如果表設計中存在
一個字段烤咧,并不是直接依賴主鍵,而是通過某個非主鍵字段依賴抢呆,最終實現(xiàn)依賴主鍵:把這種不是直接依賴主鍵煮嫌,而是依
賴非主鍵字段的依賴關系稱之為傳遞依賴。第三范式就是要解決傳遞依賴的問題抱虐。

IDP 講師 性別 班級 教室 代課時間 開始 結束
1 朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
2 朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
3 李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

講師代課表

IDP 講師 性別 班級 教室 代課時間 開始 結束
1 朱元璋 Male php0226 D302 30天 2014-02-27 2014-05-05
2 朱元璋 Male php0320 B206 30天 2014-03-21 2014-05-30
3 李世民 Male php0320 B206 15天 2014-06-01 2014-06-20

以上設計方案:性別依賴講師存在昌阿,講師依賴主鍵,教室依賴班級恳邀,班級依賴主鍵:性別和教室都存在傳遞依賴懦冰。

解決方案:將存在傳遞依賴的字段、以及依賴的字段本身單獨取出谣沸,形成一個單獨的表刷钢,然后在需要對應的信息
的時候,使用對應的實體表的主鍵加進來乳附。

IDP 講師ID 班級ID 代課時間 開始 結束
1 1 10 30天 2014-02-27 2014-05-05
2 1 12 30天 2014-03-21 2014-05-30
3 2 12 15天 2014-06-01 2014-06-20

講師代課表

IDP 講師ID 班級ID 代課時間 開始 結束
1 1 10 30天 2014-02-27 2014-05-05
2 1 12 30天 2014-03-21 2014-05-30
3 2 12 15天 2014-06-01 2014-06-20
IDP 講師 性別
1 朱元璋 Male
2 朱元璋 Male
3 李世民 Male

講師表

IDP 講師 性別
1 朱元璋 Male
2 朱元璋 Male
3 李世民 Male
IDP 班級 教室
10 php0226 D302
12 php0320 B206
12 php0320 B206

班級表

IDP 班級 教室
10 php0226 D302
12 php0320 B206
12 php0320 B206

講師表中其實ID=講師内地,班級表中其實ID=班級

逆規(guī)范化

有時候,在設計表的時候赋除,如果一張表中有幾個字段是需要從另外的表中去獲取信息阱缓,理論上講,的確可以
獲取到想要的數(shù)據举农,但是就是效率低一點茬祷。會刻意的在某些表中,不去保存另外表的主鍵(邏輯主鍵),而是
直接保存想要的信息:這樣一來祭犯,在查詢數(shù)據的時候秸妥,一張表可以直接提供數(shù)據,而不需要多表查詢(效率低),
但是會導致數(shù)據冗余增加沃粗。

IDP 講師 教室 代課時間 開始 結束
1 朱元璋 php0226 30天 2014-02-27 2014-05-05
2 朱元璋 php0320 30天 2014-03-21 2014-05-30
3 李世民 php0320 15天 2014-06-01 2014-06-20

如講課代課信息表

IDP 講師 教室 代課時間 開始 結束
1 朱元璋 php0226 30天 2014-02-27 2014-05-05
2 朱元璋 php0320 30天 2014-03-21 2014-05-30
3 李世民 php0320 15天 2014-06-01 2014-06-20

逆規(guī)范化:磁盤利用率與效率的對抗粥惧。

數(shù)據高級操作

數(shù)據操作:增刪改查

新增數(shù)據

基本語法:insert into 表名 [(字段列表)] values (值列表);

在數(shù)據插入的時候,假設主鍵對應的值已經存在:插入一定會失敗

主鍵沖突

當主鍵存在沖突的時候(Duplicate key)最盅,可以選擇性的進行處理:更新和替換

主鍵沖突:更新操作

insert into 表名 [(字段列表:包含主鍵)] values (值列表) on duplicate key update 字段 = 新值;

注意上圖中有兩行受到影響:因此是更新而不是插入操作突雪。

主鍵沖突:替換

replace into 表名 [(字段列表:包含主鍵)] values (值列表);

注意還是會有兩行受到影響,先刪除再插入

蠕蟲復制

蠕蟲復制:從已有的數(shù)據中去獲取數(shù)據涡贱,然后將數(shù)據又進行新增操作:數(shù)據成倍的增加咏删。

表創(chuàng)建高級操作:從已有表創(chuàng)建新表(復制表結構)

create table 表名 like 數(shù)據庫.表名;

蠕蟲復制:先插出數(shù)據,然后將查出的數(shù)據新增一遍

insert into 表名 [(字段列表)] select 字段列表/* from 數(shù)據表名;

蠕蟲復制的意義

  1. 從已有表中拷貝數(shù)據到新表中
  2. 可以迅速的讓表中的數(shù)據膨脹到一定的數(shù)量級:測試表的壓力以及效率
更新數(shù)據

基本語法:update 表名 set 字段 = 值 [where條件];

高級更新語法:update 表名 set 字段 = 值 [where條件] [limit更新數(shù)量];

刪除數(shù)據

與更新類似:可以通過limit來限制數(shù)量

delete from 表名 [where條件] [limit數(shù)量];

刪除:如果表中存在主鍵自增長问词,那么當刪除之后督函,自增長不會還原

如何還原自增長?

思路:數(shù)據的刪除是不會改變表結構的激挪,只能刪除表重建表

truncate 表名; -- 先刪除改變辰狡,后新增改變

查詢數(shù)據

基本語法

select 字段列表/* from 表名 [where條件];

完整語法

select [select選項] 字段列表[字段別名]/* from 數(shù)據源 [where條件子句][group by子句][having子句][order by子句][limit子句];

select選項

select選項:select對查出來的結果的處理方式

all:默認的,保留所有的結果
distinct:去重垄分,查出來的結果宛篇,將重復(所有字段都相同)給去除

字段別名

字段別名:當數(shù)據進行查詢出來的時候,有時候名字并不一定就滿足需求(多表查詢的時候薄湿,會有同名字段)叫倍。需要對字段進行重命名:別名

語法:

字段名 [as] 別名;

數(shù)據源

數(shù)據源:數(shù)據的來源,關系型數(shù)據庫的來源都是數(shù)據表:本質上只要保證數(shù)據類似二維表豺瘤,最終都可以作為數(shù)據源

數(shù)據源分為多種:單表數(shù)據源段标,多表數(shù)據源,查詢語句

單表數(shù)據源:select * from 表名;

多表數(shù)據源:select * from 表名1,表名2....

從一張表中取出一條記錄炉奴,去另外一張表中匹配所有記錄逼庞,而且全部保留:(記錄數(shù)和字段數(shù)),
將這種結果稱為:笛卡爾積(交叉連接):笛卡爾積沒有什么卵用瞻赶,應該應該盡量避免赛糟。

子查詢:數(shù)據的來源是一條查詢語句(查詢語句的結果是二維表)

select * from (select語句) as 表名;

where子句

where子句:用來判斷數(shù)據,篩選數(shù)據

where子句返回結果:0或者1砸逊,0代表false璧南,1代表true

判斷條件

比較運算符:>,<,>=,<=,!=,<>,=,like,between and,in/not in

邏輯運算符:&&(and),||(or)师逸,!(not)

where原理:where是唯一一個直接從磁盤獲取數(shù)據的時候就開始判斷的條件:從磁盤取出一條記錄司倚,開始進行where判斷:判斷的結果
如果成立保存到內存;如果失敗直接放棄。

條件查詢1:要求找出學生id為1或者為3的學生

條件查詢2:查出區(qū)間落在180,190身高之間的學生

between本身是閉區(qū)間动知;between左邊的值必須小于或者等于右邊的值

group by子句

group by:分組的意思皿伺,根據某個字段進行分組(相同的放一組,不同的分到不同組)

基本語法:group by 字段名;

分組的意義:是為了統(tǒng)計數(shù)據(按組統(tǒng)計:按分組的字段進行數(shù)據統(tǒng)計)

SQL提供了一系列統(tǒng)計函數(shù)

count():統(tǒng)計分組后的記錄數(shù):每一組有多少記錄

max():統(tǒng)計每組中最大的值(根據字段)

min():統(tǒng)計最小值

avg():統(tǒng)計平均值

sum():統(tǒng)計和

count函數(shù):里面可以使用兩種參數(shù):*代表統(tǒng)計記錄盒粮;字段名代表統(tǒng)計對應的字段(NULL不統(tǒng)計)

分組會自動排序:根據分組字段--默認升序

group by 字段 [asc|desc]; -- 對分組的結果合并之后的整個結果進行排序

多字段分組:先根據一個字段進行分組鸵鸥,然后對分組后的結果

有一個函數(shù):可以對分組的結果中的某個字段進行字符串連接(保留改組所有的某個字段):group_concat(字段);

回溯統(tǒng)計:with rollup:任何一個分組后都有一個一個小組,最后都需要向上級進行匯報統(tǒng)計:根據當前分組字段丹皱。這就是回溯統(tǒng)計:回溯
統(tǒng)計的時候會將分組字段置空

多字段回溯:考慮第一層分組會有此回溯:第二次分組要看第一次分組的組數(shù)妒穴,組數(shù)是多少,回溯就是多少摊崭,然后加上第一層回溯即可讼油。

having子句

having子句:與where子句一樣:進行條件判斷的

where是針對磁盤數(shù)據進行判斷:進入到內存之后,會進行分組操作:分組結果就需要having來處理

having能做where能做的幾乎所有事情呢簸,但是where卻不能做having能做的很多事情

  1. 分組統(tǒng)計的結果或者說統(tǒng)計函數(shù)都只有having能夠使用
  1. having能夠使用字段別名矮台,where不能:where是從磁盤讀取數(shù)據,而名字只可能是字段名阔墩,別名是在
    字段進入內存之后才會產生嘿架。
order by子句

order by:排序瓶珊,根據某個字段進行升序或者降序排序啸箫,依賴校對集

使用基本語法

order by 字段名 [asc|desc]; -- asc是升序(默認的),desc是降序

排序可以進行多字段排序:先根據某個字段進行排序伞芹,然后排序好的內部忘苛,再按照某個數(shù)據進行再次排序

limit子句

limit子句是一種限制結果的語句:限制數(shù)量

limit有兩種使用方式

方案1:只用來限制長度(數(shù)據量):limit 數(shù)據量;

方案2:限制起始位置,限制數(shù)量:limit 起始位置, 長度;

方案2主要用來實現(xiàn)數(shù)據的分頁:為用戶節(jié)省時間唱较,提高服務器的響應效率扎唾,減少資源的浪費

對于用戶來講:可以點擊的分頁按鈕:1,2,3,4

對于服務器來講:根據用戶選擇的頁碼來獲取不同的數(shù)據:limit offset, length;

length:每頁顯示的數(shù)據量:基本不變

offset: offset = (頁碼 - 1) * 每頁顯示量

day 4

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市南缓,隨后出現(xiàn)的幾起案子胸遇,更是在濱河造成了極大的恐慌,老刑警劉巖汉形,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纸镊,死亡現(xiàn)場離奇詭異,居然都是意外死亡概疆,警方通過查閱死者的電腦和手機逗威,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岔冀,“玉大人凯旭,你說我怎么就攤上這事。” “怎么了罐呼?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵鞠柄,是天一觀的道長。 經常有香客問我弄贿,道長春锋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任差凹,我火速辦了婚禮期奔,結果婚禮上危尿,老公的妹妹穿的比我還像新娘肺孤。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般朽缎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天掠归,我揣著相機與錄音,去河邊找鬼。 笑死蛮穿,一個胖子當著我的面吹牛灸异,可吹牛的內容都是我干的檐春。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼凯楔,長吁一口氣:“原來是場噩夢啊……” “哼摆屯!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤另锋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年根盒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钠导。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡扼睬,死狀恐怖措伐,靈堂內的尸體忽然破棺而出粪躬,到底是詐尸還是另有隱情傻咖,我是刑警寧澤孙援,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏凑兰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一灰蛙、第九天 我趴在偏房一處隱蔽的房頂上張望仅父。 院中可真熱鬧,春花似錦阿宅、人聲如沸往湿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壕探。三九已至厉熟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間较幌,已是汗流浹背揍瑟。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乍炉,地道東北人月培。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像恩急,于是被迫代替她去往敵國和親杉畜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容