子查询:
子查询:嵌套在其它查询中的查询语句。(又称为内部查询)
主查询:包含其它子查询的查询称为主查询。(又称外部查询)
非相关子查询:
在主查询中,子查询只需要执行一次,子查询结果不再变化,供主查询使用,这种查询方式称为非相关子查询。
也可以这么理解:
非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
现在我们来对这个表做一个查询:
查询具有年龄相同的人在2人及以上的,他们的年龄分别是多少。
select age from stud group by age having count(age)>=2;
count(age)在这里只是作为供主查询使用的条件。
相关子查询:
相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
也可以这么理解:
执行查询的时候先取得外部查询的一个属性值,然后执行与此属性值相关的子查询,执行完毕后再取得外部父查询的下一个值,依次再来重复执行子查询;
我们先把表格增加一列sex并设置好值。
接下来:
查询不但具有年龄相同的人在2人及以上的,而且性别是1的那些人的年龄。
SELECT age,sex FROM stud GROUP BY age,sex HAVING COUNT(age)>=2 AND sex='1';