1. 程式人生 > >SQL查詢中having和where的異同點

SQL查詢中having和where的異同點

SQL查詢中having與where 的異同點

在sql查詢中, having與where類似,可以篩選資料,where後的表示式怎麼寫,having後就怎麼寫。
1. where針對表中的列發揮作用,查詢資料。
2. having對查詢結果中的列發揮作用,篩選資料。

-- 查詢本店商品價格比市場價低多少錢,輸出低200元以上的商品
select goods_id,good_name,market_price - shop_price as s 
from goods 
having s>200 ;
--這裡不能用where因為s是查詢結果,而where只能對錶中的欄位名篩選

如果用where的話則是:

select goods_id,goods_name 
from goods 
where market_price - shop_price > 200;

同時使用where與having

 select cat_id,goods_name,market_price - shop_price as s 
 from goods 
 where cat_id = 3 
 having s > 200;

查詢積壓貨款超過2萬元的欄目,以及該欄目積壓的貨款

    select cat_id,sum(shop_price * goods_number) as s 
    from
goods group by cat_id having s > 20000

查詢兩門及兩門以上科目不及格的學生的平均分
思路:

-- 先計算所有學生的平均分
select name,avg(score) as pj 
from stu 
group by name;
-- 查出所有學生的掛科情況
select name,score<60 
from stu;
-- 這裡score<60是判斷語句,所以結果為真或假,mysql中真為1假為0

-- 查出兩門及兩門以上不及格的學生
select name,sum(score<60) as gk 
from
stu group by name having gk > 1;
-- 綜合結果 select name,sum(score<60) as gk,avg(score) as pj from stu group by name having gk >1;