表結構與內容:
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)