mysql子查詢是什嗎?
子查詢,又叫內部查詢,相對於內部查詢,包含內部查詢的就稱為外部查詢。子查詢允許把一個查詢嵌套在另一個查詢當中。
mysql資料庫子查詢語句的特點:任何可使用運算式的地方,都可以使用子查詢,只要他返回的是單個值;子查詢按傳回值的數量,子查詢對外部依賴性,比較子的不同性進行分類;這在分頁查詢sql語句中經常用到。
一:子查詢的特點:
子查詢可被嵌套在 select,insert,update,delete 等語句中
大多數情況下子查詢充當中間結果集角色
子查詢可進行嵌套,且根據記憶體及運算式複雜程度不同,嵌套限制也不同
任何可使用運算式的地方,都可以使用子查詢,只要他返回的是單個值
二:子查詢的分類:
按傳回值的數量可分為:標量子查詢,多值子查詢
按子查詢對外部依賴性:獨立子查詢,相互關聯的子查詢
按比較子的不同性: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)