用一條sql語句查詢出所有課程都大於80分的學生名單:
name | cource | score |
張三 | 語文 | 81 |
張三 | 數學 | 75 |
李四 | 語文 | 76 |
李四 | 數學 | 90 |
王五 | 語文 | 81 |
王五 | 數學 | 100 |
王五 | 英語 | 90 |

1 SET FOREIGN_KEY_CHECKS=0; 2 3 -- ---------------------------- 4 -- Table structure for grade 5 -- ---------------------------- 6 DROP TABLE IF EXISTS `grade`; 7 CREATE TABLE `grade` ( 8 `name` varchar(255) NOT NULL, 9 `class` varchar(255) NOT NULL, 10 `score` tinyint(4) NOT NULL 11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 12 13 -- ---------------------------- 14 -- Records of grade 15 -- ---------------------------- 16 INSERT INTO `grade` VALUES ('張三', '語文', '81'); 17 INSERT INTO `grade` VALUES ('張三', '數學', '75'); 18 INSERT INTO `grade` VALUES ('李四', '語文', '76'); 19 INSERT INTO `grade` VALUES ('李四', '數學', '90'); 20 INSERT INTO `grade` VALUES ('王五', '語文', '81'); 21 INSERT INTO `grade` VALUES ('王五', '數學', '100'); 22 INSERT INTO `grade` VALUES ('王五', '英語', '90'); 23 SET FOREIGN_KEY_CHECKS=1;
查詢每門課都大於80分的同學的姓名:

1 select distinct name from grade where name not in (select distinct name from grade where score<=80);
還有一種簡單的寫法:

1 select name from grade group by name having min(score)>80;
查詢平均分大於80的學生名單:

1 select name from ( 2 select count(*) t, sum(score) num, name from grade group by name 3 ) as a where a.num>80*t;
也有一種簡單的寫法:

1 select name, avg(score) as sc from grade group by name having avg(score)>80;