用一条SQL语句查询出每门课程的成绩都大于80的学生姓名
生活随笔
收集整理的這篇文章主要介紹了
用一条SQL语句查询出每门课程的成绩都大于80的学生姓名
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
-- 用一條SQL語(yǔ)句查詢(xún)出每門(mén)課程的成績(jī)都大于80的學(xué)生姓名。Student表如下:
-- name course score
-- 張三 語(yǔ)文 81
-- 張三 數(shù)學(xué) 75
-- 李四 語(yǔ)文 76
-- 李四 數(shù)學(xué) 90
-- 王五 語(yǔ)文 81
-- 王五 數(shù)學(xué) 100
-- 王五 英語(yǔ) 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,'張三','語(yǔ)文',81),(0,'張三','數(shù)學(xué)',75),
(0,'李四','語(yǔ)文',76),(0,'李四','數(shù)學(xué)',90),
(0,'王五','語(yǔ)文',81),(0,'王五','數(shù)學(xué)',100),
(0,'王五','英語(yǔ)',90);
select * from test1;
#這道題有兩種理解思路:
#第一種是出現(xiàn)在表里面的課程就是該人的所有課程,即張三李四在沒(méi)有英語(yǔ)成績(jī)下,兩門(mén)都大于80也是算每門(mén)都大于80。
#用not in 或者 not exists 實(shí)現(xiàn) 第一種的寫(xiě)法 不過(guò)DISTINCT關(guān)鍵字盡量少用,效率太低
-- 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;
#第二種是他們都有英語(yǔ)數(shù)學(xué)語(yǔ)文三門(mén)課程,沒(méi)有出現(xiàn)在表的成績(jī)要按0來(lái)算,即張三李四還有一門(mén)成績(jī)?yōu)?的英語(yǔ)。
-- 效率高的寫(xiě)法
select name from test1 group by name having count(1) = 3 and min(score) >= 80;
?
總結(jié)
以上是生活随笔為你收集整理的用一条SQL语句查询出每门课程的成绩都大于80的学生姓名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 绑定点击事件调用百度微信分享
- 下一篇: 切图常说的@1X@2X@3X是什么意思?