第1章 數(shù)據(jù)庫和SQL
數(shù)據(jù)庫(DB):將大量數(shù)據(jù)保存起來,通過計(jì)算機(jī)加工而成的可以進(jìn)行高效訪問的數(shù)據(jù)集合。
數(shù)據(jù)庫管理系統(tǒng)(DBMS):用來管理計(jì)算機(jī)的系統(tǒng)。
服務(wù)器:用來接收其他程序程序發(fā)出的請(qǐng)求,并對(duì)該請(qǐng)求進(jìn)行相應(yīng)處理的程序,或者安裝了此類程序的設(shè)備。
客戶端:向服務(wù)器發(fā)送請(qǐng)求的程序,或者安裝了此類程序的設(shè)備。
SQL語句及其種類:SQL用關(guān)鍵字、表名、列名等組合而成的一條語句來描述操作的內(nèi)容。種類包括:DDL、DML、DCL。
數(shù)據(jù)庫的創(chuàng)建:CREATE DATABASE <數(shù)據(jù)庫名稱>;
表的創(chuàng)建:CREATE TABLE
命名規(guī)則:只能使用半角英文字母、數(shù)字、下劃線,且必須以半角英文字母開頭。
數(shù)據(jù)類型:INTEGER型,CHAR型,VARCHAR型,DATE型
約束條件:NOT NULL、PRIMARY KEY
表的刪除 :DROP TABLE <>;
表定義的更新: 添加列 ALTER TABLE <> ADD COLUMN <>; 刪除列 ALTER TABLE <> DROP COLUMN <>; 插入數(shù)據(jù) INSERT INTO <> VALUES ();
第2章 查詢基礎(chǔ)
簡(jiǎn)單查詢:SELECT <> FROM <>;
設(shè)置別名:AS
去重:DISTINCT
算術(shù)運(yùn)算符:+ 、 - 、 * 、 /
比較運(yùn)算符: = 、 <>、 >= 、 >、 <、 <= (注意:不能對(duì)NULL使用比較運(yùn)算符,IS NULL ;IS NOT NULL)
邏輯運(yùn)算符: NOT 、 AND 、OR
第3章 聚合與排序
聚合函數(shù): COUNT 、SUM 、 AVG 、MAX 、 MIN
分組:GROUP BY
HAVING字句,放在GROUP BY 之后
排序:ORDER BY
ASC升序 , DESC降序
排序NULL值放在最后
第4章 數(shù)據(jù)更新
數(shù)據(jù)插入 INSERT INTO < > ()VALUES ();
插入默認(rèn)值 DEFAULT
復(fù)制其他表的內(nèi)容:INSERT INTO < > () SELECT
數(shù)據(jù)的刪除:DROP TABLE 將表完全刪除,DELETE會(huì)留下表,刪除表中的全部?jī)?nèi)容
數(shù)據(jù)的更新:UPDATE <表名> SET <列名> = <表達(dá)式>;
事務(wù):需要在同一個(gè)處理單元中執(zhí)行的一系列更新處理的集合。
創(chuàng)建事務(wù):START TRANSACTION;(MySQL)
COMMIT——提交處理
ROLLBACK——取消處理
事務(wù)具有ACID特性:
- 原子性(Atomicity):在事務(wù)結(jié)束時(shí),其中所包含的更新處理要么全部執(zhí)行,要么完全不執(zhí)行。
- 一致性(Consistency): 事務(wù)中包含的處理要滿足數(shù)據(jù)庫提前設(shè)置的約束,如主鍵約束或者NOT NULL約束。
- 隔離性(Isolation):不同事務(wù)之間互不干擾。
- 持久性(Durability):也稱耐久性,指的是在事務(wù)結(jié)束后,DBMS能夠保證該時(shí)間點(diǎn)的數(shù)據(jù)狀態(tài)會(huì)被保存的特性。
第5章 復(fù)雜查詢
視圖:“從SQL的角度來看視圖就是一張表” 與表的區(qū)別在于是否保存了實(shí)際的數(shù)據(jù)。視圖就是保存好的SELECT語句。
使用視圖的優(yōu)點(diǎn):
- 無需保存數(shù)據(jù),節(jié)省了存儲(chǔ)設(shè)備的數(shù)據(jù)空間。
- 將頻繁使用的SELECT語句保存成視圖,不用每次都重復(fù)書寫。
創(chuàng)建視圖的方法:CREATE VIEW 視圖名稱 (<視圖列名1>,<視圖列名2>,<>,······) AS <SELECT語句>
視圖的限制: - 定義視圖時(shí)不能使用ORDER BY 子句
- 對(duì)視圖進(jìn)行更新需要滿足這些條件(1.SELECT子句中未使用DISTINCT 2.FROM子句中只有一張表 3.未使用GROUP BY 4. 未使用HAVING)
刪除視圖:DROP VIEW
子查詢:一言以蔽之,子查詢就是一次性視圖。與視圖不同,子查詢?cè)赟ELECT語句執(zhí)行完畢之后就會(huì)消失。
標(biāo)量子查詢:必須而且只能返回1行1列的結(jié)果。
標(biāo)量子查詢的書寫位置:能夠使用常數(shù)或者列名的地方,無論是SELECT子句、GROUP BY子句、HAVING子句,還是ORDER BY子句,幾乎所有的地方都可以使用。
關(guān)聯(lián)子查詢:在子查詢中添加WHERE子句的條件
以一個(gè)例子來說明:通過關(guān)聯(lián)子查詢按照商品種類對(duì)平均銷售單價(jià)進(jìn)行比較
SELECT product_type,product_name,sale_price
FROM Product AS P1
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product AS P2
WHERE P1.product_type = P2.product_type
GROUP BY product_type);
第6章 函數(shù)、謂詞、CASE表達(dá)式
算術(shù)函數(shù):+,-,*,/,ABS絕對(duì)值,MOD求余,ROUND四舍五入
字符串函數(shù):||——拼接,在MySQL中用CONCAT函數(shù);LENGTH——字符串長度;LOWER——小寫轉(zhuǎn)換;REPLACE——字符串的替換;SUBSTRING——字符串的替換;UPPER——大寫轉(zhuǎn)換;
日期函數(shù):CURRENT_DATE——當(dāng)前日期(MySQL);CURRENT_TIME——當(dāng)前時(shí)間;CURRENT_TIMESTAMP——當(dāng)前日期和時(shí)間;EXTRACT——截取日期元素
轉(zhuǎn)換函數(shù):CAST——類型轉(zhuǎn)換;COALESCE——將NULL轉(zhuǎn)換為其他值
謂詞:
LIKE——字符串的部分一致查詢 %代表“0字符以上的任意字符串” ,_代表“任意一個(gè)字符串”
BETWEEN——范圍查詢
IS NULL、IS NOT NULL —— 判斷是否為NULL
IN——OR的簡(jiǎn)單用法
EXIST 判斷是否存在滿足某種條件的記錄,如果存在這樣的記錄就返回為真,如果不存在就返回為假。EXIST通常用關(guān)聯(lián)子查詢作為參數(shù)。
CASE表達(dá)式 CASE WHEN <> THEN <> ELSE <> END
第7章 集合運(yùn)算
行方向:UNION(并集),UNION ALL (包含重復(fù)項(xiàng)),INTERSECT(交集)——選取表中的公共部分,EXCEPT——用a表減去ab倆表公共的部分
列方向(表的聯(lián)結(jié)):內(nèi)聯(lián)結(jié)——INNER JOIN, 外聯(lián)結(jié)——OUTER JOIN 選取主表的全部信息(用LEFT、RIGHT來指定主表)
交叉聯(lián)結(jié)——CROSS JOIN (不常用) 笛卡爾積
第8章 SQL高級(jí)用法
窗口函數(shù)也稱OLAP(Online Analysis Processing)函數(shù),能對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理。
語法:<窗口函數(shù)> OVER ([PARTITION BY <列清單>] ORDER BY <排序用列清單>)
- 能過作為窗口函數(shù)使用的函數(shù):(SUM,AVG,COUNT,MAX,MIN)
- RANK、DENSE_RANK、ROW_NUMBER
PARTITION BY設(shè)定排序的對(duì)象范圍(橫向?qū)Ρ矸纸M)。
ORDER BY 指定按哪一列、何種順序進(jìn)行排序(縱向排序)。
窗口函數(shù)只能在SELECT子句之中使用。因?yàn)樵贒BMS內(nèi)部,窗口函數(shù)是對(duì)WHERE子句或者GROUP BY子句處理后的“結(jié)果”進(jìn)行的操作。
將聚合函數(shù)當(dāng)作窗口函數(shù)使用時(shí)的最大特征是以“自身記錄”作為基準(zhǔn)進(jìn)行統(tǒng)計(jì),SUM可以實(shí)現(xiàn)累計(jì)的功能。
用AVG計(jì)算移動(dòng)平均
SELECT product_id,product_name,product_price,
AVG (sale_price) OVER (ORDER BY product_id ROWS 2 PRECEDING) AS moving_avg
FROM Product;
ROWS(行)和PRECEDING(之前) 表示選之前的三行
GROUPING運(yùn)算符
ROLLUP——同時(shí)得出合計(jì)和小計(jì)
GROUPING——讓NULL更加容易分辨
CUBE——用數(shù)據(jù)來搭積木
GROUPING SETS——取得期望的積木