子查詢,又叫內部查詢,相對于內部查詢,包含內部查詢的就稱為外部查詢。子查詢允許把一個查詢嵌套在另一個查詢當中。
mysql數據庫子查詢語句的特點:任何可使用表達式的地方,都可以使用子查詢,只要他返回的是單個值;子查詢按返回值的數量,子查詢對外部依賴性,比較運算符的不同性進行分類;這在分頁查詢sql語句中經常用到。
一:子查詢的特點:
-
大多數情況下子查詢充當中間結果集角色
-
子查詢可進行嵌套,且根據內存及表達式復雜程度不同,嵌套限制也不同
-
任何可使用表達式的地方,都可以使用子查詢,只要他返回的是單個值
二:子查詢的分類:
-
按返回值的數量可分為:標量子查詢,多值子查詢
-
按子查詢對外部依賴性:獨立子查詢,相關子查詢
-
按比較運算符的不同性:IN,EXISTS,ANY,SOME,ALL等多種形式
三:子查詢的使用:
-
首先創建兩個表(學生表和教師表)
#?創建學生表 mysql>?create?table?tb_student( ????->?stu_ID?long, ????->?class?varchar(5), ????->?score?int ????->?); Query?OK,?0?rows?affected?(0.23?sec) #?創建教師表 mysql>?create?table?tb_teacher( ????->?tea_ID?long, ????->?class?varchar(5), ????->?age?int ????->?); Query?OK,?0?rows?affected?(0.49?sec)
-
將一些值插入到表中
insert?into?tb_student?values(1,?"A",?20); insert?into?tb_student?values(2,?"A",?30); insert?into?tb_student?values(3,?"A",?70); insert?into?tb_student?values(4,?"B",?60); insert?into?tb_student?values(5,?"B",?70); insert?into?tb_student?values(6,?"B",?80); insert?into?tb_teacher?values(1,?"A",?25); insert?into?tb_teacher?values(2,?"B",?40);
-
準備工作完畢,接下來進行子查詢練習
-
例一:各班教師ID及其班級平均分數
mysql>?select?tea_ID, ????->?(select?avg(score)?from?tb_student?as?s?where?s.class?=?t.class?group?by?class) ????->?as?Avg?from?tb_teacher?as?t; +--------+---------+ |?tea_ID?|?Avg?????| +--------+---------+ |?1??????|?40.0000?| |?2??????|?70.0000?| +--------+---------+ 2?rows?in?set?(0.00?sec)
-
例二:各班級教師年齡及其班級及格人數(60為及格線)
mysql>?select?age, ????->?(select?count(*)?from?tb_student?as?s?where?s.class?=?t.class?&&?s.score?>=?60?group?by?class) ????->?as?Count?from?tb_teacher?as?t?order?by?Count?desc; +------+-------+ |?age??|?Count?| +------+-------+ |???40?|?????3?| |???25?|?????1?| +------+-------+ 2?rows?in?set?(0.00?sec)
相關推薦:
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END