jdbc中sql的占位符出现的位置:
where子句和values()中,select后和from后不行,要记住?一定是可变的,在查询同一个表中式可变的。
select sum(id) ,teacher, id from student group byteacher;
字段出现的位置:
在标准sql中,select后的字段要么是出现在group by后面,要么是出现在聚集函数中,例如下面这样是不对的:
selectavg(score) , score from student group byteacher_name;
红色的sql既没有出现在聚集函数中也没有出现在groupby子句中。
但是mysql认为这是正确的,会返回score的第一条记录。
聚集函数出现的位置:
首先明确where是对行进行过滤,having是对分组进行过滤,在where过滤之前根本没有组,所以聚集函数不可能出现在where中,只能出现在select后和having子句中。
select count(*)from student whereid > 3 group by teacher_name having count(*) > 1;
而且要注意where在group前,having在group后。
sql99:
cross join 交叉连接:相当于取广义笛卡尔积
natural join 自然连接:使用同名字段作为相等条件
using :当有不至一个同名字段时,使用using指定一个作为条件的同名字段。
join .. on… on后面是连接条件
left/right/full[outer] join 左/右/两段一定会出现,没有就用null补全。
sql 92:
等值
不等值
广义笛卡尔积
外连接(mysql不支持,不用管)