1. 程式人生 > >mysql單表多表查詢

mysql單表多表查詢

運算 left count family 查詢 多表連接查詢 聲明 結果 優先

單表查詢語法:

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單表多表查詢