-- 子查询
-- 本质:在where语句中嵌套一个子查询语句,最后返回给where里的是一个值
-- 子查询 -- 本质:在where语句中嵌套一个子查询语句,最后返回给where里的是一个值 -- =========where=============== -- 1.查询高等数学-1的所有考试结果(学号,科目编号,成绩),降序排列 SELECT studentno,r.subjectno,studentresult FROM result r INNER JOIN `subject` sub ON r.subjectno=sub.subjectno WHERE subjectname='高等数学-1' order by studentresult DESC -- 方式二:使用子查询(由里及外) SELECT `studentno`,`subjectno`,`studentresult` FROM result WHERE subjectno=( SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1' ) -- 查询所有高等数学-1的 学生学号 -- SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1' -- 练习,查询分数不小于80分的学生的学号和姓名 SELECT s.studentno,studentname FROM student s INNER JOIN result r ON s.studentno=r.studentno where studentresult>=80 AND subjectno=(SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1') -- 在这个基础上增加科目,高等数学-2(查询高等数学-2的编号) -- SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1' -- 有趣的写法(看懂了证明子查询这一块学会了,不过还是推荐用多表查询) SELECT studentno,studentname FROM student WHERE studentno in( SELECT studentno FROM result WHERE studentresult>80 AND subjectno=( select subjectno FROM `subject` WHERE subjectname='高等数学-1' ) )
练习
-- 练习:查询c语言-1前3名同学的成绩的信息(学号,姓名,分数) -- 使用子查询 SELECT studentno,studentname FROM student WHERE studentno in( SELECT studentno FROM result WHERE (SELECT subjectno FROM `subject` WHERE subjectname='C语言-1' ) order by studentresult DESC ) LIMIT 0,3
select完整语法
-- select完整语法 SELECT [ALL|DISTINCT] {*|table *|[table.field1[as a]ias1][,table.field2[as alias2]][.....]} FROM table_name[as table_alias] [left|right|inner join table_name2]-- 联合查询 [where....]-- 指定结果须满足的条件 [GROUP BY....]-- 指定结果按照那几个字段来分组 [HAVING]-- 过滤分组记录必须满足的次要条件 [ORDER BY....]-- 指定查询一个记录按一个或者多个排序 [LIMIT 0,3]-- 指定查询记录‘0’为起始位置,‘3’为末尾位置