標籤:彙總 min() 去重 mysq 姓名 strong 技術分享 count() and
單表查詢文法:
select 欄位1,欄位2... from 表名
where 條 件
group by field
having 篩選
order by 欄位
limit
限制條數 關鍵字的優先順序:from > where > group by > having > select > distinct > order by > limit;
1.找到表:from
2.拿著where指定的約束條件,去檔案/表中取出一條條記錄
3.將取出的一條條記錄進行分組group by,如果沒有group by,則整體作為一組
4.按照select後的欄位得到一張新的虛擬表,如果有彙總函式,則將組內資料進行彙總
5.將4的結果過濾:having,如果有彙總函式也是先執行彙總再having過濾
6.查出結果:select
7.去重 distinct
8.將結果按條件排序:order by desc(降序,預設升序)
9.限制結果的顯示條數 limit
where是一種約束條件,mysql會拿著where指定的條件去表中取資料,而having則是在取出資料後進行過濾.
where字句中可以使用:
1. 比較子:> < >= <= <> !=
2. between 80 and 100 值在10到20之間
3. in(80,90,100) 值是10或20或30
4. like ‘王%‘
可以是%或_,
%表示任意多字元
_表示一個字元
5. 邏輯運算子:在多個條件直接可以使用邏輯運算子 and or not
group by 分組查詢:以按照任意欄位分組,但分完組後,只能查看分組的那個欄位,要想取的組內的其他欄位資訊,需要藉助函數。
彙總函式:
group_concat 只跟group by 連用 查看分組後的組內成員
count() 統計成員個數
avg() 計算平均值
sum() 計算和
max() 找到最大值
min() 找到最小值
having 過濾:
執行優先順序從高到低:where > group by > 彙總函式 > having
1. Where 是一個約束聲明,使用Where約束來自資料庫的資料,Where是在結果返回之前起作用的(先找到表,按照where的約束條件,從表(檔案)中取出資料),Where中不能使用彙總函式。
2. Having是一個過濾聲明,是在查詢返回結果集以後對查詢結果進行的過濾操作(先找到表,按照where的約束條件,從表(檔案)中取出資料,然後group by分組,如果沒有group by則所有記錄整體為一組,然後執資料列彙總函式,然後使用having對彙總的結果進行過濾),在Having中可以使用彙總函式。
3. having可以放到group by之後,而where只能放到group by之前
4. 在查詢過程中彙總語句(sum,min,max,avg,count)要比having子句優先執行。而where子句在查詢過程中執行優先順序高於彙總語句。
order by 排序
限制查詢的記錄數:limit
多表串連查詢:
內串連:..... inner join...on 串連條件........
左串連:....... left join... on 串連條件.,.......
右串連:....... right join ... on 串連條件....
全串連:......union.........
子查詢:
1:子查詢是將一個查詢語句嵌套在另一個查詢語句中。
2:內層查詢語句的查詢結果,可以為外層查詢語句提供查詢條件。
3:子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關鍵字
4:還可以包含比較子:= 、 !=、> 、< 等
附:串連查詢跟子查詢同時查詢題一道
查詢物理課程比生物課程高的學生的姓名和學號
mysql單表多表查詢