-- 子查詢
-- 本質:在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’為末尾位置