




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章進(jìn)入SQL世界——背景知識(shí)/01Contents1數(shù)據(jù)庫(kù)簡(jiǎn)介23SQL簡(jiǎn)介安裝并使用MySQL數(shù)據(jù)庫(kù)1.1數(shù)據(jù)庫(kù)簡(jiǎn)介31.1.1數(shù)據(jù)庫(kù)是什么1.1.2數(shù)據(jù)庫(kù)的作用
數(shù)據(jù)的產(chǎn)生來源有很多,例如,網(wǎng)上購(gòu)物、實(shí)體店消費(fèi)、出行記錄、聊天通訊記錄等。當(dāng)然,除了這些文本類型的數(shù)據(jù),圖像、音樂、聲音也都是數(shù)據(jù)。數(shù)據(jù)庫(kù)的作用可以概括為以下幾點(diǎn):1.實(shí)現(xiàn)數(shù)據(jù)共享2.降低數(shù)據(jù)冗余3.保持?jǐn)?shù)據(jù)獨(dú)立4.數(shù)據(jù)集中控制5.數(shù)據(jù)安全可靠6.數(shù)據(jù)故障恢復(fù)
簡(jiǎn)單來講,數(shù)據(jù)庫(kù)就是存放數(shù)據(jù)的倉(cāng)庫(kù)。數(shù)據(jù)庫(kù)中可以存放百萬(wàn)條、千萬(wàn)條、上億條乃至更多的數(shù)據(jù),存放數(shù)據(jù)的多少受到硬盤空間大小的限制。
數(shù)據(jù)庫(kù)的概念主要包括兩層意思:數(shù)據(jù)庫(kù)是一個(gè)實(shí)體,它是一個(gè)可以存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),用戶按照規(guī)則在該倉(cāng)庫(kù)中存放需要管理的數(shù)據(jù)。因此,數(shù)據(jù)和倉(cāng)庫(kù)兩者結(jié)合起來成為數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)是數(shù)據(jù)管理的新方法和技術(shù),它方便了用戶嚴(yán)密地控制數(shù)據(jù)、高效地維護(hù)和利用數(shù)據(jù)。1.1數(shù)據(jù)庫(kù)簡(jiǎn)介41.1.3數(shù)據(jù)庫(kù)的類型關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù),存儲(chǔ)的格式可以直觀地反映實(shí)體間的關(guān)系。關(guān)系型數(shù)據(jù)庫(kù)和常見的電子表格(Excel等)相似,數(shù)據(jù)都是存儲(chǔ)在由行和列組成的二維表中,數(shù)據(jù)結(jié)構(gòu)非常清晰且通俗易懂。日常工作中常見的關(guān)系型數(shù)據(jù)庫(kù)有MySQL、SQLServer、Oracle等。非關(guān)系型數(shù)據(jù)庫(kù)
非關(guān)系型數(shù)據(jù)庫(kù)(NotOnlySQL,NoSQL),是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱。經(jīng)過多年的技術(shù)革新和發(fā)展,很多NoSQL數(shù)據(jù)庫(kù)如MongoDB、Redis、Memcache等出于簡(jiǎn)化數(shù)據(jù)庫(kù)結(jié)構(gòu)、避免冗余、影響性能的表連接、摒棄復(fù)雜分布式的目的被設(shè)計(jì)。分布式數(shù)據(jù)庫(kù)
分布式數(shù)據(jù)庫(kù)是把那些在地理意義上分散開的各個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),但在計(jì)算機(jī)系統(tǒng)邏輯上又是屬于同一個(gè)系統(tǒng)的數(shù)據(jù)結(jié)合起來的一種數(shù)據(jù)庫(kù)技術(shù)。1.1.4數(shù)據(jù)庫(kù)管理系統(tǒng) 數(shù)據(jù)庫(kù)管理系統(tǒng)簡(jiǎn)稱是“DBMS”,英文全稱是“DatabaseManagementSystem”,是一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,方便用戶建立、使用和維護(hù)數(shù)據(jù)庫(kù)。
工作中最常見的數(shù)據(jù)庫(kù)管理軟件(DBMS)有MySQL、Oracle和SQLServer。1.2SQL簡(jiǎn)介51.2.1SQL是什么 SQL指的是結(jié)構(gòu)化查詢語(yǔ)言,英文全稱是“StructuredQueryLanguage”,是一種特殊的編程語(yǔ)言,用來針對(duì)數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)的語(yǔ)言,可以方便用戶存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。 SQL功能分為三個(gè)部分:數(shù)據(jù)控制語(yǔ)言、數(shù)據(jù)定義語(yǔ)言和數(shù)據(jù)操作語(yǔ)言。 SQL語(yǔ)言的特點(diǎn)是:綜合統(tǒng)一。高度非過程化語(yǔ)言。語(yǔ)言簡(jiǎn)潔,易學(xué)易用。面向集合的操作方式。統(tǒng)一的語(yǔ)法結(jié)構(gòu)提供兩種使用方式。1.2.2SQL的作用數(shù)據(jù)控制語(yǔ)言
用于賦予和管理用戶權(quán)限,以及事務(wù)處理。主要包含的幾種命令:GRANT、REVOKE、COMMIT、ROLLBACK。數(shù)據(jù)定義語(yǔ)言
用于定義和管理數(shù)據(jù)對(duì)象,比如創(chuàng)建數(shù)據(jù)庫(kù),數(shù)據(jù)表等。主要包含的幾種命令:CREATE、DROP、ALTER。數(shù)據(jù)操作語(yǔ)言
用于操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)內(nèi)容(增刪改查)。主要包含的幾種命令:INSERT、DELETE、UPDATE、SELECT。1.2SQL簡(jiǎn)介61.2.3SQL書寫規(guī)則
市面上有各種各樣的關(guān)系型數(shù)據(jù)庫(kù),但都遵循SQL語(yǔ)法。編寫SQL語(yǔ)法的過程中,需要遵循基本的書寫規(guī)則,需要注意的幾點(diǎn)如下:語(yǔ)句以分號(hào)結(jié)尾不區(qū)分大小寫常量的書寫方式單詞之間的分隔方式碰到關(guān)鍵字盡量換行1.2.4SQL示例一段完整的SQL示例如下所示:1.3安裝并使用MySQL數(shù)據(jù)庫(kù)7
學(xué)習(xí)SQL相關(guān)知識(shí)之前,得先確保計(jì)算機(jī)中已經(jīng)安裝了關(guān)系型數(shù)據(jù)庫(kù)。MySQL為8.0版本(下載地址:/downloads/mysql/)。如果在安裝過程中,提示電腦缺少M(fèi)icrosoftFrameWork4.0.NET的錯(cuò)誤消息時(shí),可以前往如下網(wǎng)站進(jìn)行下載和安裝:/en-us/download/details.aspx?id=17851 MySQL具體安裝步驟如下:1)雙擊下載好的MySQL軟件,打開安裝界面,選擇默認(rèn)的“DeveloperDefault”,點(diǎn)擊“Next”,如下圖所示。2)檢查安裝MySQL所需的產(chǎn)品,點(diǎn)擊“Next”,并選擇彈窗中的“Yes”確認(rèn)繼續(xù),如下圖所示。1.3安裝并使用MySQL數(shù)據(jù)庫(kù)83)進(jìn)入產(chǎn)品安裝頁(yè)后,點(diǎn)擊“Execute”進(jìn)入產(chǎn)品安裝流程,待所需產(chǎn)品更新或安裝好后,點(diǎn)擊“Next”繼續(xù),如下圖所示。4)進(jìn)入產(chǎn)品配置頁(yè)后,點(diǎn)擊“Next”繼續(xù),
如下圖所示。1.3安裝并使用MySQL數(shù)據(jù)庫(kù)95)配置MySQL的類型和網(wǎng)絡(luò)(默認(rèn)即可),點(diǎn)擊“Next”,如下圖所示。6)設(shè)置root賬號(hào)的密碼(后面登錄時(shí)需要用到),點(diǎn)擊“Next”,如下圖所示。1.3安裝并使用MySQL數(shù)據(jù)庫(kù)107)之后的步驟就是一直點(diǎn)擊“Next”即可,當(dāng)MySQL軟件安裝好后,會(huì)彈出MySQL的編程環(huán)境Workbench,然后通過點(diǎn)擊下圖中“MySQLConnections”下方的“LocalinstanceMySQL80”進(jìn)入代碼編寫界面,如下圖所示。8)進(jìn)入代碼編寫界面,可以看到工具欄、導(dǎo)航欄、代碼輸入窗體、結(jié)果輸出欄等,如下圖所示。第2章從基礎(chǔ)做起——數(shù)據(jù)庫(kù)表的管理/02Contents1數(shù)據(jù)庫(kù)的增刪23數(shù)據(jù)表的增刪字段的增刪4數(shù)據(jù)表的約束2.1數(shù)據(jù)庫(kù)的增刪132.1.1數(shù)據(jù)庫(kù)的創(chuàng)建MySQL數(shù)據(jù)庫(kù)創(chuàng)建語(yǔ)法格式:CREATEDATABASE[IFNOTEXISTS]database_name
[[DEFAULT]CHARACTERSET字符集名]
[[DEFAULT]COLLATE校對(duì)規(guī)則名];CREATEDATABASEtest;2.1.2數(shù)據(jù)庫(kù)的刪除MySQL數(shù)據(jù)庫(kù)刪除語(yǔ)法格式:DROPDATABASE[IFEXISTS]database_name;示例:DROPDATABASEIFEXISTStest;示例:2.1.3數(shù)據(jù)庫(kù)的選擇MySQL數(shù)據(jù)庫(kù)選擇語(yǔ)法格式:USE<數(shù)據(jù)庫(kù)名>;USEtest;示例:2.2數(shù)據(jù)表的增刪142.2.1數(shù)據(jù)字段類型表1常用的數(shù)值型數(shù)據(jù)數(shù)據(jù)類型數(shù)據(jù)范圍TINYINT-128~127SMALLINT-32768~32767MEDIUMINT-8388608~8388607INT-2147483648~2147483647BIGINT-9223372036854775808~9223372036854775807FLOAT-3.40282E+38~3.40282E+38DOUBLE-1.7976931348623157E+308~1.7976931348623157E+308DECIMAL(n,k)依賴于n和k的值數(shù)據(jù)類型是指某個(gè)變量或值的類型,包括數(shù)值型、字符型和日期時(shí)間型三種。1.數(shù)值型2.字符型數(shù)據(jù)類型類型說明ENUM已知范圍內(nèi)的單值枚舉型字符串SET已知范圍內(nèi)的多值枚舉型字符串CHAR(n)定長(zhǎng)字符串VARCHAR(n)變長(zhǎng)字符串3.日期型表2常用的字符型型數(shù)據(jù)數(shù)據(jù)類型數(shù)據(jù)范圍DATE1000-01-01~9999-12-31DATETIME1000-01-0100:00:00~9999-12-3123:59:59TIMESTAMP1970-01-0100:00:00~2038-01-1903:14:07YEAR1901~2155表3常用的日期型型數(shù)據(jù)2.2數(shù)據(jù)表的增刪2.2.2數(shù)據(jù)表的創(chuàng)建MySQL中創(chuàng)建新表的關(guān)鍵字為CREATETABLE,語(yǔ)法格式如下所示:CREATETABLEtable_name(column_name1data_type1column_attr1,column_name2data_type2column_attr2,column_name3data_type3column_attr3,...);示例:創(chuàng)建學(xué)生信息表2.2數(shù)據(jù)表的增刪2.2.3數(shù)據(jù)表的重命名MySQL中表重命名的關(guān)鍵字為ALTERTABLE,語(yǔ)法格式如下所示:ALTERTABLEtable_nameRENAMEtable_name_new;示例:將學(xué)生信息表scs_student的表名重命名為scs_student_new,然后表名再更改回scs_student2.2數(shù)據(jù)表的增刪2.2.4數(shù)據(jù)表的刪除MySQL中刪除表的關(guān)鍵字為DROPTABLE,語(yǔ)法格式如下所示:DROPTABLEtable_name;示例:將學(xué)生信息表scs_student從數(shù)據(jù)庫(kù)中刪除的語(yǔ)句如下所示:#刪除學(xué)生信息表DROPTABLEscs_student;2.3字段的增刪2.3.1字段的創(chuàng)建MySQL中創(chuàng)建字段的語(yǔ)法格式如下所示:ALTERTABLEtable_nameADDCOLUMNcolumn_name_newdata_type;示例:在教師信息表scs_teacher中創(chuàng)建字段的語(yǔ)句如下所示:#教師信息表增加一列age(年齡)字段ALTERTABLEscs_teacherADDCOLUMNageSMALLINT;2.3.2字段類型的修改MySQL中字段類型的修改,語(yǔ)法格式如下所示:ALTERTABLEtable_nameMODIFYCOLUMNcolumn_namedata_type_new示例:教師信息表address字段類型修改為VARCHAR(500),語(yǔ)句如下所示:#教師信息表address字段類型修改為VARCHAR(500)ALTERTABLEscs_teacherMODIFYCOLUMNaddressVARCHAR(500);2.3字段的增刪2.3.3字段的重命名MySQL中字段重命名的語(yǔ)法格式如下所示:ALTERTABLEtable_nameCHANGEcolumn_namecolumn_name_newdata_type_new;示例:修改教師信息表中新創(chuàng)建字段address的名稱為address_new,語(yǔ)句如下所示:#教師信息表address字段名稱修改為address_newALTERTABLEscs_teacherCHANGEaddressaddress_newVARCHAR(500);2.3.4字段的刪除MySQL中字段的刪除,語(yǔ)法格式如下所示:ALTERTABLEtable_nameDROPCOLUMNcolumn_name;示例:刪除教師信息表中的字段address_new,語(yǔ)句如下所示:#刪除教師信息表的address_new字段ALTERTABLEscs_teacherDROPCOLUMNaddress_new);2.4數(shù)據(jù)表的約束2.4.1約束的作用與類型約束是一種限制,它通過對(duì)表的行或列的數(shù)據(jù)做出限制,來確保表的數(shù)據(jù)的完整性、唯一性。MYSQL中常用的約束包括:主鍵約束、唯一鍵約束、外鍵約束、非空約束、自增約束和默認(rèn)約束
。2.4.2約束的創(chuàng)建、刪除與修改1.主鍵約束創(chuàng)建示例:創(chuàng)建語(yǔ)法:刪除與修改語(yǔ)法:#刪除主鍵ALTERTABLEtable_nameDROPPRIMARYKEY;#修改主鍵ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]PRIMARYKEY(column_name1,…);2.4數(shù)據(jù)表的約束2.唯一鍵約束創(chuàng)建示例:創(chuàng)建語(yǔ)法:刪除與修改語(yǔ)法:#刪除唯一鍵ALTERTABLEtable_nameDROPINDEXconstraint_name;#修改唯一鍵ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]UNIQUE(column_name1,…);2.4數(shù)據(jù)表的約束3.外鍵約束創(chuàng)建示例:創(chuàng)建語(yǔ)法:刪除與修改語(yǔ)法:#刪除外鍵ALTERTABLEtable_nameDROPFOREIGNKEYconstraint_name;#修改外鍵ALTERTABLEtable_name2ADD[CONSTRAINTconstraint_name]FOREIGNKEY(column_name1,…)REFERENCEStable_name1(column_name4,…);2.4數(shù)據(jù)表的約束4.非空約束創(chuàng)建示例:創(chuàng)建語(yǔ)法:刪除與修改語(yǔ)法:#修改非空鍵ALTERTABLEtable_nameMODIFYcolumn_namedata_typeNULL;
或者ALTERTABLEtable_nameCHANGECOLUMNcolumn_namecolumn_namedata_typeNULL;2.4數(shù)據(jù)表的約束5.自增約束創(chuàng)建示例:創(chuàng)建語(yǔ)法:刪除與修改語(yǔ)法:#修改自增鍵ALTERTABLEtable_nameMODIFYcolumn_namedata_type;
或者ALTERTABLEtable_nameCHANGECOLUMNcolumn_namecolumn_namedata_type;2.4數(shù)據(jù)表的約束6.默認(rèn)約束創(chuàng)建示例:創(chuàng)建語(yǔ)法:刪除與修改語(yǔ)法:#修改默認(rèn)鍵ALTERTABLEtable_nameMODIFYcolumn_namedata_typeDEFAULTNULL;
或者ALTERTABLEtable_nameCHANGECOLUMNcolumn_namecolumn_namedata_typeDEFAULTNULL;第3章更上一層樓——數(shù)據(jù)的增刪改/03Contents1SQL編程基礎(chǔ)知識(shí)23數(shù)據(jù)的插入數(shù)據(jù)的刪除4數(shù)據(jù)的修改3.1SQL編程基礎(chǔ)知識(shí)283.1.1運(yùn)算符運(yùn)算符作用+加法-減法*乘法/或DIV除法%或MOD取余表1算數(shù)運(yùn)算符1)算數(shù)運(yùn)算符示例MySQL中有4種常見的運(yùn)算符,可以用來對(duì)字段或操作數(shù)進(jìn)行運(yùn)算。主要包括算數(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。算數(shù)運(yùn)算符是最常用的運(yùn)算符,主要包含加(+)、減(-)、乘(*)、除(/)、取余(%)這5種運(yùn)算。3.1SQL編程基礎(chǔ)知識(shí)29表2比較運(yùn)算符2)比較運(yùn)算符示例比較運(yùn)算符主要用來對(duì)表達(dá)式兩端的數(shù)據(jù)進(jìn)行比較,結(jié)果為真返回1,結(jié)果為假返回0,結(jié)果不確定則返回NULL。運(yùn)算符作用=等于<>,!=不等于>
大于<
小于<=小于等于>=大于等于BETWEEN
在兩值之間NOTBETWEEN
不在兩值之間IN在集合中NOTIN不在集合中<=>嚴(yán)格比較兩個(gè)NULL值是否相等LIKE模糊匹配REGEXP或RLIKE正則式匹配ISNULL為空ISNOTNULL不為空3.1SQL編程基礎(chǔ)知識(shí)30表3邏輯運(yùn)算符3)邏輯運(yùn)算符示例邏輯運(yùn)算符也稱布爾運(yùn)算符,主要用來對(duì)單個(gè)或多個(gè)表達(dá)式進(jìn)行判斷,結(jié)果為真返回1,結(jié)果為假返回0,結(jié)果不確定則返回NULL。運(yùn)算符作用NOT或!邏輯非AND邏輯與OR邏輯或XOR邏輯異或3.1SQL編程基礎(chǔ)知識(shí)31表4位運(yùn)算符4)位運(yùn)算符示例位運(yùn)算符是在二進(jìn)制數(shù)上進(jìn)行計(jì)算的運(yùn)算符。計(jì)算機(jī)程序中的數(shù)據(jù)在內(nèi)存中都是以二進(jìn)制形式存儲(chǔ)的,位運(yùn)算就是對(duì)這些二進(jìn)制數(shù)據(jù)進(jìn)行操作。運(yùn)算符作用&位與|位或^位異或~取反<<
左移>>
右移3.1SQL編程基礎(chǔ)知識(shí)323.1.2運(yùn)算符優(yōu)先級(jí)運(yùn)算符的優(yōu)先級(jí)指的是在進(jìn)行表達(dá)式計(jì)算時(shí),優(yōu)先級(jí)高的運(yùn)算符先計(jì)算,優(yōu)先級(jí)低的運(yùn)算符后計(jì)算。MySQL中運(yùn)算符的優(yōu)先級(jí)如下所示:優(yōu)先級(jí)從低到高運(yùn)算符1=(賦值運(yùn)算)、:=2II、OR3XOR4&&、AND5NOT6BETWEEN、CASE、WHEN、THEN、ELSE7=(比較運(yùn)算)、<=>、>=、>、<=、<、<>、!=、
IS、LIKE、REGEXP、IN8|9&10<<、>>11-(減號(hào))、+12*、/、%13^14-(負(fù)號(hào))、?(位反轉(zhuǎn))15!表5運(yùn)算符優(yōu)先級(jí)示例3.1SQL編程基礎(chǔ)知識(shí)333.1.3謂詞謂詞是函數(shù)的一種,它是需要滿足特定條件的函數(shù),該條件就是返回值為真值,即返回值為True、False或Unknown。常見的SQL謂詞,包括:BETWEEN、LIKE、ISNULL、IN、EXISTS。示例:以客戶交易訂單表customer_trade_order為例,關(guān)于謂詞的查詢使用如下所示。BETWEENLIKEISNULLINEXISTS3.2數(shù)據(jù)的插入34數(shù)據(jù)的插入指的是向數(shù)據(jù)表中插入一條或多條記錄。針對(duì)已經(jīng)存在庫(kù)中的表可以通過INSERTINTO關(guān)鍵字增加記錄,語(yǔ)法格式如下所示:示例:向客戶交易訂單表customer_trade_order中插入一條客戶Fred的訂單信息(全部字段數(shù)據(jù)插入)。3.3數(shù)據(jù)的刪除35數(shù)據(jù)的全部刪除指的是對(duì)表中的記錄執(zhí)行全部刪除。MySQL中刪除全部記錄的關(guān)鍵字為DELETEFROM或TRUNCATE,語(yǔ)法格式如下所示:示例:刪除客戶交易訂單表customer_trade_order中的全部記錄。3.3.1數(shù)據(jù)的全部刪除3.3.2數(shù)據(jù)的部分刪除示例:刪除客戶交易訂單表customer_trade_order中的部分信息。數(shù)據(jù)的部分刪除指的是根據(jù)約束條件對(duì)表中的記錄執(zhí)行刪除操作。MySQL中刪除部分記錄的關(guān)鍵字為DELETEFROM和WHERE,語(yǔ)法格式如下所示:3.4數(shù)據(jù)的修改36單字段數(shù)據(jù)修改指的是修改表中某一列對(duì)應(yīng)的記錄,語(yǔ)法格式如下所示:示例:修改客戶交易訂單表customer_trade_order中Fred的性別為女性。3.4.1單字段數(shù)據(jù)修改3.4.2多字段數(shù)據(jù)修改多字段數(shù)據(jù)修改指的是修改表中某幾列對(duì)應(yīng)的記錄,語(yǔ)法格式如下所示:示例:修改客戶交易訂單表customer_trade_order中Fred和Kevin的性別為女性和交易商品為化妝品。第4章初探SQL核心——數(shù)據(jù)的基礎(chǔ)查詢/04Contents1查詢語(yǔ)法的七個(gè)核心關(guān)鍵字23字段的處理查詢高級(jí)過濾字段查詢4.1查詢語(yǔ)法的七個(gè)核心關(guān)鍵字394.1.1SELECTSELECT關(guān)鍵字就是告知數(shù)據(jù)庫(kù),在提取數(shù)據(jù)時(shí),需要選擇的字段名稱。這里的字段可以是數(shù)據(jù)表中已有的字段名稱,也可以是基于已有字段的衍生字段名稱,語(yǔ)法格式如下所示:示例:查詢中介二手房成交表second_hand_house_deal中所有字段的信息。4.1.2FROMFROM關(guān)鍵字就是告知數(shù)據(jù)庫(kù),在提取數(shù)據(jù)時(shí),需要選擇的數(shù)據(jù)源(表或視圖)名稱。4.1查詢語(yǔ)法的七個(gè)核心關(guān)鍵字40示例:查詢中介二手房成交表second_hand_house_deal中性別為男性且年齡在30歲以上的成交信息。4.1.3WHEREWHERE關(guān)鍵字用于限定數(shù)據(jù)查詢的條件,即實(shí)現(xiàn)數(shù)據(jù)子集的提取。通常情況下,查詢條件可以包含比較運(yùn)算符、邏輯運(yùn)算符、通配符等。示例:查詢中介二手房成交表second_hand_house_deal中不同性別的人數(shù)、最大年齡、最小年齡、平均年齡以及年齡之和。4.1.4GROUPBYGROUPBY關(guān)鍵字用于聚合(或統(tǒng)計(jì))時(shí)的分組操作,通常與聚合函數(shù)搭配使用。4.1查詢語(yǔ)法的七個(gè)核心關(guān)鍵字41示例:查詢中介二手房成交表second_hand_house_deal中不同區(qū)域的人數(shù)大于1人的記錄。4.1.5HAVING在GROUPBY分組的情況下,HAVING關(guān)鍵字可以直接對(duì)聚合函數(shù)直接進(jìn)行篩選。示例:查詢中介二手房成交表second_hand_house_deal中地區(qū)為浦東的成交記錄,返回字段包括custName、sex、age、block以及totalPrice,返回結(jié)果按照性別升序、總價(jià)降序排列。4.1.6ORDERBYORDERBY關(guān)鍵字用于查詢結(jié)果的排序,排序過程中可以按照某個(gè)或某些字段進(jìn)行升序或降序的設(shè)置。4.1查詢語(yǔ)法的七個(gè)核心關(guān)鍵字42示例:查詢中介二手房成交表second_hand_house_deal中年齡從低到高排名前5的成交信息,返回字段包括custName、sex、age、block以及totalPrice。4.1.7LIMITLIMIT關(guān)鍵字用于限定查詢返回的記錄行數(shù),記錄行數(shù)可以是前幾行,也可以是中間幾行,還可以是末尾幾行。4.2字段的處理查詢434.2.1常量字段常量值指的是固定不變的數(shù)值,例如,數(shù)字3、字符串“abc”、日期“2022-06-01”等,SQL語(yǔ)法支持SELECT關(guān)鍵字后面直接加常量值或常量值的表達(dá)式,語(yǔ)法格式如下所示:4.2字段的處理查詢444.2.2字段的計(jì)算字段的計(jì)算指的是字段內(nèi)的原始數(shù)據(jù)需要進(jìn)行處理才能實(shí)現(xiàn)查詢的結(jié)果,通常是基于表中的字段進(jìn)行一系列處理,包括函數(shù)處理、數(shù)值計(jì)算,邏輯判斷等。示例:查詢中介二手房成交表second_hand_house_deal中所有低區(qū)的成交信息,返回字段包括custName、sex、age、block以及totalPrice,且新增一個(gè)字段,該字段計(jì)算的是所有房子截至2022年的房齡。4.2.3字段的拼接字段的拼接就是把多個(gè)字段拼接在一起,生成一個(gè)全新的字段。MySQL中通常使用字符串拼接函數(shù)CONCAT來進(jìn)行字段拼接。示例:查詢中介二手房成交表second_hand_house_deal中所有女性的成交信息,返回字段包括custName、sex、age、block以及totalPrice,且將性別、年齡、區(qū)域拼接成一個(gè)新字段。4.2字段的處理查詢454.2.4字段的別名字段的別名相當(dāng)于為表中的列提供臨時(shí)名稱,這樣做會(huì)使得列名
更具可讀性。字段指定別名用到的關(guān)鍵字是“alisa”,簡(jiǎn)寫“AS”,“AS”關(guān)鍵字是可以省略的。
示例:查詢中介二手房成交表second_hand_house_deal中不同性別的客戶人數(shù)以及成交的房子截至2022年的平均房齡。示例:SQL嵌套查詢中需要給子查詢表中的字段和子查詢表指定別名,除了能夠提高腳本的簡(jiǎn)潔性和易讀性之外(同上),還能實(shí)現(xiàn)子查詢中字段(計(jì)算字段、拼接字段等)的篩選。4.3高級(jí)過濾字段查詢464.3.1高級(jí)模糊匹配除了LIKE關(guān)鍵字可以實(shí)現(xiàn)簡(jiǎn)單的模糊匹配之外,REGEXP或RLIKE可以實(shí)現(xiàn)正則匹配。示例:以二手房成交表second_hand_house_deal為例,查詢客戶姓張、李、王,且房屋總價(jià)以奇數(shù)開頭、偶數(shù)結(jié)尾的成交信息,返回字段包括custName、sex、age、block以及totalPrice。4.3.2多字段過濾查詢WHERE作為SQL查詢中的高頻關(guān)鍵字,是一個(gè)約束聲明,用于約束數(shù)據(jù),主要是在返回結(jié)果集之前起到過濾作用。示例:以二手房成交表second_hand_house_deal為例,查詢男性客戶姓張、李、王,且房屋總價(jià)以奇數(shù)開頭、偶數(shù)結(jié)尾的成交信息或全部女性的成交信息,且年齡必須低于平均年齡,返回字段包括custName、sex、age、block以及totalPrice。第5章玩轉(zhuǎn)SQL函數(shù)與語(yǔ)法——數(shù)據(jù)的高級(jí)查詢/05Contents1SQL常用函數(shù)23去重查詢嵌套查詢45關(guān)聯(lián)查詢合并查詢67分組排序查詢轉(zhuǎn)置查詢5.1SQL常用函數(shù)49MySQL內(nèi)置了很多函數(shù),包括數(shù)值函數(shù)、字符串函數(shù)、日期和時(shí)間函數(shù)、格式類型轉(zhuǎn)換函數(shù)、條件判斷函數(shù)、非空處理函數(shù)等。數(shù)值函數(shù)字符串函數(shù)日期函數(shù)其他函數(shù)ABSLENGTHCURRENT_DATE、CURDATECASTMODUPPER、LOWER、UCASE、LCASECURRENT_TIME、CURTIMECONVERTPOWER、POWCONCAT、CONCAT_WSNOW、CURRENT_TIMESTAMP、SYSDATEIFCEIL、CEILINGLEFT、RIGHTYEAR、QUARTER、MONTH、DAYCASEFLOORSUBSTRINGHOUR、MINUTE、SECONDIFNULL、COALESCERANDREPLACEDAYOFWEEK、DAYOFMONTH、DAYOFYEARNULLIFROUNDINSERTWEEK、WEEKOFYEARISNULLTRUNCATEINSTR、POSITION、LOCATEWEEKDAYTRIMMONTHNAME、DAYNAMEREVERSEDATE_ADD、ADDDATEDATE_SUB、SUBDATETIMESTAMPADDADDTIME、SUBTIMEDATEDIFF、TIMEDIFFTIMESTAMPDIFFDATE、TIME、TIMESTAMPDATE_FORMAT、TIME_FORMAT
UNIX_TIMESTAMP、FROM_UNIXTIME
表1MySQL常用函數(shù)MySQL常用函數(shù)如下所示:5.2去重查詢50當(dāng)從數(shù)據(jù)表中查詢出來的行數(shù)據(jù)(單列或多列)出現(xiàn)重復(fù)時(shí),可以使用DISTINCT關(guān)鍵字進(jìn)行去重查詢,針對(duì)重復(fù)的行數(shù)據(jù)僅保留其中一條。DISTINCT語(yǔ)法格式如下所示:示例:查詢門店電器用戶信息表store_appliance_userinfo中所有客戶的不同省份。5.3嵌套查詢51在一段SQL查詢腳本中嵌套了一個(gè)或多個(gè)查詢,嵌套的查詢語(yǔ)句通常叫作子查詢語(yǔ)句。子查詢語(yǔ)句可以分為兩種類型,一種類型是相關(guān)子查詢,另外一種類型是不相關(guān)子查詢。示例:查詢門店電器用戶信息表store_appliance_userinfo中年齡高于所有人平均年齡的客戶信息。5.3.1常量值的子查詢下面主要針對(duì)不相關(guān)子查詢進(jìn)行詳細(xì)講解。示例:查詢門店電器用戶信息表store_appliance_userinfo中人數(shù)大于等于2人對(duì)應(yīng)的省份個(gè)數(shù)。5.3.2表的子查詢5.4關(guān)聯(lián)查詢52關(guān)聯(lián)查詢指的是將兩個(gè)或兩個(gè)以上的表連接起來進(jìn)行查詢,多表通過連接進(jìn)行列合并生成一張總表,連接后的總表可以作為一張全新的表來查詢。MySQL中的關(guān)聯(lián)查詢主要分為三種類型,分別是:內(nèi)關(guān)聯(lián)([INNER]JOIN)、左關(guān)聯(lián)(LEFTJOIN)、右關(guān)聯(lián)(RIGHTJOIN)。三種關(guān)聯(lián)的語(yǔ)法基本一致,語(yǔ)法格式如下所示:除了上面三種關(guān)聯(lián)類型之外,還可以衍生出四種關(guān)聯(lián)查詢。5.5合并查詢53合并查詢指的是數(shù)據(jù)的行合并查詢。在SQL語(yǔ)法中通常使用UNION或UNIONALL關(guān)鍵字來實(shí)現(xiàn)數(shù)據(jù)的行合并操作,SQL合并查詢語(yǔ)法如下所示:示例:查詢門店電器用戶信息表store_appliance_userinfo中男性與女性的所屬省份,并將所屬省份數(shù)據(jù)行合并到一起(去重)。5.5.1去重合并查詢?nèi)ブ睾喜⒉樵兪褂玫氖荱NION關(guān)鍵字,通過UNION將兩個(gè)或者多個(gè)SELECT查詢語(yǔ)句返回的結(jié)果集在垂直方向合并到一起,并實(shí)現(xiàn)去重操作。5.5合并查詢54示例:查詢門店電器用戶信息表store_appliance_userinfo中男性與女性的所屬省份,并將所屬省份數(shù)據(jù)行合并到一起(不去重)。5.5.2不去重合并查詢不去重合并查詢使用的是UNIONALL關(guān)鍵字,通過UNIONALL將兩個(gè)或者多個(gè)SELECT查詢語(yǔ)句返回的結(jié)果集在垂直方向合并到一起,行合并之后的數(shù)據(jù)不會(huì)進(jìn)行去重操作。5.6分組排序查詢55MySQL在8.0版本之后新增了幾個(gè)窗口函數(shù),可以幫助解決分組后不同組內(nèi)的排序問題。這里涉及排序的窗口函數(shù)主要有RANK、DENSE_RANK、ROW_NUMBER。它們的相同點(diǎn)與不同點(diǎn)如下所示:5.6分組排序查詢56SQL分組排序查詢函數(shù)語(yǔ)法如下所示:示例:查詢門店電器用戶信息表store_appliance_userinfo中的客戶信息以及年齡從高到低的排序(三種排序方式)。5.7轉(zhuǎn)置查詢57查詢有時(shí)需要將表進(jìn)行轉(zhuǎn)置,將原數(shù)據(jù)中的某一列作為維度轉(zhuǎn)換為列標(biāo)題。MySQL中借助于CASE…WHEN、IF、聚合函數(shù)(MAX、MIN、SUM、AVG)來實(shí)現(xiàn)轉(zhuǎn)置查詢。示例:將左邊表的數(shù)據(jù)轉(zhuǎn)置成右邊表的數(shù)據(jù),這里就用到了轉(zhuǎn)置操作,需要將prodName字段作為維度轉(zhuǎn)換為列標(biāo)題。具體實(shí)現(xiàn)腳本如下:第6章封裝SQL語(yǔ)句的表——視圖的增刪及查詢/06Contents1視圖的創(chuàng)建23視圖的刪除視圖的修改4視圖的查詢第6章
封裝SQL語(yǔ)句的表——視圖的增刪及查詢60視圖(View)是一種虛擬存在的表,但視圖并不實(shí)際存在于數(shù)據(jù)庫(kù)中。視圖也是由列和行構(gòu)成,行和列的數(shù)據(jù)來自于定義視圖的查詢中所使用的表,并且還是在使用視圖時(shí)動(dòng)態(tài)生成的。視圖相對(duì)于普通表的優(yōu)勢(shì)在于以下幾點(diǎn):6.1視圖的創(chuàng)建61基于單張表的數(shù)據(jù)查詢而創(chuàng)建的視圖稱為單表視圖的創(chuàng)建。6.1.1單表視圖的創(chuàng)建示例:創(chuàng)建成功一個(gè)名為view_loan_userinfo的視圖。A部門只看到的客戶字段信息為姓名、性別和年齡,B部門只看到的客戶字段信息為姓名、學(xué)歷和收入,C部門只看到的是地區(qū)為Florida且客戶字段信息為姓名、是否有房產(chǎn)和是否有車。根據(jù)ABC部門不同的需求來創(chuàng)建不同的視圖。6.1視圖的創(chuàng)建62基于多張表的數(shù)據(jù)查詢而創(chuàng)建的視圖稱為多表視圖的創(chuàng)建。6.1.2多表視圖的創(chuàng)建示例:將貸款用戶信息表loan_userinfo與貸款業(yè)務(wù)明細(xì)表loan_details兩張表作為源表來創(chuàng)建一張視圖,創(chuàng)建完成后的視圖字段包括custID、custName、income、orderDate、prodName、amount。創(chuàng)建語(yǔ)法如下所示:執(zhí)行完上段SQL腳本,數(shù)據(jù)庫(kù)中就會(huì)創(chuàng)建成功一張多表視圖,通過關(guān)鍵字DESC可以查看視圖結(jié)構(gòu)。6.2視圖的刪除63視圖的刪除是通過關(guān)鍵字DROPVIEW來實(shí)現(xiàn)的,既可以一次刪除一張視圖,也可以一次刪除多張視圖。刪除視圖的語(yǔ)法如下所示:示例:一次刪除一張視圖view_loan_userinfo和一次刪除三張視圖view_loan_userinfo_a、view_loan_userinfo_b、view_loan_userinfo_c。6.3視圖的修改64視圖的修改可以分為兩大類,一類是針對(duì)創(chuàng)建視圖SQL的修改,通過修改可以改變整個(gè)視圖的查詢內(nèi)容,一類是針對(duì)視圖內(nèi)容的增刪改,通過對(duì)視圖的增刪改實(shí)現(xiàn)對(duì)源表數(shù)據(jù)的修改。語(yǔ)法如下所示:示例:將之前創(chuàng)建成功的視圖view_loan_userinfo的查詢SQL進(jìn)行修改,修改后的視圖可以查詢的字段信息為姓名、性別、年齡、學(xué)歷和年收入。6.4視圖的查詢65視圖的查詢方式和表的查詢方式是一致的,針對(duì)視圖進(jìn)行數(shù)據(jù)查詢時(shí),其實(shí)是執(zhí)行的存儲(chǔ)在視圖中的SQL腳本。視圖的查詢可以分為:?jiǎn)我晥D查詢、視圖與視圖的關(guān)聯(lián)查詢、視圖與表的關(guān)聯(lián)查詢。示例:查詢視圖view_loan_userinfo_a與視圖view_loan_userinfo_b內(nèi)關(guān)聯(lián)后的結(jié)果(關(guān)聯(lián)字段為custName),并篩選性別為女性且年齡在25歲以上的客戶信息,返回字段為custName、sex、age、education、income。第7章提高查詢效率的制勝法寶——索引/07Contents1索引的功能與類型介紹23常見索引類型的創(chuàng)建常見索引類型的刪除4關(guān)于索引類型的注意事項(xiàng)7.1索引的功能與類型介紹68當(dāng)MySQL數(shù)據(jù)庫(kù)中表的數(shù)據(jù)量非常大的時(shí)候,數(shù)據(jù)的檢索速度也會(huì)降低。此時(shí),索引的建立就會(huì)變得非常有用,可以大大提高檢索速度。如果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年文化產(chǎn)業(yè)發(fā)展專項(xiàng)貸款擔(dān)保合同規(guī)范版
- 2025年國(guó)際金融峰會(huì)會(huì)務(wù)執(zhí)行與贊助商權(quán)益保障協(xié)議
- 2025年北京一卡通智能管理系統(tǒng)建設(shè)與維護(hù)合同
- 2025年特色書店經(jīng)營(yíng)權(quán)轉(zhuǎn)讓合同文本
- 2025年5G通信技術(shù)市場(chǎng)分析及戰(zhàn)略規(guī)劃咨詢服務(wù)合同
- 2025年地?zé)崮荛_發(fā)利用項(xiàng)目造價(jià)咨詢補(bǔ)充協(xié)議模板
- 2025年度企業(yè)內(nèi)部員工短期應(yīng)急資金借貸合同
- 2025年企業(yè)債務(wù)優(yōu)化與轉(zhuǎn)移策略執(zhí)行合同范本
- 2025年別墅租賃合同交接與租賃期限優(yōu)化調(diào)整及費(fèi)用調(diào)整協(xié)議
- 2025年國(guó)際學(xué)校入學(xué)資質(zhì)審核與全程跟蹤輔導(dǎo)服務(wù)合同
- (完整)高中英語(yǔ)3500詞匯表
- 營(yíng)養(yǎng)風(fēng)險(xiǎn)篩查(NRS2002)解讀
- 病歷書寫基本規(guī)范國(guó)家衛(wèi)健委2021年
- DB43-T 140-2023 造林技術(shù)規(guī)程
- 應(yīng)用PDCA管理工具提高病案歸檔率
- 過敏性休克病例討論
- 考研英語(yǔ)閱讀理解精讀100篇
- GA/T 1343-2016防暴升降式阻車路障
- 對(duì)蝦產(chǎn)品質(zhì)量分級(jí)要素及評(píng)價(jià)技術(shù)課件
- 六年級(jí)解方程練習(xí)題02177
- 電子電路專業(yè)資料:PCB加工工藝要求說明書
評(píng)論
0/150
提交評(píng)論