#### 基本語法(查詢所有字段)
~~~
select * from 表名;
~~~
#### 基本語法(根據字段查詢value)
~~~
select 字段1,字段2,字段3 from 表名;
~~~
#### 完整的數據查詢
~~~
select 選項 字段列表 from 數據源 where條件 group by分組 having條件 order by排序 limit限制;
~~~
~~~
select * from 數據源; //這部分是查詢主句
~~~
~~~
where條件 group by分組 having條件 order by排序 limit限制; //這部分是條件查詢五子句
~~~
#### select選項 : 系統該如何對待查詢得到的結果.
1. all : 默認的,表示保存所有的記錄.
2. distinct : 去重,去除重復的記錄(所有字段都是重復的),只保留一條.
#### 去重
~~~
select distinct * from 表名;
~~~
#### 字段別名
有的時候需要從多張表獲取數據,在獲取數據的時候,可能存在不同表中有同名的字段,需要將同名的字段命名成不同名的:別名 alias .
~~~
select 字段名 as 別名 from 表名;
~~~
#### from :
1. from 是為前面的查詢提供數據 : 數據源只要是一個符合二維表結構的數據即可.
#### 多表數據
~~~
select * from 表1,表2;
~~~
結果:兩張表的記錄數相乘,字段數拼接
本質:從第一張表取出一條記錄,去拼湊第二張表的所有記錄,保留所有結果。得到的結果在數學上有一個專業的說法:笛卡爾積,這個結果出了給數據庫造成壓力,沒有其他意義:應該盡量避免出現笛卡爾積.
#### 動態數據
1. from 后面跟的數據不是一個實體表,而是一個從表中查詢出來得到的二維結果表(子查詢)
語法:
~~~
select * from (select 字段列表 from 表) as 別名;
~~~
#### where子句(判斷最原始的數據)
1. 用來從數據表獲取數據的時候,然后進行條件篩選.
2. 數據獲取原理 : 針對表去對應的磁盤處獲取所有的記錄(一條條獲取的),where的作用就是在拿到一條結果后就進行判斷,判斷是否符合條件,如果符合就保存下來,如果不符合就直接舍棄(不放到內存中,放到內存中的都是最終要展示給用戶看的).
3. where本身不能進行判斷, 而是通過運算符進行結果比較來判斷數據.
#### group by子句
語法:
~~~
group by 字段名
~~~
1. group by 表示分組的含義,根據指定的字段,將數據進行分組,**分組的目的是為了統計**.
2. Group by是為了分組后進行數據統計的,如果只是想看數據顯示,那么group by沒什么含義:group by將數據按照指定的字段分組之后,只會保留每組的第一條記錄.
3. 利用一些統計函數:(聚合函數)
* count():統計每組中的數量,如果統計目標是字段,那么不統計為空NULL字段,如果為*那么代表統計記錄
* avg():求平均值.
* sum():求和.
* max():求最大值.
* min():求最小值.
* group_concat : 為了將分組中指定的字段進行合并(字符串拼接).
#### 多分組
將數據按照某個字段進行分組之后,對已經分組的數據進行再次分組.
語法:
~~~
group by 字段1,字段2,字段3
~~~
#### 分組排序
Mysql中,分組默認有排序的功能:按照分組字段進行排序,默認是升序.
語法:
~~~
group by 字段 [ asc | desc ]
~~~
#### having字句
Having的本質和where一樣,是用來進行數據條件篩選.
1. Having是在group by子句之后:可以針對分組數據進行統計篩選,但是where不行.
2. Where不能使用聚合函數:聚合函數是用在group by分組的時候,where已經運行完畢.
3. Having在group by分組之后,可以使用聚合函數或者字段別名(where是從表中取出數據,別名是在數據進入到內存之后才有的).
4. 強調:having是在group by之后,group by是在where之后:where的時候表示將數據從磁盤拿到內存,where之后的所有操作都是內存操作.
#### order by 字句
order by排序:根據校對規則對數據進行排序
語法
~~~
order by 字段 [ asc | desc ]; //asc升序,默認的
~~~
1. Order by也可以像group by一樣進行多字段排序:先按照第一個字段進行排序,然后再按照第二個字段進行排序。
~~~
order by 字段1 規則,字段2 規則;
~~~
#### limit 子句
純粹的限制獲取的數量:從第一條到指定的數量.
語法 :
~~~
limit offset length //offset:偏移量(從哪開始) , length :長度(獲取多少條).
~~~
1. Limit通常在查詢的時候如果限定為一條記錄的時候,使用的比較多:有時候獲取多條記錄并不能解決業務問題,但是會增加服務器的壓力.
2.
- 數據庫介紹
- 數據庫基本概念
- SQL介紹
- MySQL服務端架構
- 庫操作
- 表操作
- 字段類型
- 整數類型
- 小數類型
- 字符串類型
- 日期/時間類型
- json類型
- 字段屬性
- Null
- 默認值
- 列描述
- 主鍵
- 自動增長
- 唯一鍵
- 數據庫基礎操作
- 增
- 刪
- 改
- 查
- 運算符
- 算術運算符
- 比較運算符
- 邏輯運算符
- in運算符
- is運算符
- like運算符
- 高級查詢
- 聯合查詢
- 連接查詢
- 交叉連接
- 內連接
- 外連接
- Using關鍵字
- 子查詢
- 標量子查詢
- 列子查詢
- 行子查詢
- 表子查詢
- exists子查詢
- 子查詢特定關鍵字
- 用戶權限管理
- 用戶管理
- 權限管理
- 外鍵
- 外鍵操作
- 外鍵基本要求
- 約束
- 視圖
- 事務安全
- 自動事務
- 手動事務
- 事務特點
- 變量
- 系統變量
- 會話變量
- 局部變量
- 流程結構
- if分支
- while循環
- 函數
- 內置函數
- 字符串函數
- 時間函數
- 數學函數
- 其他函數
- 存儲過程
- 與函數的區別
- 存儲過程操作
- 存儲過程的形參類型
- 觸發器
- 觸發器概念
- 觸發器操作