表结构与内容:
1.
用一条sql查出来每门功课都大于80分的同学:
sql1.思路:反其道而行之,子查询找到有那些同学任意一门功课小于80分,然后去除剩下每门功课都大于80分的同学
SELECT
DISTINCT name
from
student
WHERE
name not in (SELECT DISTINCT name from student where fenshu <= 80) ;
sql2.思路:按同学名字分组,留下最小分数大于80分的同学
SELECT name from student GROUP BY name having MIN(fenshu) > 80;
用一条sql删除除了id不同,其余都相同的学生信息
思路:使用group by 去重,取重复信息的一条id作为保留(这里取最小id),删除id不在其中的信息(留下不重复的两条),起到去重作用
group by使用的频率相对较高,但正如其功能一样,它的目的是用来进行聚合统计的,虽然也可能实现去重的功能,但这并不是它的长项。
DELETE from student_2 WHERE id not in (SELECT MIN(id) from student_2 GROUP BY number,`name`,class_number,fenshu);
思路:多表之间用逗号默认是join(inner join),全外连接查询,产生笛卡尔集,过滤掉自己对阵自己的情况
abcd 对应四个球,现在四个球进行比赛,显示所有可能比赛组合
SELECT a.`name`,b.`name` FROM team a , team b WHERE a.`name` < b.`name` ;
MySql一些操作:
– 复制表(只复制表结构 <>不等于操作符 )
CREATE TABLE b as SELECT * FROM student WHERE 1<>1;
– 拷贝表结构和内容
CREATE TABLE b as SELECT * FROM student ;
– 拷贝表数据(a=d,b=e,c=f 一一对应)
INSERT into b(a,b,c) SELECT d,e,f FROM a;
注:
left join 和 left outer join 没有区别(左连接和左外连接没有区别)
– 两张关联表,删除主表中已经在副表中没有的信息
DELETE from info where not exists (select * from infobz where infobz.infoid= info.id)