sql基础(1)

1、where 和 having 关键字

where和having都可用于在sql语句中过滤条件,都可以和group by语句结合在一起使用。

二者的区别在于:

(1)与group by一起使用时,where在group by语句之前,代表先用where语句进行过滤,再使用group by对过滤后的结果进行分组;

而having语句只能用在group by之后,对分组后的结果进行筛选。

(2)where后的条件表达式不允许使用聚合函数,所以当需要使用聚合函数时只能放在having后面。

sql练习:查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩 -- (包括有成绩的和无成绩的)

--学生表
CREATE TABLE `Student`(
`s_id` VARCHAR(20),
`s_name` VARCHAR(20) NOT NULL DEFAULT '',
`s_birth` VARCHAR(20) NOT NULL DEFAULT '',
`s_sex` VARCHAR(10) NOT NULL DEFAULT '',
PRIMARY KEY(`s_id`)
)
--成绩表
CREATE TABLE `Score`(
    `s_id` VARCHAR(20),
    `c_id`  VARCHAR(20),
    `s_score` INT(3),
    PRIMARY KEY(`s_id`,`c_id`)
);
SELECT a.s_id 学生编号,ROUND(AVG(a.s_score),2) 平均成绩, b.s_name 学生姓名  FROM score a
LEFT JOIN student b ON a.`s_id` = b.`s_id`
GROUP BY a.s_id ,b.s_name
HAVING AVG(a.s_score) < 60 
UNION
SELECT a.s_id 学生编号,0 平均成绩, a.s_name 学生姓名  FROM student a
WHERE a.`s_id` NOT IN (SELECT DISTINCT score.s_id FROM score)

猜你喜欢

转载自www.cnblogs.com/Aug-20/p/12031258.html