張方興,多年一線開發程序員,著有《微服務分布式架構基礎與實戰:基於Spring Boot Spring Cloud》《高性能Java架構:核心原理與案例實戰》《鴻蒙入門:HarmonyOS應用開發》。
1. 專注於MySQL複雜查詢,一門關係型數據庫學好之後學習其他數據庫就會觸類旁通、特別輕鬆。
2. 專注於企業級SQL複雜查詢,不止學術領域,更多針對就業相關實例的指導。
3. 攜帶SQL複雜查詢面試題,可以方便就業面試時進行針對性復習。
4. 專注於解決思路思想和演化過程。
MySQL不僅可以滿足企業級應用的需求,還可以用於個人項目和學術研究。學習複雜查詢是非常重要的,因為複雜查詢可以幫助你更好地理解和使用MySQL。以下是學習 MySQL複雜查詢的一些重要原因。
(1) 高效查詢: 學習MySQL複雜查詢可以幫助你更好地理解如何使用索引、子查詢和聯合查詢等技術,從而實現更高效的查詢。這可以提高查詢性能,減少查詢時間和資源消耗。
(2) 數據庫管理: 學習MySQL複雜查詢可以幫助你更好地理解如何使用存儲過程、觸發器和視圖等技術,從而實現更高效的數據庫管理。這可以提高數據庫的可靠性、安全性和可維護性。
(3) 應用開發: 學習MySQL複雜查詢可以幫助你更好地理解如何使用MySQL進行應用開發。這可以幫助你更好地設計數據庫結構,編寫高效的查詢語句,從而實現更高效的應用開發。
學習 MySQL 複雜查詢是非常重要的,無論你是 MySQL 的新手還是專業人士,學習 MySQL 複雜查詢都可以幫助你更好地實現更高效的數據庫管理和應用開發。
筆者在編寫本書之前已經構思了數年,將多年操作數據庫的經驗與工作中實際發生的複雜增、刪、改、查需求盡可能“塞進”一本書裡。
如果是Java程序員、PHP程序員等高級語言類程序員閱讀完本書之後,在實際工作中幾乎不會再遇到可以難倒你的增、刪、改、查問題。
本書主要內容
第1章和第2章鋪墊SQL語句查詢的基礎,包含基礎查詢及多表聯查等內容,前兩章內容無論是工作與學習都是技術。
第3章簡單講解MySQL元數據與數據庫一些技術數據的管理,使讀者對數據庫底層有更深的理解。
第4~8章深度講解MySQL 8.0的函數與數據類型,與其他書籍不同的是此處不僅對每種數據類型和函數進行深度講解,還針對不同的數據類型進行複雜查詢練習。進行複雜查詢練習時也是針對解題思路,用一步一步的方式進行講解,重要的不是最終答案,而是解題過程中所需要思考的內容。
第9~11章講解數據庫的視圖、臨時表、存儲過程、預編譯語句、觸發器、自定義函數等MySQL高級技巧。每種技巧都搭配了在實際工作中可能出現的應用場景,絕非只列舉技術,而是通過工作時所出現需求的方式對其進行講解。
第12章和第13章講解MySQL的事務、鎖、備份等維護數據庫的內容,並且增加了面試時常見的MySQL複雜查詢面試題。
附錄A記錄了MySQL全部語句格式的釋義,方便讀者對MySQL有更深刻的認識,並且列出了書籍中使用的數據庫表格式及內容。
閱讀建議
本書是一本基礎入門加實戰的書籍,既有基礎知識,又有複雜查詢的示例。建議讀者在學習基礎知識時多嘗試在計算機上運行,可以增強對基礎知識的記憶與理解。進行複雜查詢學習時建議不要直接看答案和步驟,先嘗試自己進行解題,然後通過書中的解題思路進行對照。
任何複雜查詢的答案都是毫無意義的,重要的是一步步解題的過程和思路。如何通過眾多基礎知識的組合得到答案,這些思路才是學習複雜查詢的重點。
在元數據、視圖、臨時表、存儲過程、預編譯語句、觸發器、自定義函數、事務、鎖等技術內容上,可以嘗試除了筆者提出業務上執行過的場景之外,讀者自行想一些可能出現的技術類場景,並進行實現。針對自己提出的問題,自己進行解答,這才是更好的學習方法。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應章節的二維碼,可以在線學習。
由於編者水平有限,書中難免存在不妥之處,請讀者見諒,並提寶貴意見。
張方興2023年12月
本書源碼
教學課件(PPT)
第1章SQL語句基礎與精講select關鍵字
1.1SQL查詢語句基礎
1.1.1SQL簡介
1.1.2SQL的語句類型
1.1.3關係數據庫的組成
1.1.4查詢語句的基本規則
1.1.5dual虛擬表
1.1.6數字計算符號的特殊情況
1.2精講select關鍵字
1.2.1select常規語法
1.2.2distinct關鍵字
1.2.3straight_join關鍵字
1.2.4sql_result關鍵字
1.2.5sql_cache關鍵字
1.2.6group by與having關鍵字
1.2.7order by關鍵字
1.2.8with rollup關鍵字
1.2.9window關鍵字
1.2.10limit與offset關鍵字
1.2.11limit分頁相關公式
1.2.12for關鍵字
1.3MySQL 8.0的內置函數與幫助
1.3.1了解MySQL自帶的實例庫
1.3.2通過MySQL 8.0內置文檔了解MySQL 8.0函數
1.4條件查詢
1.4.1MySQL中的比較運算符
1.4.2like關鍵字
1.4.3strcmp()函數
1.4.4MySQL中的正則表達式語法
第2章子查詢與連接查詢
2.1子查詢
2.1.1子查詢的作用
2.1.2子查詢作為列值
2.1.3外層嵌套子查詢
2.1.4使用子查詢進行比較
2.1.5子查詢的相關關鍵字
2.1.6行內子查詢與構造表達式
2.1.7子查詢作為派生表
2.2連接查詢
2.2.1連接查詢語句
2.2.2笛卡兒積
2.2.3交叉連接
2.2.4左連接
2.2.5右連接
2.2.6拼接
2.2.7全連接
2.2.8內連接
2.2.9並集去交集
2.2.10自連接
第3章MySQL元數據相關查詢
3.1show關鍵字
3.1.1show關鍵字查看某實例庫中含有的表
3.1.2show關鍵字查看表結構
3.1.3show關鍵字查看binlog日志
3.1.4show關鍵字查看相關創建語句信息
3.1.5show關鍵字查看MySQL支持哪些引擎
3.2數據庫的系統變量元數據與set關鍵字
3.2.1set關鍵字用於用戶自定義變量
3.2.2set關鍵字用於環境變量
3.2.3sql_mode變量
3.2.4根據用戶自定義變量增加列的行號
3.3表的元數據
3.3.1表的元數據查詢
3.3.2表信息中的row_format字段
3.3.3表信息中的data_free字段
3.3.4MySQL各表占用磁盤空間計算方式
3.3.5利用optimize關鍵字優化空間碎片
3.3.6查看表中的約束
3.4列的元數據
3.5用戶權限的元數據
3.5.1查詢當前MySQL中含有哪些用戶
3.5.2用戶的操作權限
3.5.3表的操作權限
3.5.4列的操作權限
第4章SQL字符串的查詢與處理
4.1MySQL 8.0中的字符串
4.1.1字符、字符集與字符串
4.1.2字符集與排序
4.1.3字符串各數據類型的存儲空間
4.1.4char類型與varchar類型
4.1.5varchar類型的長度誤區
4.1.6binary類型與varbinary類型
4.1.7blob類型與text類型
4.1.8enmu類型
4.1.9set類型
4.2字符串相關常用函數
4.2.1concat()函數(多列拼接)
4.2.2group_concat()函數(多行拼接)
4.2.3replace()函數
4.2.4rege__substr()函數
4.2.5substr()函數與substring()函數
4.2.6substring_index()函數
4.2.7instr()函數與locate()函數
4.2.8length()函數
4.2.9reverse()函數
4.2.10right()函數與left()函數
4.2.11rpad()函數
4.2.12space()函數
4.2.13trim()、rtrim()、ltrim()函數
4.2.14upper()函數與lower()函數
4.2.15repeat()函數
4.2.16insert()函數
4.2.17elt()函數
4.2.18concat_ws()函數
4.3MySQL 8.0處理字符串相關的複雜查詢
4.3.1查詢總經理名稱並增加單引號
4.3.2將數字數據和字符數據分開
4.3.3計算字符串中特定字符出現的次數
4.3.4提取分隔符數據中的第N個數據
第5章SQL數字的查詢與處理
5.1MySQL 8.0的數字
5.1.1MySQL 8.0中的數字類型
5.1.2tinyint類型、bool類型、boolean類型
5.1.3無符號整數類型
5.1.4數字類型的精度
5.2數字常用函數與運算符
5.2.1div()函數
5.2.2abs()函數
5.2.3ceiling()函數
5.2.4floor()函數
5.2.5pow()函數和power()函數
5.2.6rand()函數
5.2.7truncate()函數
5.3聚合函數
5.3.1count(distinct)函數
5.3.2查詢每個部門的平均薪資
5.3.3查詢每個部門的薪資最高與最低的人(攜帶提成)
5.3.4查詢每個部門的薪資總額
5.3.5查詢每個部門有多少人
5.3.6查詢每個部門有多少人沒有提成
5.3.7查詢某個部門薪資占全公司的百分比
5.4窗口函數
5.4.1窗口函數的語法
5.4.2初步使用窗口函數
5.4.3partition by關鍵字
5.4.4order by關鍵字
5.4.5rank()函數
5.4.6dense_rank()函數
5.4.7percent_rank()函數
5.4.8ntile()函數
5.5聚合函數窗口化
5.6MySQL 8.0處理數字相關的複雜查詢
5.6.1計算眾數
5.6.2計算中值
第6章SQL日期的查詢與處理
6.1MySQL 8.0的日期
6.1.1MySQL 8.0中的日期類型
6.1.2date類型
6.1.3datetime類型
6.1.4time類型
6.1.5year類型
6.2獲取當前日期和時間函數
6.3日期的運算
6.4日期的比較
6.5日期的區間
6.6MySQL 8.0中的時區
6.7日期相關常用函數
6.7.1adddate()與date_sub()
6.7.2addtime()
6.7.3date()和time()
6.7.4timestamp()
6.7.5datediff()
6.7.6timediff()
6.7.7timestampdiff()
6.7.8day()等提取函數
6.7.9dayname()
6.7.10dayofweek()和dayofyear()
6.7.11extract()
6.7.12from_unixtime()
6.7.13str_to_date()與date_format()
6.7.14get_format()
6.7.15sec_to_time()
6.8MySQL 8.0處理日期相關的複雜查詢
6.8.1張三今年多少歲
6.8.2判斷今年是不是閏年
第7章SQL對JSON與XML的查詢與處理
7.1MySQL 8.0的JSON
7.1.1JSON類型的使用場景
7.1.2初識MySQL 8.0中的JSON類型
7.2JSON相關常用函數
7.2.1json_object()
7.2.2json_array()
7.2.3json_valid()
7.2.4json_contains()
7.2.5json_contains_path()
7.2.6json_extract()
7.2.7json_unquote()
7.2.8json_search()
7.2.9“-”符號和“-”符號
7.2.10json_keys()
7.2.11json_value()
7.3MySQL 8.0的XML
7.4XML相關常用函數
7.4.1extractvalue()
7.4.2updatexml()
第8章SQL對結果集的查詢與處理
8.1MySQL 8.0的結果集
8.1.1什麼是處理結果集
8.1.2處理結果集的方式
8.2條件判斷函數
8.2.1if()函數
8.2.2case關鍵字
8.3表的展示方式
8.3.1橫表與縱表
8.3.2將縱表讀取為橫表進行展示
8.3.3將橫表讀取為縱表進行展示——union all寫法
8.3.4將橫表讀取為縱表進行展示——max()函數寫法
8.4MySQL 8.0處理結果集相關的複雜查詢
8.4.1將一行分割為多行
8.4.2將多行合並為一行(合並為分隔符數據)
8.4.3將多列合並為一列
8.4.4將一列分割為多列
第9章MySQL的視圖與臨時表
9.1MySQL 8.0的視圖
9.1.1概念
9.1.2語法
9.1.3使用示例
9.1.4管理
9.2MySQL 8.0的with as關鍵字
9.2.1概念
9.2.2語法
9.2.3使用示例
9.3MySQL 8.0的臨時表
9.3.1概念
9.3.2語法
9.3.3使用示例
9.3.4臨時復制表
9.4MySQL 8.0的內存表
9.4.1概念
9.4.2MySQL 8.0內存表和臨時表的區別
9.4.3語法
9.4.4使用示例
9.4.5管理
第10章MySQL的存儲過程與預編譯語句
10.1MySQL 8.0存儲過程概念
10.1.1無參存儲過程的創建與調用
10.1.2查看MySQL當前含有的存儲過程
10.1.3刪除存儲過程
10.1.4體驗存儲過程中含有部分報錯
10.2MySQL 8.0存儲過程的參數
10.2.1in參數
10.2.2out參數
10.2.3inout參數
10.3MySQL 8.0存儲過程的控制流
10.3.1declare關鍵字
10.3.2set關鍵字
10.3.3if關鍵字
10.3.4case關鍵字
10.3.5while關鍵字
10.3.6repeat關鍵字
10.3.7leave關鍵字
10.3.8iterate條件語句
10.4遊標
10.4.1SQL中遊標的概念
10.4.2存儲過程中遊標的概念
10.5MySQL 8.0的預編譯語句
10.5.1概念
10.5.2特性
10.5.3預編譯語句與存儲過程的區別
10.5.4創建無參預編譯語句
10.5.5創建有參預編譯語句
10.5.6管理及刪除預編譯語句
第11章MySQL的觸發器和自定義函數
11.1MySQL 8.0觸發器概念
11.1.1觸發器特點
11.1.2觸發器語法
11.1.3觸發器示例
11.1.4觸發器管理
11.1.5觸發器的刪除
11.2MySQL 8.0自定義函數概念
11.2.1自定義函數的優點
11.2.2自定義函數的語法
11.2.3自定義函數示例
11.2.4管理及刪除自定義函數
11.3signal sqlstate拋出異常概念
11.3.1在觸發器中使用signal語句
11.3.2在函數中使用signal語句
11.3.3在存儲過程中使用signal語句
第12章MySQL的事務與鎖
12.1事務概念
12.1.1事務的關鍵字
12.1.2事務的四大特性
12.1.3事務的保存點savepoint
12.1.4事務在存儲過程、觸發器、自定義函數中的使用
12.2鎖的概念
12.2.1行級鎖的概念
12.2.2表級鎖的概念
12.2.3事務的隔離級別
12.2.4死鎖的檢測與解決
第13章MySQL備份與複雜查詢面試題
13.1備份工具mysqldump
13.1.1使用mysqldump以SQL格式轉儲數據
13.1.2重新加載SQL格式備份
13.1.3使用mysqldump以分割文本格式轉儲數據
13.1.4重新加載分隔文本格式備份
13.1.5mysqldump小技巧
13.2複雜查詢面試題——動漫評分
13.2.1涉及的表
13.2.2解題步驟
13.3複雜查詢面試題——查詢連續出現3次的數字
13.3.1涉及的表
13.3.2解題步驟——虛擬連接方式
13.3.3解題步驟——變量方式
13.4複雜查詢面試題——訂單退款率
13.4.1涉及的表
13.4.2解題步驟
附錄ASQL語句分類
A.1MySQL 8.0的SQL語句分類
A.1.1數據定義類語句
A.1.2數據操作類語句
A.1.3事務和鎖定類語句
A.1.4集群復制類語句
A.1.5預編譯類語句
A.1.6存儲過程類語句
A.1.7數據庫管理類語句
A.1.8數據庫工具類語句
A.2本書測試表的相關數據及結構
A.2.1學校系列表結構
A.2.2公司系列表結構
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。