SQL查詢數據
完整語法
Select [select選項] 字段列表[字段別名]/* from 數據源 [where條件子句] [group by子句] [having子句] [order by子句] [limit 子句];
Select選項
*、All: 保留所有的結果/Distinct: 去重。
字段別名
多表查詢的時候, 會有同名字段。需要對字段名進行重命名。
數據源
數據源: 數據的來源, 關系型數據庫的來源都是數據表。數據源分為多種: 單表數據源, 多表數據源, 查詢語句(子查詢)
單表數據源: select * from 表名;
多表數據源: select* from 表名1,表名2...;
子查詢: 數據的來源是一條查詢語句(查詢語句的結果是二維表) 格式:Select * from (select 語句) as 表名;
Where子句
Where子句: 用來判斷數據,篩選數據。返回結果: 0或者1, 0代表false,1代表true.
判斷條件:
比較運算符: >, <, >=, <= ,!= ,<>, =, like, between and, in/not in
邏輯運算符: &&(and), ||(or), !(not)
Where原理: where是唯一一個直接從磁盤獲取數據的時候就開始判斷的條件: 從磁盤取出一條記錄, 開始進行where判斷: 判斷的結果如果成立保存到內存;如果失敗直接放棄.
Group by子句
Group by:分組是為了統計數據(按組統計: 按分組字段進行數據統計)
SQL提供了一系列統計函數
Count(): 統計分組后的記錄數:,每一組有多少記錄。可以使用兩種參數: [*] 代表統計記錄、[字段名]代表統計對應的字段(NULL不統計)
Max(): 統計每組中最大的值、Min(): 統計最小值、Avg(): 統計平均值、Sum(): 統計和
注意:
- 分組會自動排序: 根據分組字段:默認升序
- 多字段分組: 先根據一個字段進行分組,然后對分組后的結果再次按照其他字段進行分組
- group_concat(字段): 可以對分組的結果中的某個字段進行字符串連接(保留該組所有的某個字段): ;
- with rollup(回溯統計): 任何一個分組后都會有一個小組, 最后都需要向上級分組進行匯報統計: 根據當前分組的字段. 這就是回溯統計: 回溯統計的時候會將分組字段置空.
Having子句
Having子句: 與where子句一樣: 進行條件判斷的。Where是針對磁盤數據進行判斷: 進入到內存之后,會進行分組操作: 分組結果就需要having來處理.
Having能做where能做的幾乎所有事情, 但是where卻不能做having能做的很多事情.
- 分組統計的結果或者說統計函數都只有having能夠使用.
- Having能夠使用字段別名: where不能: where是從磁盤取數據,而名字只可能是字段名: 別名是在字段進入到內存后才會產生.
Order by子句
Order by: 排序, 根據某個字段進行升序或者降序排序, 依賴校對集.
排序可以進行多字段排序: 先根據某個字段進行排序, 然后排序好的內部,再按照某個數據進行再次排序:
Limit子句
Limit子句是一種限制結果的語句: 限制數量.
Limit有兩種使用方式:
方案1: 只用來限制長度(數據量): limit 數據量;
方案2: 限制起始位置,限制數量: limit 起始位置,長度;(記錄數從0開始)
Limit方案2主要用來實現數據的分頁: 為用戶節省時間,提交服務器的響應效率, 減少資源的浪費.
對於用戶來講: 可以點擊的分頁按鈕: 1,2,3,4
對於服務器來講: 根據用戶選擇的頁碼來獲取不同的數據: limit offset,length;
Length: 每頁顯示的數據量: 基本不變
Offset: offset = (頁碼 - 1) * 每頁顯示量
