緣由 每天學習一段時間發現,瑣瑣碎碎的學習,對日常的工作幫助很大,避免了之前踩過的各種坑; 但,對於這些坑是如何形成的,深挖一會兒就不行了。 思考之下,發現,平時的所學如同學習如何填坑; 系統性的學習,才是,從斷面看這個坑,時間跨度上看這個坑的形成和填上,也可以說,是升級我們的鏟子; 那句話怎麼說來 ...
緣由
每天學習一段時間發現,瑣瑣碎碎的學習,對日常的工作幫助很大,避免了之前踩過的各種坑;
但,對於這些坑是如何形成的,深挖一會兒就不行了。
思考之下,發現,平時的所學如同學習如何填坑;
系統性的學習,才是,從斷面看這個坑,時間跨度上看這個坑的形成和填上,也可以說,是升級我們的鏟子;
那句話怎麼說來著,手裡有了錘子,看什麼都是釘子;
所以,我們從基礎開始;
之前也寫過“必知必會”的讀後感,長久不用,現在又需要再拾點東西了
最基礎部分
幾個問題想一下:
- 什麼是資料庫?
- 什麼是sql?
- 什麼是MySQL?
這個其實就是整個資料庫最基礎的地方,卻總是讓大神都能卡下殼的時候;
其實簡單理解就好:
- 資料庫就是數據的倉庫,也就是存儲數據的地方(軟體?);
- sql,結構化查詢語言,用於和資料庫通信;
- MySQL是一種DBMS
是不是什麼都看得懂,又什麼都不懂,那就對了;
繼續
- 資料庫用於存儲數據,存儲那種可以具有邏輯關係的數據,在資料庫中,所有數據被結構化描述;
- sql,是一種語言,語句簡單但功能強大,用於和資料庫通信,實現對資料庫的各種操作,是給資料庫下命令的方式;
- MySQL是一種DBMS,DBMS是資料庫管理系統,通常就是我們說的資料庫;
差不多了吧,那再具體一點,一些其他概念:
- 列:某一個欄位,數據的一個特性;
- 行:特定某一條數據;
- 表:=列+行;數據的結構化清單;
- MySQL是屬於基於客戶機+伺服器的,資料庫操作實際發生在伺服器,對客戶透明;客戶機可以是MySQL提供的工具(命令行工具),可以是各種語言:PHP,JAVA等(註意這裡概念的理解)
- SHOW命令的使用:
SHOW DATABASES;
SHOW TABLES;
SHOW STATUS;
## 顯示伺服器狀態
SHOW COLUMNS FORM table_name;
SHOW CREATE database;
SHOW CREATE table;
## 顯示創建語句
SHOW WARNINGS;
SHOW ERRORS;
SHOW GRANTS;
## 顯示授權用戶
SELECT
SELECT是資料庫中,最常用的操作了,我們重點說下這個,其他涉及到了的話具體補上;
DISTINCT
DISTINCT是不查到重覆的行;
需要註意的是,其對多個列的,是要求每個都不一樣的才行,對單一沒問題,多個有問題,參考:
2.作用於多列
示例2.1
select distinct name, id from A
執行後結果如下:
實際上是根據name和id兩個欄位來去重的,這種方式Access和SQL Server同時支持。
示例2.2
select distinct xing, ming from B
返回如下結果:
返回的結果為兩行,這說明distinct並非是對xing和ming兩列“字元串拼接”後再去重的,而是分別作用於了xing和ming列。
指定多個列排序
排序按照所規定的順序;
比如,按照age,gender兩列排序,會按照age先排,然後年齡相同的,再按照gender去排;
IN操作符
IN操作符的功能幾乎和OR是一樣的,但我們還是推薦使用IN
- 更直觀;
- 易管理;
- IN一般比OR清單執行更快(註意條件)
- 更加適用於子查詢情況下
通配符
一般情況下,一定不要放在起始位置,特別慢!!!
GROUP BY等
用到聚集類型的,請一定加上GROUP BY;
使用HAVING來過濾GROUP BY;
由此帶來SELECT的順序問題:
SELECT id,COUNT(count),name
FROM test_table
WHERE id > 100
GROUP BY name
HAVING COUNT(count) > 2
ORDER BY id DESC
LIMIT 100
聯結
自聯結 = 多個條件查詢
自然聯結,外部聯結什麼的好暈,打算留坑
可以開坑的地方
- sql中的正則表達式(正則表達式也該複習了。。。)
- sql的聯結
- 組合查詢
- 全文本搜索
- 視圖
- 存儲過程
- 游標
- 觸發器
- 事務處理
- 全球化和本地化
- 安全管理
- 維護
- 性能優化
每個都能扯一大堆..我們這一個月好好戰一下好吧...