用一条SQL语句查询出每门课程的成绩都大于80的学生姓名
生活随笔
收集整理的這篇文章主要介紹了
用一条SQL语句查询出每门课程的成绩都大于80的学生姓名
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
-- 用一條SQL語句查詢出每門課程的成績都大于80的學生姓名。Student表如下:
-- name course score
-- 張三 語文 81
-- 張三 數學 75
-- 李四 語文 76
-- 李四 數學 90
-- 王五 語文 81
-- 王五 數學 100
-- 王五 英語 90create table test1(
id int auto_increment,
name varchar(10),
course varchar(10),
score int,
primary key pk_test1(id)
)engine=InnoDB,charset=utf8mb4;
insert into test1 values
(0,'張三','語文',81),(0,'張三','數學',75),
(0,'李四','語文',76),(0,'李四','數學',90),
(0,'王五','語文',81),(0,'王五','數學',100),
(0,'王五','英語',90);
select * from test1;
#這道題有兩種理解思路:
#第一種是出現在表里面的課程就是該人的所有課程,即張三李四在沒有英語成績下,兩門都大于80也是算每門都大于80。
#用not in 或者 not exists 實現 第一種的寫法 不過DISTINCT關鍵字盡量少用,效率太低
-- not in
select distinct name from test1 where name not in
(select distinct name from test1 where score < 80);
-- not exists
select distinct name from test1 a where not exists
(select name from test1 b where score < 80 and a.name=b.name);
-- 效率比較高
select name from test1 group by name having min(score) >= 80;
#第二種是他們都有英語數學語文三門課程,沒有出現在表的成績要按0來算,即張三李四還有一門成績為0的英語。
-- 效率高的寫法
select name from test1 group by name having count(1) = 3 and min(score) >= 80;
?
總結
以上是生活随笔為你收集整理的用一条SQL语句查询出每门课程的成绩都大于80的学生姓名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绑定点击事件调用百度微信分享
- 下一篇: 切图常说的@1X@2X@3X是什么意思?