HAVING:
-
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函數一起使用。
-
HAVING 子句可以讓我們篩選分組后的各組數據。
示例
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
表信息
- 表名:student_score
- 字段名:name course score
查出“張”姓學生中平均成績大於75分的學生信息
-
關鍵點:
- 嵌套select
- “張”姓:%模糊匹配,
name like '張%'
- 平均值使用HAVING,與聚合函數連接:
having avg(score)>75
-
代碼:
select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75)
查詢出每門課程的成績都大於80的學生姓名
SELECT S.name FROM Student S GROUP BY S.name Having MIN(S.score)>=80
其他問題羅列
-
1、請寫出SQL,找出所有姓張的學生,並按年齡從小到大排列;
SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age;
-
2、請寫出SQL,取出計算機科考成績不及格的學生;
SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60;
-
3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果
SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code
-
4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果
Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+)
Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code
Full Out:Left join union all right join
-
5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);
INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20);
COMMIT;
-
6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;
UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五')
-
7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;
DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0)