mysql單表多表查詢
單表查詢語法:
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單表多表查詢