MYSQL連接的使用
INNER JOIN(內(nèi)連接,或等值連接):獲取兩個(gè)表中字段匹配關(guān)系的記錄何缓。
LEFT JOIN(左連接):獲取左表所有記錄塞绿,即使右表沒有對(duì)應(yīng)匹配的記錄耳幢。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反袄友,用于獲取右表所有記錄挖炬,即使左表沒有對(duì)應(yīng)匹配的記錄传泊。
例:查詢平均成績(jī)小于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)
(包括有成績(jī)的和無成績(jī)的)
student表:
score表:
select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score from student b left join score a on b.s_id = a.s_id GROUP BY b.s_id,b.s_name HAVING avg_score <60
?union
select a.s_id,a.s_name,0 as avg_score from student a where a.s_id not in (select distinct s_id from score);
相關(guān)函數(shù):
1.union 操作符用于連接兩個(gè)以上的 SELECT 語句的結(jié)果組合到一個(gè)結(jié)果集合中。多個(gè) SELECT 語句會(huì)刪除重復(fù)的數(shù)據(jù)遵岩。
2.Round函數(shù)返回一個(gè)數(shù)值你辣,該數(shù)值是按照指定的小數(shù)位數(shù)進(jìn)行四舍五入運(yùn)算的結(jié)果。
3.where group by聯(lián)合使用
select 列a,聚合函數(shù) from 表名 where 過濾條件 group by 列a having 過濾條件
group by 字句也和where條件語句結(jié)合在一起使用。當(dāng)結(jié)合在一起時(shí)绢记,where在前扁达,group by 在后。即先對(duì)select xx from xx的記錄集合用where進(jìn)行篩選蠢熄,然后再使用group by 對(duì)篩選后的結(jié)果進(jìn)行分組 使用having字句對(duì)分組后的結(jié)果進(jìn)行篩選
需要注意having和where的用法區(qū)別:
1.having只能用在group by之后跪解,對(duì)分組后的結(jié)果進(jìn)行篩選(即使用having的前提條件是分組)。
2.where肯定在group by 之前
3.where后的條件表達(dá)式里不允許使用聚合函數(shù)(AVG签孔、COUNT叉讥、SUM…….),而having可以饥追。
4.DATEDIFF() 函數(shù)
DATEDIFF() 函數(shù)返回兩個(gè)日期之間的天數(shù)图仓。
DATEDIFF(date1,date2)
例子:來查找與之前(昨天的)日期相比溫度更高的所有日期的 Id。
SELECT a.Id FROM Weather a, Weather b WHERE DATEDIFF(a.RecordDate,b.RecordDate) = 1 AND a.Temperature > b.Temperature
DATEDIFF(date1,date2)? =num
Num = date1 - date2