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